YOLO V5 学习笔记
一、基本知识点积累
1.1 自适应锚点框
- 在 yolov3 中是采用 k 均值和遗传算法对自定义数据集进行分析,获得合适自定义数据集中对象边界框预测的预设锚点框。
- 在 yolov5 中锚点框是基于训练数据自动学习的。(Auto Learning Bounding Box Anchors)
1.2 激活函数
在 yolov5 中,中间 / 隐藏层使用了 Leaky ReLU 激活函数,最后的检测层使用了 Sigmoid 激活函数;
1.3 优化器
在 yolov5 中提供了两个优化函数 Adam 和 SGD,并预设了与之匹配的训练超参数,默认是 SGD。
1.4 损失函数
- yolo 系列的损失计算是基于
objectness score
,class probability
,bounding box regression score
。- yolov5 中使用 GIOU Loss 作为 bounding box 的损失;
- yolov5 中使用二进制交叉熵和 Logits 损失函数计算类概率和目标得分的损失,同时我们也可以使用 fl_gamma 参数来激活 Focal loss 计算损失函数。
二、创新性
2.1 数据增强
2.1.1 缩放
2.1.2 色躁空间调整
2.1.3 图像遮挡
- (1) Random Erase: 用随机值或训练集的平均像素值替换图像的区域。
- (2) Cutout: 仅对 CNN 第一层的输入使用剪切方块 Mask。
- (3) Hide and Seek: 将图像分割成一个由
SxS
图像补丁组成的网格,根据概率设置随机隐藏一些补丁,从而让模型学习整个对象的样子,而不是单独一块,比如不单独依赖动物的脸做识别。- (4) Grid Mask: 将图像的区域隐藏在网格中,作用也是为了让模型学习对象的整个组成部分。
- (5) MixUp: 图像对及其标签的凸面叠加。
2.1.4 多图组合
- Cutmix: 将另一个图像中的剪切部分粘贴到增强图像。图像的剪切迫使模型学会根据大量的特征进行预测。
2.1.5 Mosaic 数据增强
- 在
Cutmix
中我们组合了两张图像,而在Mosaic
中我们使用四张训练图像按一定比例组合成一张图像,使模型学会在更小的范围内识别对象。其次还有助于显著减少对 batch-size 的需求,毕竟大多数人的 GPU 显存有限。
2.2 自对抗训练(SAT)
- Self-Adversarial Training 是在一定程度上抵抗对抗攻击的数据增强技术。CNN 计算出 Loss, 然后通过反向传播改变图片信息,形成图片上没有目标的假象,然后对修改后的图像进行正常的目标检测。需要注意的是在 SAT 的反向传播的过程中,是不需要改变网络权值的。
- 使用对抗生成可以改善学习的决策边界中的薄弱环节,提高模型的鲁棒性。因此这种数据增强方式被越来越多的对象检测框架运用。
2.3 类标签平滑
- Class label smoothing 是一种正则化方法。如果神经网络过度拟合或过度自信,我们都可以尝试平滑标签。也就是说在训练时标签可能存在错误,而我们可能“过分”相信训练样本的标签,并且在某种程度上没有审视了其他预测的复杂性。因此为了避免过度相信,更合理的做法是对类标签表示进行编码,以便在一定程度上对不确定性进行评估。
- yolo v4 中采用了,yolo v5 中似乎没有使用类标签平滑。
2.4 自适应锚定框
- 在 YOLO V3 和 YOLO V4 中是采用 k 均值和遗传学习算法对自定义数据集进行分析,获得适合自定义数据集中对象边界框预测的预设锚定框。
- 在 YOLO V5 中锚定框是基于训练数据自动学习的。
三、Backbone
Backbone: 在不同图像细粒度上聚合并形成图像特征的卷积神经网络。
yolov4 和 yolov5 都使用 CSPDarknet 作为 backbone,从输入图像中提取丰富的信息特征。
CSPNet
- 解决了其他大型卷积神经网络框架 Backbone 中网络优化的梯度信息重复问题;
- 具体做法:将梯度的变化从头到尾集成到特征图中,因此减少了模型的参数量和 FLOPS 数值,既保证了推理速度和准确性,又减少了模型尺寸。
- CSPNet 实际上是基于
Densenet
的思想,复制基础层的 feature map,通过 dense block 发送副本到下一阶段,从而将基础层的 feature map 分离出来,这样可以有效地缓解梯度消失问题,支持特征传播,鼓励网络重用特征,从而减少网络参数数量。- CSPNet 思想可以和 ResNet, ResNext 和 DenseNet 结合,目前主要有 CSPResNext50 和 CSPDarknet53 两种改造 Backbone 网络。
四、Neck
Neck: 一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。
Neck 主要用于生成特征金字塔。特征金字塔会增强模型对于不同缩放尺度对象的检测,从而能够识别不同大小和尺度的同一物体。 yolov4 和 yolov5 都使用 PANet 作为 Neck 来聚合特征。
PANet
- PANet 基于 Mask R-CNN 和 FPN 框架,同时加强了信息传播。
- 该网络的特征提取器采用了一种新的增强自下向上路径的 FPN 结构,改善了低层特征的传播。
- 第三条通路的每个阶段都将前一阶段的特征作为输入,并用
3*3
卷积层处理他们,输出通过横向连接被添加到自上而下通路的同一阶段 feature map 中,这些特征图为下一阶段提供信息。- 使用自适应特征池化(Adaptive feature pooling)来恢复每个候选区域和所有特征层次之间被破坏的信息路径,聚合每个特征层次上的每个候选区域,避免被任意分配。
五、Head
Head: 对图像特征进行预测,生成边界框和并预测类别。
- Head 主要用于最终检测部分,它在特征图上应用锚点框,并生成带有类概率、对象得分和包围框的最终输出向量。
- yolov3 、yolov4 和 yolov5 都使用相同的 Head 模型结构。
Head
- 不同缩放尺度的 Head 被用来检测不同大小的物体,每个 Head 一共
(80个类 + 1个概率 + 4个坐标)* 3
锚点框,一共 255 个 channels。