『目标检测』YOLO V5(1):学习笔记

YOLO V5 学习笔记

  • 一、基本知识点积累
    • 1.1 自适应锚点框
    • 1.2 激活函数
    • 1.3 优化器
    • 1.4 损失函数
  • 二、创新性
    • 2.1 数据增强
      • 2.1.1 缩放
      • 2.1.2 色躁空间调整
      • 2.1.3 图像遮挡
      • 2.1.4 多图组合
      • 2.1.5 Mosaic 数据增强
    • 2.2 自对抗训练(SAT)
    • 2.3 类标签平滑
    • 2.4 自适应锚定框
    • 2.5 yolov5 在实践中收敛速度非常快的原因?
  • 三、Backbone
  • 四、Neck
  • 五、Head
  • 参考链接

一、基本知识点积累

1.1 自适应锚点框

  • 在 yolov3、v4 中是采用 kmean 和遗传算法对自定义数据集进行分析,获得合适自定义数据集中对象边界框预测的预设锚点框。
  • 在 yolov5 中锚点框是基于训练数据自动学习的。(Auto Learning Bounding Box Anchors
  • 具体代码实现可以参考 general.py 文件中的 check_anchors 函数。

1.2 激活函数

在 yolov5 中,中间 / 隐藏层使用了 Leaky ReLU 激活函数,最后的检测层使用了 Sigmoid 激活函数;

『目标检测』YOLO V5(1):学习笔记_第1张图片

1.3 优化器

在 yolov5 中提供了两个优化函数 AdamSGD,并预设了与之匹配的训练超参数,默认是 SGD

1.4 损失函数

  • yolo 系列的损失计算是基于 objectness scoreclass probabilitybounding 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 图像遮挡

  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 的反向传播的过程中,是不需要改变网络权值的。
  • 使用对抗生成可以改善学习的决策边界中的薄弱环节,提高模型的鲁棒性。因此这种数据增强方式被越来越多的对象检测框架运用。
『目标检测』YOLO V5(1):学习笔记_第2张图片

2.3 类标签平滑

  • Class label smoothing 是一种正则化方法。如果神经网络过度拟合或过度自信,我们都可以尝试平滑标签。也就是说在训练时标签可能存在错误,而我们可能“过分”相信训练样本的标签,并且在某种程度上没有审视了其他预测的复杂性。因此为了避免过度相信,更合理的做法是对类标签表示进行编码,以便在一定程度上对不确定性进行评估。
  • yolo v4 中采用了,yolo v5 中似乎没有使用类标签平滑。

2.4 自适应锚定框

  • 在 yolo v3 和 yolo v4 中是采用 kmean 和遗传学习算法对自定义数据集进行分析,获得适合自定义数据集中对象边界框预测的预设锚定框。
  • 在 yolo v5 中锚定框是基于训练数据自动学习的。

2.5 yolov5 在实践中收敛速度非常快的原因?

yolov5 采用了增加正样本 anchor 数目的做法来加速收敛。核心匹配规则为:

  1. 对于任何一个输出层,抛弃了基于 max iou 匹配的规则,而是直接采用 shape 规则匹配,也就是该 bbox 和当前层的 anchor 计算宽高比,如果宽高比例大于设定阈值,则说明该 bbox 和 anchor 匹配度不够,将该 bbox 过滤暂时丢掉,在该层预测中认为是背景;
  2. 对于剩下的 bbox,计算其落在哪个网格内,同时利用四舍五入规则,找出最近的两个网格,将这三个网格都认为是负责预测该 bbox 的,可以发现粗略估计正样本数相比前 yolo 系列,至少增加了三倍。
『目标检测』YOLO V5(1):学习笔记_第3张图片

如上图所示,绿点表示该 Bbox 中心,现在需要额外考虑其 2 个最近的邻域网格也作为该 bbox 的正样本 anchor。从这里就可以发现 bbox 的 xy 回归分支的取值范围不再是 0 ~ 1,而是 -0.5 ~ 1.5 (0.5是网格中心偏移,请仔细思考为啥是这个范围),因为跨网格预测了。

三、Backbone

Backbone: 在不同图像细粒度上聚合并形成图像特征的卷积神经网络。

yolov4 和 yolov5 都使用 CSPDarknet 作为 backbone,从输入图像中提取丰富的信息特征。

CSPNet

  1. 解决了其他大型卷积神经网络框架 Backbone 中网络优化的梯度信息重复问题;
  2. 具体做法:将梯度的变化从头到尾集成到特征图中,因此减少了模型的参数量和 FLOPS 数值,既保证了推理速度和准确性,又减少了模型尺寸。
  3. CSPNet 实际上是基于 Densenet 的思想,复制基础层的 feature map,通过 dense block 发送副本到下一阶段,从而将基础层的 feature map 分离出来,这样可以有效地缓解梯度消失问题,支持特征传播,鼓励网络重用特征,从而减少网络参数数量。
  4. CSPNet 思想可以和 ResNet, ResNext 和 DenseNet 结合,目前主要有 CSPResNext50 和 CSPDarknet53 两种改造 Backbone 网络。

四、Neck

『目标检测』YOLO V5(1):学习笔记_第4张图片

Neck: 一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。

Neck 主要用于生成特征金字塔。特征金字塔会增强模型对于不同缩放尺度对象的检测,从而能够识别不同大小和尺度的同一物体。 yolov4 和 yolov5 都使用 PANet 作为 Neck 来聚合特征。

PANet

  1. PANet 基于 Mask R-CNN 和 FPN 框架,同时加强了信息传播。
  2. 该网络的特征提取器采用了一种新的增强自下向上路径的 FPN 结构,改善了低层特征的传播。
  3. 第三条通路的每个阶段都将前一阶段的特征作为输入,并用 3*3 卷积层处理他们,输出通过横向连接被添加到自上而下通路的同一阶段 feature map 中,这些特征图为下一阶段提供信息。
  4. 使用自适应特征池化(Adaptive feature pooling)来恢复每个候选区域和所有特征层次之间被破坏的信息路径,聚合每个特征层次上的每个候选区域,避免被任意分配。

五、Head

Head: 对图像特征进行预测,生成边界框和并预测类别。

  • Head 主要用于最终检测部分,它在特征图上应用锚点框,并生成带有类概率、对象得分和包围框的最终输出向量。
  • yolov3 、yolov4 和 yolov5 都使用相同的 Head 模型结构。
  • 不同缩放尺度的 Head 被用来检测不同大小的物体,每个 Head 一共 (80个类 + 1个概率 + 4个坐标)* 3 锚点框,一共 255 个 channels。

参考链接

  1. https://zhuanlan.zhihu.com/p/161083602
  2. https://zhuanlan.zhihu.com/p/183838757

你可能感兴趣的:(目标检测网络)