YOLOv5的配置文件yolov5s.yaml,
用于定义YOLOv5s模型的结构、超参数以及训练和测试过程中的一些关键设置。总结如下:
一、模型结构
定义了YOLOv5s模型的大小和架构,包括各种层的类型(如卷积层、池化层、C3模块等)和它们的参数(如卷积核大小、步长、填充等)。
C3模块是YOLOv5中的一个重要组件,它是Cross Stage Partial networks(CSPNet)的一个变体,旨在提高网络的效率和性能。C3模块通过分而治之的策略,将输入特征图分成两部分进行处理,然后再合并,以实现更丰富的特征融合和更有效的信息传递。
二、超参数
yolov5s.yaml
文件中包含了训练过程中的各种超参数,这些参数对模型的训练效果和性能有着重要影响。常见的超参数包括:
- 学习率(lr):控制模型在训练过程中参数更新的步长。
- 批量大小(batch_size):决定每次训练时输入模型的样本数量。
- 权重衰减(weight_decay):用于防止模型过拟合,通过惩罚模型参数的复杂度来实现。
- 动量(momentum):在梯度下降过程中,动量项可以加速SGD在相关方向上的优化,并抑制震荡。
三、锚点大小
锚点(anchor boxes)是用于预测边界框(bounding boxes)的一组预设框。yolov5s.yaml
定义了不同特征图层级上使用的锚点尺寸。
这些锚点尺寸根据数据集中目标的大小分布来设定,以便模型在预测时能够更准确地定位目标。YOLOv5在初始化时设定了9个锚点,这些锚点被应用于三个检测层,共涉及三个特征图(feature maps)。每个特征图中的每个网格单元都被指派了三个锚点用以执行检测任务。
四、路径设置
定义数据集路径、预训练权重路径。
五、其他设置
除了上述内容外,yolov5s.yaml
文件还可能包含其他一些关键设置,如:
- 是否使用多尺度训练(multi-scale training):多尺度训练可以提高模型对不同尺寸目标的检测能力。
- 是否使用自动锚点检测(autoanchor):自动锚点检测可以根据数据集自动调整锚点尺寸,以提高模型的检测准确性。
- 是否启用Cosine学习率调度器:Cosine学习率调度器可以根据训练进度动态调整学习率,以优化模型的训练效果。
六、参数示例
以下是一个yolov5s.yaml
文件中参数设置的示例:
# 定义类别数量,比如针对自定义的10类物体检测任务这里设为10
nc: 10
# 深度因子,用于控制模型深度缩放
depth_multiple: 0.33
# 宽度因子,控制每层通道数缩放
width_multiple: 0.50# 先验框设置,分别对应不同特征图尺度
anchors:- [10,13, 16,30, 33,23] # P3/8层的anchors,用于检测小目标- [30,61, 62,45, 59,119] # P4/16层的anchors,检测中等目标- [116,90, 156,198, 373,326] # P5/32层的anchors,检测大目标# 主干网络(Backbone)模块定义
backbone:# 示例的第一个模块,这里是聚焦层(Focus),将图像切片拼接通道扩充- [-1, 1, Focus, [64, 3]]# 接着是一系列的瓶颈CSP(BottleneckCSP)模块等- [-1, 1, Conv, [128, 3, 2]]- [-1, 3, BottleneckCSP, [128]]- [-1, 1, Conv, [256, 3, 2]]- [-1, 9, BottleneckCSP, [256]]- [-1, 1, Conv, [512, 3, 2]]- [-1, 9, BottleneckCSP, [512]]- [-1, 1, Conv, [1024, 3, 2]]- [-1, 1, SPP, [1024, [5, 9, 13]]]- [-1, 3, BottleneckCSP, [1024, False]]# 头部(Head)模块定义,用于最终的检测相关处理
head:- [-1, 1, Conv, [512, 1, 1]]- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]- [-1, 3, BottleneckCSP, [512, False]]- [-1, 1, Conv, [256, 1, 1]]- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]- [-1, 3, BottleneckCSP, [256, False]]- [-1, 1, Conv, [128, 1, 1]]- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 2], 1, Concat, [1]]- [-1, 3, BottleneckCSP, [128, False]]- [-1, 1, Conv, [64, 1, 1]]- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 0], 1, Concat, [1]]- [-1, 3, BottleneckCSP, [64, False]]# 最终的检测层,传入类别数量和先验框等信息- [-1, 1, Detect, [nc, anchors]]
nc
表示输出类别的个数,depth_multiple
和width_multiple
分别控制模型的深度和宽度。anchors
部分定义了不同特征图层级上使用的锚点尺寸。详细如下:
nc
:表示数据集中的类别数,在常见的 COCO 数据集上,该值通常为 80,因为 COCO 数据集包含 80 个不同的类别。这个参数决定了模型输出层的维度大小,即每个特征点的预测类别数量13.depth_multiple
:模型层数因子,用于调整网络的深度。它通过控制每个模块(如卷积层、残差块等)的重复次数来影响模型的深度。例如,在yolov5s
中该值为 0.33,意味着模型中的一些模块会根据此系数进行相应的重复次数调整,从而生成相对较浅的网络结构,以适应不同的计算资源和性能需求123.width_multiple
:层通道数因子,用于调整网络中每一层输出特征图的通道数。它会将配置文件中每层的通道数乘以该系数,从而改变模型的宽度。较小的值会减少每层的通道数,使模型更加轻量化,适合资源受限的环境123.
Anchors
即先验框,用于在不同尺度的特征图上预测目标物体的位置和大小。在yolov5s.yaml
中,定义了 9 个 anchors,分布在三个不同的特征图层上13 :
P3/8
层:对应特征图是原始输入图像下采样 8 倍得到的,尺寸通常为 52x52,该层的 anchors 为(10, 13, 16, 30, 33, 23)
,适合检测小目标 。P4/16
层:特征图是原始输入图像下采样 16 倍得到的,尺寸通常为 26x26,anchors 为(30, 61, 62, 45, 59, 119)
,用于检测中等大小的目标。P5/32
层:特征图是原始输入图像下采样 32 倍得到的,尺寸通常为 13x13,anchors 为(116, 90, 156, 198, 373, 326)
,适合检测大目标。
Backbone
Backbone 即主干网络,用于提取图像的特征。在yolov5s.yaml
中,backbone 部分以列表的形式定义了一系列的网络模块及其参数,每个模块由(from, number, module, args)
四个参数来描述3 :
from
:表示输入来源,-1 表示从上一层获得输入,(-1, 6)
表示从上层和第 6 层两层获得输入。number
:表示有几个相同的模块,若该值大于 1,则需要乘以depth_multiple
进行模型组件数量的缩放 。module
:模块的名称,这些模块通常在common.py
中定义,例如conv
表示卷积层,bottleneckcsp
表示瓶颈 CSP 模块等3.args
:类的初始化参数,用于解析作为模块的传入参数,不同模块有不同的参数设置,如卷积层的输入输出通道数、卷积核大小、步长等3.
Head
Head 部分主要用于对 Backbone 提取的特征进行进一步处理和目标检测。同样以(from, number, module, args)
的形式定义了一系列模块3 :
- 包含了卷积层、上采样层、拼接层和检测层等不同类型的模块,用于调整特征图的通道数、尺寸,并最终进行目标的检测和分类。
- 其中
detect
模块的from=(17,20,23)
表示输入来自第 17 层、第 20 层和第 23 层,args=(nc, anchors)
表示传入的参数为类别数量nc
和三组锚框anchors
。
yolov5s.yaml
文件是YOLOv5s模型训练和测试的重要配置文件,它包含了模型结构、超参数、锚点大小、路径设置以及其他关键设置。