了解奇怪的 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。
我试图了解 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。