YOLO V5 学习笔记
一、基本知识点积累
1.1 自适应锚点框
- 在 yolov3、v4 中是采用 kmean 和遗传算法对自定义数据集进行分析,获得合适自定义数据集中对象边界框预测的预设锚点框。
- 在 yolov5 中锚点框是基于训练数据自动学习的。(Auto Learning Bounding Box Anchors)
- 具体代码实现可以参考 general.py 文件中的 check_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 中使用
二进制交叉熵(BCE)和Logits 损失函数计算类概率和目标得分的损失,同时我们也可以使用fl_gamma参数来激活focal loss计算损失函数。
二、创新性
2.1 数据增强
2.1.1 缩放
2.1.2 色躁空间调整
2.1.3 图像遮挡
Random Erase: 用随机值或训练集的平均像素值替换图像的区域。Cutout: 仅对 CNN 第一层的输入使用剪切方块 Mask。Hide and Seek: 将图像分割成一个由 SxS 图像补丁组成的网格,根据概率设置随机隐藏一些补丁,从而让模型学习整个对象的样子,而不是单独一块,比如不单独依赖动物的脸做识别。Grid Mask:将图像的区域隐藏在网格中,作用也是为了让模型学习对象的整个组成部分。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 中是采用 kmean 和遗传学习算法对自定义数据集进行分析,获得适合自定义数据集中对象边界框预测的预设锚定框。
- 在 yolo v5 中锚定框是基于训练数据自动学习的。
2.5 yolov5 在实践中收敛速度非常快的原因?
yolov5 采用了增加正样本 anchor 数目的做法来加速收敛。核心匹配规则为:
- 对于任何一个输出层,抛弃了基于
max iou匹配的规则,而是直接采用shape规则匹配,也就是该 bbox 和当前层的 anchor 计算宽高比,如果宽高比例大于设定阈值,则说明该 bbox 和 anchor 匹配度不够,将该 bbox 过滤暂时丢掉,在该层预测中认为是背景;- 对于剩下的 bbox,计算其落在哪个网格内,同时利用四舍五入规则,找出最近的两个网格,将这三个网格都认为是负责预测该 bbox 的,可以发现粗略估计正样本数相比前 yolo 系列,至少增加了三倍。
如上图所示,绿点表示该 Bbox 中心,现在需要额外考虑其 2 个最近的邻域网格也作为该 bbox 的正样本 anchor。从这里就可以发现 bbox 的 xy 回归分支的取值范围不再是 0 ~ 1,而是 -0.5 ~ 1.5 (
0.5是网格中心偏移,请仔细思考为啥是这个范围),因为跨网格预测了。
三、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 一共
(80个类 + 1个概率 + 4个坐标)* 3锚点框,一共 255 个 channels。
本文介绍了YOLOv5的关键特性,包括自适应锚点框、多种数据增强方法、自对抗训练等创新技术,以及其快速收敛的原因。还详细解析了YOLOv5的架构组成,包括Backbone、Neck和Head模块。
1874

被折叠的 条评论
为什么被折叠?



