如何计算YOLO中卷积层的输出大小?

时间:2018-04-12 10:59:39

标签: machine-learning computer-vision computer-science yolo convolutional-neural-network

YOLO Architecture

这是YOLO的架构。我试图自己计算每一层的输出大小,但我无法得到文章中描述的大小。

例如,在第一个Conv层中,输入大小为448x448,但它使用带有步幅2的7x7滤波器,但根据此等式 W2 =(W1-F + 2P)/ S + 1 =( 448 - 7 + 0)/ 2 + 1 ,我无法得到整数结果,因此滤波器大小似乎不适合输入大小。

所以任何人都可以解释这个问题?我错过了什么或误解了YOLO架构吗?

2 个答案:

答案 0 :(得分:0)

好吧,我花了一些时间学习源代码,并了解输入图像在图像的顶部,下部,左侧和右侧添加了额外的3个填充,因此图像大小变为(448+ 2x3)= 454 ,有效填充的输出大小应以这种方式计算: Output_size = ceil((W-F + 1)/ S)=(454-7 + 1)/ 2 = 224 ,因此,输出大小应 224x224x64

我希望这可能会有所帮助

答案 1 :(得分:0)

正如Hawx Won所说,输入图像已添加了额外的3个填充,这就是源代码的工作原理。


对于卷积层,如果启用了pad,则每个层的padding值将通过以下方式计算:

# In parser.c
if(pad) padding = size/2;

# In convolutional_layer.c
l.pad = padding;

size是过滤器的形状。


因此,对于第一层: padding = size / 2 = 7/2 = 3

则第一卷积层的输出应为:

output_w =(input_w + 2 * pad-size)/ stride + 1 =(448 + 6-7)/ 2 + 1 = 224

output_h =(input_h + 2 * pad-size)/ stride + 1 =(448 + 6-7)/ 2 + 1 = 224