【目标检测】YOLOv4 论文详解




AlexeyAB 大神继承了 YOLOv3, 在其基础上进行持续开发,将其命名为 YOLOv4。并且得到 YOLOv3 作者 Joseph Redmon 的承认,下面是 Darknet 原作者的在 readme 中更新的声明。


思维导图

YOLOv4 总体上可以划分为两部分:

  • 一部分是讲 Bag of freebies 和 Bag of Specials; 
  • 另外一部分讲的是 YOLOv4 的创新点。


BoF 和 BoS 的选择

BoF 是指 Bag of Freebies,BoS 是指 Bag of specials。这一部分就是各种技巧(Tricks)的选择了。

为了改进目标检测训练,CNN 通常使用以下内容:

  • 激活:ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish
  • 边界框回归损失: MSE, IoU, GIoU, CIoU, DIoU
  • 数据增强:CutOut, MixUp, CutMix
  • 正化方法:DropOut, DropPath, Spatial DropOut ,or DropBlock
  • 网络归一化:Batch Normalization (BN) , Cross-GPU Batch Normalization (CGBN or SyncBN) , Filter Response Normalization (FRN) , or Cross-Iteration Batch Normalization (CBN)
  • 跳转连接: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)

原文:至于训练激活函数,由于 PRELU 和 SELU 的训练难度较大,而 ReLU6 是专门的量化网络的设计,因此,我们不从候选列表中选择上述激活函数。(所以只是科普下?最后选择了 Mish)对于正则化方法,发表了 DropBlock 的人将他们的方法与其他方法进行了比较,在细节上,他们的正则化方法赢得了很多。我们毫不犹豫地选择了 DropBlock 作为我们正则化方法。


解读:

  • ReLU6:relu6, y= min(max(0,x), 6),鼓励网络学习到稀疏特征。
  • Mish :Mish=x * tanh(ln(1+e^x))
  • IoU->GIoU->DIoU->CIoU,从最开始引用IoU损失函数,到改进如何更好优化,一系列方法。
  • MixUp、CutMix :这个是打比赛都会用到的方法。
  • CBN:解决 BN 批次太小的问题,batch 不想调大,但是又希望能达到 batch 很大的效果,就采用统计前几个迭代的均值和方差。CBN 属于利用不同的 iter 数据来变相扩大 batchsize 从而改进模型的效果。
  • DropOut 系列:
    • Dropout :整体随机扔
    • Spatial Dropout:按通道随机扔
    • DropBlock:每个特征图上按 spatial 块随机扔
    • Cutout :在输入层按 spatial 块随机扔
    • DropConnect:只在连接处扔,神经元不扔。
    • SyncBN: 多卡同步 BN。
  • 跳转连接: 这里的方法有如 Resnet 里面 skip 连接,如果对连接加上权重就是 Weighted residual connections(WRC) 这个来自论文 EfficientDet,如果将特征映射分为两部分就是 CSP。



额外提升

为了使设计的检测器更适合于单 GPU 的训练,我们进行了如下其他设计和改进:

  • 新的数据扩增马赛克和自我对抗训练(SAT)的方法
  • 在应用遗传算法时,我们选择最佳的超参数
  • 修改了一些外在方法,修改 SAM、 PAN 和 CmBN


解读:

  • 马赛克是一种新的数据扩增方法,它混合了 4 个训练图像。
  • 自我对抗训练 (SAT)也是一种新的数据扩增方法,前向和反向传播都有。在第一阶段,神经网络会更改原始图像,而不是网络权重。这样,神经网络通过改变原始图像,从而创造了一种图像上没有想要目标的假象,对其自身执行了对抗攻击。在第二阶段,训练神经网络以正常方式检测此修改图像上的目标。类似样本生成
  • CmBN 是 CBN 的修改版。CBN 上面简单介绍过了。也就是说仅收集单个batch中的mini-batches之间的统计信息。
  • 从空间上的注意力到点注意力来修改 SAM。
  • 将 PAN 的快捷方式连接改为串联。




Bag of freebies


“bag of freebies” 是指目标检测器在不增加推理损耗的情况下达到更好的精度,这些方法称为只需转变训练策略或只增加训练量成本。也就是说数据增扩、标签软化、Focal Loss等这些不用改变网络结构的方法。


Bag of specials

“Bag of specials” 是指插入模块是用来增强某些属性的,显著提高目标检测的准确性。比如 SE 模块等注意力机制模块,还有特征融合 FPN 等模块。


创新点


Mosaic 数据增强方法


将 4 张不同的图片镶嵌到一张图中,其优点是:

  • 混合四张具有不同语义信息的图片,可以让检测器检测超出常规语境的目标,增强模型的鲁棒性。
  • 由于 BN 是从四张图片计算得到的,所以可以减少对大的 mini-batch 的依赖。


Self-Adversarial Training


自对抗训练也是一种新的数据增强方法,可以一定程度上抵抗对抗攻击。其包括两个阶段,每个阶段进行一次前向传播和一次反向传播。

  • 第一阶段,CNN 通过反向传播改变图片信息,而不是改变网络权值。通过这种方式,CNN 可以进行对抗性攻击,改变原始图像,造成图像上没有目标的假象。
  • 第二阶段,对修改后的图像进行正常的目标检测。


CmBN


上图表达的是三种不同的 BN 方式,理解的时候应该从左往右看,BN 是对当前 mini-batch 进行归一化。CBN 是对当前以及当前往前数 3 个 mini-batch 的结果进行归一化。而本文提出的 CmBN 则是仅仅在这个 Batch 中进行累积。


modified SAM


CBAM 含有空间注意力机制和通道注意力机制, SAM 就是其中的空间注意力机制.

本文将 Spatial-wise Attention 变为 Point-wise Attention, modified SAM 中没有使用 pooling, 而是直接用一个卷积得到的特征图直接使用 Sigmoid 进行激活, 然后对应点相乘, 所以说改进后的模型是 Point-wise Attention.


modified PANet


PANet 融合的时候使用的方法是 Addition.


这里 YOLOv4 将融合的方法由加法改为 concatenate,yolov4.cfg 中用的是 route 来链接两部分特征。


结构

YOLOv4 由以下组成:

  • 骨架网络: CSPDarknet53
  • 颈部: SPP、PAN
  • 头部: YOLOv3




Backbone

对于 GPU,综合考虑了网络输入的分辨率、卷积层数、参数量和卷积输出通道数等,论文选择的是 Darknet53 的改进版 CSPDarknet53 来作为 Backbone。虽然 CSPResNext50 在分类上比 CSPDarknet53 要好,但是在 COCO 检测数据集上,CSPDarknet53 在速度和检测精度上均优于 CSPResNext50。

 

Neck and Head

在 Neck 部分上,作者添加了 SPP Block,因为 SPP 能增大网络的感受野,同时几乎不会影响到检测速度。


另外,作者还使用的改进版 PANet 的特征融合方法,代替了原 YOLOv3 中的 FPN 方法,改进的地方在于,原 PANet 不同 scale 之间的特征融合是通过相加 (addition) 的方式,论文中采用的是衔接 (concatenation) 的融合方式。

在这里插入图片描述

 

作者还使用了一种叫做改进版 SAM 的模块,原本的 SAM 方法是通道维度的 attention,论文里将其改成了 point-wise 的 attention。

在这里插入图片描述


在 Head 部分,YOLOv4 仍然沿用了 v3 的 anchor based 的结构。


总结








reference

https://blog.csdn.net/lifei1229/article/details/105848879

https://blog.csdn.net/saturdaysunset/article/details/109269812

https://zhuanlan.zhihu.com/p/136115652