模型配置介绍 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

posted @ 2023-03-16 12:01  kuaqi  阅读(372)  评论(0编辑  收藏  举报