YOLOv4 随笔

YOLOv4

YOLOv4 在网络结构上没有大突破,不过使用学多小 tricks,可以做面试经典,在YOLOv4 可以看成 YOLOv3 加强版,所以YOLOv4 与 YOLOv3 的预测大致一样

  • 13 x 13 用于检测大目标
  • 26 x 26 用于检测中目标
  • 52 x 52 用于检测小目标

在 head 部分决定我们网络是用于检测还是分类

YOLOv4 的优化点

在现在的目标检测的结构,现在按这些位置来说明一下 YOLOv4 改动

  • backbone: Darknet53 更改为 CSPDarknet53
  • neck
  • head 在特征提取网络,使用了 SPP 和 PANet 结构来加强特征提取

  • 输入
  • 压缩宽度和高度到通道维度
  • 在后面几层已经具有一定语义信息,
  • 进行

CSPDarknet53(CSP)

CSPDarknet53 是 Darknet53 的改进版本,经过主干神经网我们会得到 3 个有效特征层输出 、 和 的特征层, CSP

  • resblock 构成
  • Mish 激活函数: ReLU 激活函数一直依赖是我们做卷积神经网络的首选。不过随着 Mish 出现,这种情况可能会发生改变。那么 Mish 凭什么能够代替老大的位置呢?

看函数形状会发现这个函数不是单调的,ReLU 和 Mish 的对比,Mish 的梯度更平滑。而且实验证明 Mish 和各种优化器结合的效果都比较好。

更具体说一下,以上无边界(即正值可以达到任何高度),避免了由于封顶而导致的饱和,例如 ReLU6。理论上对负值的轻微允许允许更好的梯度流,而不是像ReLU 中那样的硬 0 边界。

最后,可能也是最重要的,目前的想法是,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性泛化

尽管如此,我测试了许多激活函数,他们也满足了其中的许多想法,但大多数都无法执行。这里的主要区别可能是 Mish 函数在曲线上几乎所有点上的平滑度。

这种通过 Mish 激活曲线平滑性来推送信息的能力如下图所示,在简单测试中,越来越多的层被添加到一个测试神经网络中,而没有一个统一的函数。随着层深的增加,ReLU 精度迅速下降(),其次是 Swish。相比之下,Mish 能更好地保持准确性,这可能是因为它能更好地传播信息:

  • 使用 CSPDarkNet 的结构(CSP + Darknet)
  • Part1 是对残差结构堆叠
  • Part2 部分是一个大残差边

融合特征提取

SPP 结构
  • 首先进行 卷积进行 3 次卷积
  • 然后进行 SPP 模块,只需要不同池化核进行池化后再进行堆叠就可以了
  • 最后再进行 3 次卷积
PANet

SE 和 SAM

  • SENet (Squeeze-and-Excitation (SE), 增加 2% 计算量(但推理时有10%的速度),可以提升1%的ImageNet top-1精度。
  • Spatial Attention Module (SAM),增加0.1%计算量,提升0.5%的top-1准确率

数据增强

这里

  • 数据增强(扩充)
    • 亮度、饱和度、噪声
    • 几何变形
  • 模拟对象遮挡
    • random erase
    • Cutout
    • hide-and-seek grid mask 随机或均匀选取图片中的几何区域将其全部替换为 0
  • feture map
    • Dropout
    • DropConnet
    • DropBlock
  • 图像融合
    • MixUp
    • CutMix 作者在 CutMix 基础提出 Mosica 增强

  • 解决类别不平衡
    • hard negative example mining
    • online hard example mining
    • focal loss
  • label smoothing
    转换到

  • bbox
    • IoU loss

      IoU 的问题是因为如果两个框不相交,IoU 就是 0 所以 1 存在梯度消失问题

    • GIoU loas

    • DIoU loss

      • 两个中心点位置约束,c 表示两个框的对角线连接长度就是 c 两个中心点距离平方
    • CIoU loss
      \begin{aligned} L_{CIoU} = 1 - IoU + \frac{\rho^2(b,b^{bt})}{c^2} + \alpha v\\ v = \frac{4}{\pi^2}(\arctan \frac{w^{gt}}{h^{gt}} - \arctan \frac{w}{h})^2\\ \alpha = \frac{v}{(1 = IoU)+ v}\\ \end{aligned}

      • v 是用来度量长宽比相似性的, 是用来度量权重函数

      • IoU 是比值的概念,对目标物体的 scale 是不敏感的,然而常用的 BBox 的回归损失优化和 IoU 优化不是完全等价的,通常 IoU 无法直接优化没有重叠的部分。

      • 于是有人提出直接使用 IoU 作为回归优化 loss, CIoU 是其中非常优秀的一种想法。

      • CIoU 将目标与 anchor 之间的距离、重叠率、尺度以及正则项都考虑进去,使得BBox变得更加稳定,不会像 IoU 和 GIoU 一样出现训练过程中发散等问题。而

    • DIoU-NMS

      • 传统的 NMS 通过重叠去掉冗余框,但是对于遮挡效果不好。所以在 DIoU-NMS 不仅考虑检测区域的重叠,而且还考虑了检测区域间的中心点的距离

现在做目标检测就是对应目标,对三个部分进行选择填空,

部位
backbone CSPDarknet53
neck SPP,FPN,PAN
head 与 yolov3 一致,提供 3 个检测头

YOLOv4

  • Bag of Freebie(Bof) for backbone
    • CutMix
    • Mosaic data augmentation
    • DropBlock regularization
    • Class label smoothing
  • Bag of Special(Bos)
    • Mish activation
    • Cross-stage partial connections(CSP)
    • Multi-input weighted residual connection(MiWRC)
  • Bag of Freebies(BoF) for Detector
    • CIoU-loss
    • CmBN
    • DropBlock regularization
    • Mosaic data augmentation
    • Self-Adversarial Training
    • Eliminate grid sensitivity
    • Using multiple anchors for a single ground truth
    • Cosine annealing scheduler
    • Optimal hyper-parameters
    • Random training shapes
  • Bag of Specials(Bos) for detector
    • Mish activation
    • SPP-block
    • SAM-block
    • PAN path-aggregation block
    • DIoU-NMS

历史版本

版本 说明
1 yolov1 直接回归出位置
2 yolov2 全流程多尺度法,还是一个检测头
3 yolov3 多尺度检测头,resblock darknet53
  • 模型设计,前向计算
  • 定义目标函数
  • 反向传播

你可能感兴趣的:(YOLOv4 随笔)