模型配置介绍 yolov5s.yaml
YOLOv5的Backbone详解、
1、参数
# Parameters
nc: 80 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
1)nc: 8
(1)代表数据集中的类别数目,例如MNIST中含有0-9共10个类。
2)depth_multiple: 0.33
(1)用来控制模型的深度,仅在number≠1时启用。
(2)如第一个C3层(c3具体是什么后续介绍)的参数设置为[-1, 3, C3, [128]],其中number=3,表示在v5s中含有1个C3(3*0.33);
(3)同理,v5l中的C3个数就是3(v5l的depth_multiple参数为1)。
3)width_multiple: 0.50
(1)用来控制模型的宽度,主要作用于args中的ch_out。
(2)如第一个Conv层,ch_out=64,那么在v5s实际运算过程中,会将卷积过程中的卷积核设为64x0.5,所以会输出32通道的特征图。
2、backbone
# 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, [1024, 3, 2]], # 7-P5/32
[-1, 3, C3, [1024]],
[-1, 1, SPPF, [1024, 5]], # 9
]
1)from:
(1)-n代表是从前n层获得的输入,如-1表示从前一层获得输入
2)number:
(1)表示网络模块的数目,如[-1, 3, C3, [128]]表示含有3个C3模块
3)model:
(1)表示网络模块的名称,具体细节可以在./models/common.py查看,如Conv、C3、SPPF都是已经在common中定义好的模块
4)args:
(1)表示向不同模块内传递的参数,即[ch_out, kernel, stride, padding, groups]
(2)这里连ch_in都省去了,因为输入都是上层的输出(初始ch_in为3)。
(3)为了修改过于麻烦,这里输入ch_in的获取是从./models/yolo.py的def parse_model(md, ch)函数中解析得到的
5)例如:
[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
(1)input:3x640x640
(2)[ch_out, kernel, stride, padding]=[64, 6, 2, 2]
(3)故新的通道数为64x0.5=32
(4)根据特征图计算公式:Feature_new=(Feature_old-kernel+2xpadding)/stride+1可得:新的特征图尺寸为:Feature_new=(640-6+2x2)/2+1=320
6)例如:
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
(1)input:32x320x320
(2)[ch_out, kernel, stride]=[128, 3, 2]
(3)同理可得:新的通道数为64,新的特征图尺寸为160