以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],从这四个分别进行阐述。
1.from:当前输入来源于哪里,类似于yolov3中的cfg文件中的表示
[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模块后。
版权声明:本文为wzfafabga原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。