了解奇怪的 YOLO 卷积层输出大小

Understanding weird YOLO convolutional layer output size

我试图了解 Darknet 的工作原理,我正在查看 yolov3-tiny 配置文件,特别是 layer number 13 (line 107).

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

内核大小为1x1,步长为1,填充也为1。 当我使用darknet加载网络时,提示输出宽高与输入相同:

13 conv    256       1 x 1/ 1     13 x  13 x1024 ->   13 x  13 x 256

但是,既然kernel是1x1,还有padding,宽高不应该加2吗?如果我理解正确,内核将 运行 通过输入的所有 "pixels" 加上填充,所以对我来说宽度和高度应该增加 2*padding 是有意义的。

我使用了公式

output_size = ((input_size – kernel_size + 2*padding) / stride) + 1

它检查出来了。 (13 - 1 + 2 * 1) / 1 + 1 = 15

有人知道我错过了什么吗?

提前致谢。

我想通了。

我误解了图层中的pad参数。如果你想让padding为1,你应该这样写:

padding=1

pad 实际上是一个布尔值。当设置为 1 时,图层的填充将等于 size / 2.

在这种情况下,内核的大小为 1,因此填充最终为 1/2 = 0(整数运算)。由于没有填充,输出宽度和高度与输入相同。

我应该有 RTFM。