通过网络可视化工具netron可以查看cfg网络构图,其中可以查看每层网络的基本信息及编号,编号很重要,特别是route和shortcut层。
1、卷积层
根据设定的参数可以获得每层输出的特征图尺寸:
1×1卷积:可以降低计算量
3×3卷积:可以对filter个数进行调整
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=mish
# Downsample
[convolutional]
batch_normalize=1
filters=64
size=3
stride=2
pad=1
activation=mish
2、Shortcut和Route层
shortcut在cfg中的内容都是一样的
[shortcut]
from=-3
activation=linear
其中from=-3表示从当前层倒数第三个层(convolutional层或也是shortcut层),其主要作用起到跨层连接(add)。如下图:(也可以通过编号查看)
route层是一个环路,有几种情况。如layers为一个或多个负值。主要作用:特征融合操作 使用concatenate拼接
[route]
layers = -2
...
...
[route]
layers = -1,-7
如果在两条主线组成的环路中,可按照当前层逆时针顺序获得layers的序号(也可以通过编号相减获得)
还有一些情况,在upsample之后,layers值为正值,发现就是与route直接连接的conv层的编号
[upsample]
stride=2
[route]
layers = 85
......
......
......
[upsample]
stride=2
[route]
layers = 54
spp层有点复杂,感觉环路走向不明,通过查看编号就可以解释layers=-1,-3,-5,-6
### SPP ###
[maxpool]
stride=1
size=5
[route]
layers=-2
[maxpool]
stride=1
size=9
[route]
layers=-4
[maxpool]
stride=1
size=13
[route]
layers=-1,-3,-5,-6
### End SPP ###
获得各层序号,并相减
上采样、下采样、YOLO层等参数可以参考这篇。
参考:
https://blog.csdn.net/weixin_41560402/article/details/106119774
https://www.cnblogs.com/sdu20112013/p/11099244.html
https://zhuanlan.zhihu.com/p/150127712