YOLOv4 随笔

作者: zidea | 来源:发表于2020-10-11 19:30 被阅读0次

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 结构来加强特征提取

<img src="./images/yolov3_structure.jpg">

<img src="./images/yolov4_net_architecture.jpeg">

<img src="./images/yolov4_structure.png">

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

CSPDarknet53(CSP)

CSPDarknet53 是 Darknet53 的改进版本,经过主干神经网我们会得到 3 个有效特征层输出 13\times 13 \times 102426\times 26 \times 51252\times 52 \times 256 的特征层, CSP

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

<img src="./images/yolov4_mish_activation.jpeg" width="75%">

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

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

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

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

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

<img src="./images/yolov4_mish_activation_02.jpeg">

  • 使用 CSPDarkNet 的结构(CSP + Darknet)
    <img src="./images/yolov4_resblock.png">
  • Part1 是对残差结构堆叠
  • Part2 部分是一个大残差边

<img src="./images/yolov4_csp_002.png">

<img src="./images/yolov4_002.jpeg"/>

融合特征提取

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

<img src="./images/yolov4_neck_head.png">

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
      <img src="./images/yolov4_dropblock.png">
  • 图像融合
    • MixUp
    • CutMix 作者在 CutMix 基础提出 Mosica 增强
      <img src="./images/yolov4_mosaic.png">
      <img src="./images/yolov4_mosaic_002.jpeg">
  • 解决类别不平衡
    • hard negative example mining
    • online hard example mining
    • focal loss
  • label smoothing
    [0,0,1] 转换到[0.01,0.01,0.90]
    labels \times (1- a) + \frac{a}{n}[1,1,\cdots]
    [0,0,1] \times (1- 0.03) + \frac{0.03}{3}[1,1,0]
  • bbox
    <img src="./images/yolov4_CIoU.jpeg">
    • IoU loss
      L_{IoU} = 1 - \frac{|B \cap B^{gt}|}{B \cup B^{gt}}
      IoU 的问题是因为如果两个框不相交,IoU 就是 0 所以 1 存在梯度消失问题

    • GIoU loas
      L_{GIoU} = 1 - IoU + \frac{|C - B \cup B^{gt}|}{|C|}
      <img src="./images/yolov4_GIoU.jpg">

    • DIoU loss
      L_{DIoU} = 1 - IoU + \frac{\rho^2(b,b^{bt})}{c^2}
      <img src="./images/yolov4_DIoU.jpg">

      • 两个中心点位置约束,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 是用来度量长宽比相似性的,\alpha 是用来度量权重函数

      • 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 个检测头
  • 13 \times 13 \times 256
  • 26 \times 26 \times 256
  • 52 \times 52 \times 256

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,Scaled YOLOv4

    目录: •YOLOv4 •Scaled YOLOv4 YOLOv4和Scaled YOLOv4的一作的其它工作:不...

  • YOLOv4 随笔

    YOLOv4 YOLOv4 在网络结构上没有大突破,不过使用学多小 tricks,可以做面试经典,在YOLOv4 ...

  • Yolov4 网络结构

    为了便于理解Yolov4网络结构,参照AlexeyAB提供的Yolov4网络cfg文件绘制网络结构图Yolov4代...

  • yolov4论文解析

    论文链接 代码链接 先盗一张大佬总结的图: 个人如何看待yolov4 Yolov4的作者在论文中通篇都在强调其实用...

  • yolov4

    CBM:Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。CBL:由Conv+Bn+L...

  • yolov4安装配置及测试

    下载yolov4 编译darknet 更改Makefile里面关于cuda、opencv,.so编译。本地环境为单...

  • yolov4论文翻译

    来源:https://blog.csdn.net/qq_38316300/article/details/1057...

  • YOLOv4学习摘要

    本文主要是学习yolov4论文的一些学习笔记,可能不会那么详细。所以在文章最后列出了一些参考文献,供大家参考 yo...

  • YOLOV4 训练识别图中的汽车

    AlexeyAB针对各种可以提升精度的trick进行了整合,加入YOLOV3中,得到最终本文的YOLOV4。最终在...

  • SSD与yolov1的对比

    yolo系列和ssd发表的时间顺序是yolov1,ssd,yolov2,yolov3,当然现在yolov4也出现了...

网友评论

    本文标题:YOLOv4 随笔

    本文链接:https://www.haomeiwen.com/subject/rgoepktx.html