yolov5配置文件详解

parameters

# parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple, 宽度 设置卷积核个数
  • depth_multiple 是用在 backbone 中的 number≠1 的情况下, 即在 Bottleneck 层使用,控制模型的深度,yolov5s 中设置为 0.33,假设 yolov5l 中有三个 Bottleneck,那 yolov5s 中就只有一个 Bottleneck。
  • width_multiple 主要是用于设置 arguments,例如 yolov5s 设置为 0.5,Focus 就变成 [32, 3],Conv 就变成 [64, 3, 2]。以此类推,卷积核的个数都变成了设置的一半。

anchors

# anchors  先验框的配置
anchors:
  # 三个不同尺度的先验框
  - [10,13, 16,30, 33,23]  # P3/8 # P3/8  检测小目标,第一个先验框宽为10,高为13
  - [30,61, 62,45, 59,119]  # P4/16 检测中目标,P4即stride=16(经过了16倍的下采样以后尺度上的anchor的大小)
  - [116,90, 156,198, 373,326]  # P5/32 检测大目标,对应原图上 anchor 的大小也是最大的

anchors参数共有三行,每行9个数值;且每一行代表应用不同的特征图;
1、第一行是在最大的特征图上的锚框

2、第二行是在中间的特征图上的锚框

3、第三行是在最小的特征图上的锚框;

在目标检测任务中,一般希望在大的特征图上去检测小目标,因为大特征图才含有更多小目标信息,因此大特征图上的anchor数值通常设置为小数值,而小特征图上数值设置为大数值检测大的目标。

YOLOv5 根据经验得到了这么 3 组 anchors,对于很多数据集而言确实挺合适的。但是也不能保证这 3 组 anchors 就适用于所有的数据集,所有 yolov5 还有一个anchor进化的策略:使用 k-means 和遗传进化算法,找到与当前数据集最吻合的 anchors。具体的代码细节见 autoanchor.py。

backbone

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, BottleneckCSP, [1024, False]],  # 9
  ]
  • Bottleneck 可以译为“瓶颈层”。
  • from列参数:-1 代表是从上一层获得的输入,-2表示从上两层获得的输入(head同理)。
  • number列参数:1 表示只有一个,3 表示有三个相同的模块
  • SPP、Conv、Bottleneck、BottleneckCSP 的代码可以在 ./models/common.py 中获取到。
  • [64, 3] 解析得到 [3, 32, 3] ,输入为 3(RGB),输出为 32,卷积核 k 为 3;
  • [128, 3, 2] 这是固定的,128 表示输出 128 个卷积核个数。根据 [128, 3, 2] 解析得到 [32, 64, 3, 2] ,32 是输入,64 是输出(128*0.5=64),3 表示 3×3 的卷积核,2 表示步长为 2。

head

# YOLOv5 head
# 作者未区分 neck 模块,所以 head 部分包含了 PANet 和 Detect 部分
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13
 
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],  # 17 (P3/8-small)
 
   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],  # 20 (P4/16-medium)
 
   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],  # 23 (P5/32-large)
 
   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

架构图

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×