yolov5多种模型文件解读
以yolov5n6.yaml为例。其他m、s、l与x只是在倍数上有差距。
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license # Parameters nc: 80 # number of classes depth_multiple: 0.33 # model depth multiple width_multiple: 0.25 # layer channel multiple anchors: - [19,27, 44,40, 38,94] # P3/8 - [96,68, 86,152, 180,137] # P4/16 - [140,301, 303,264, 238,542] # P5/32 - [436,615, 739,380, 925,792] # P6/64 # YOLOv5 v6.0 backbone backbone: # [from, number, module, args] [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, C3, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 6, C3, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, C3, [512]], [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 [-1, 3, C3, [768]], [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 [-1, 3, C3, [1024]], [-1, 1, SPPF, [1024, 5]], # 11 ] # YOLOv5 v6.0 head head: [[-1, 1, Conv, [768, 1, 1]], [-1, 1, nn.Upsample, [None, 2, nearest]], [[-1, 8], 1, Concat, [1]], # cat backbone P5 [-1, 3, C3, [768, False]], # 15 [-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, nearest]], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C3, [512, False]], # 19 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, nearest]], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, C3, [256, False]], # 23 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], [[-1, 20], 1, Concat, [1]], # cat head P4 [-1, 3, C3, [512, False]], # 26 (P4/16-medium) [-1, 1, Conv, [512, 3, 2]], [[-1, 16], 1, Concat, [1]], # cat head P5 [-1, 3, C3, [768, False]], # 29 (P5/32-large) [-1, 1, Conv, [768, 3, 2]], [[-1, 12], 1, Concat, [1]], # cat head P6 [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) ]
nc——数据集上检测的类别数
depth_multiple——模型深度倍数。多图对比虽然描述不同,但修改的地方相同。下图1是对Backbone主干网络中的BCSP中残差网络块的数量进行乘以倍数的修改,下图2是对模型的Bakebone主干网络的CSP中残差网络块的进行乘以倍数的修改,修改后得到不同复杂度的模型来应对不同复杂度的任务。具体残差网络作用可以看Resnet的作用。
width_multiple——模型宽度倍数。宽度由卷积核的数量(通道channel)所决定。通过乘以倍数进行卷积核数量(通道channel)的调整,修改后得到不同复杂度的模型来应对不同复杂度的任务。
anchors——锚框(先验框),对应不同的下采样倍数的锚框大小。可以从图中Head部分可以观察到,一共是9个锚框。
backbone——主干网络,[from, number, module, args],从这四个分别进行阐述。
[shortcut] from=-3 activation=linear
yolov5不再用这种表述形式,但from的含义相同,换汤不换药。
2.number:本模块重复次数。yolov3是用了全部列出的方法,冗长。yolov5表示形式简洁,修改方便。
3.module:采用的模块类型。
4.args:模块对应的参数。
neck和head模块没有区分,放在了一块,与backbone形式上相同。
同时出现,nn.Upsample上采样,这是为了除了拼接的那个维度其他维度大小相等。concat,拼接操作,注意from部分,通过数可知-1表示前一个,8指的是8模块前,而不是8模块后。
