YOLOV4论文详解

YOLOV4论文详解_第1张图片

YOLOV4算法Pytorch实现:https://github.com/codecat0/CV/tree/main/Object_Detection/YOLOV4

1. Introduction

本文的贡献如下:

  1. 我们开发了一个高效、强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 TiGPU来训练一个超级快速和准确的目标探测器。
  2. 在检测器的训练过程中,我们验证了最先进的Bag-of-FreebiesBag-of-Specials
  3. 我们修改了最先进的方法,使其更有效,更适合于单GPU训练,包括CBNPANSAM等。

2. Related work

YOLOV4论文详解_第2张图片

2.1 Object detection models

我们对现有的目标检测算法进行了总结,当前的目标检测器由以下几部分组成:
YOLOV4论文详解_第3张图片

2.2 Bag of freebies

我们称只改变训练策略只增加训练成本使目标检测器在不增加推理成本的情况下获得更高的精度的方法为Bag of freebies。包括:

2.2.1. 数据增强:

增加输入图像的可变性,从而使设计的目标检测模型对不同环境获得的图像具有更高的鲁棒性。

  • 逐像素调整
    1. 光度失真:brightness(亮度)、contrast(对比度)、hue(色度)、saturation(饱和度)、noise(噪声)
    2. 几何失真:scaling(缩放尺寸)、cropping(裁剪)、flipping(翻转)、rotating(旋转)
  • 模拟目标遮挡
    1. erase(擦除)、CutOut(剪切):随机选择图像的矩形区域,并填充随机或互补的零值
    2. hide-and-seekgrid mask:随机或均匀地选择图像中的多个矩形区域,并将它们替换为全零
    3. 将上述方式作用于特征图上:DropOutDropConnectDropBlock
  • 将多张图像组合在一起:
    1. MixUp:使用两个图像以不同的系数比率相乘后叠加,利用叠加比率调整标签
    2. CutMix:将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域大小调整标签
  • style transfer GAN

2.2.2. 数据不平衡问题

  • hard negative example mining
  • online hard example mining
  • focal loss
  • label smoothing

2.2.3. box回归损失函数

  • MSE(Smooth L1)

  • IoU
    I o U = A ∩ B A ∪ B IoU=\frac {A \cap B} {A \cup B} IoU=ABAB

  • GIoU
    YOLOV4论文详解_第4张图片

    G I o U = I o U − ∣ A c − U ∣ A c GIoU=IoU - \frac {|A_c-U|} {A_c} GIoU=IoUAcAcU

    其中, A c A_c Ac表示两个框的最小闭包面积,即同时包含两个框的最小框的面积(虚线区域) U U U表示不属于两个框但属于最小闭包的面积

  • DIoU
    YOLOV4论文详解_第5张图片

D I o U = I o U − ρ 2 ( b , b g t ) c 2 DIoU=IoU-\frac {\rho ^2(b, b^{gt})} {c^2} DIoU=IoUc2ρ2(b,bgt)

  • CIoU

    一个好的box回归损失应该考虑3个因素:重叠面积中心点距离长宽比

    C I o U = I o U − ρ 2 ( b , b g t ) c 2 − α v α = v ( 1 − I o U ) + v v = 4 π 2 ( arctan ⁡ w g t h g t − arctan ⁡ w h ) 2 CIoU=IoU-\frac {\rho ^2(b, b^{gt})} {c^2}-\alpha v \\ \alpha = \frac {v} {(1-IoU)+v} \\ v=\frac {4} {\pi^2}(\arctan \frac {w^{gt}} {h^{gt}}-\arctan \frac {w} {h})^2 CIoU=IoUc2ρ2(b,bgt)αvα=(1IoU)+vvv=π24(arctanhgtwgtarctanhw)2

2.3 Bag of specials

我们将通过增加少量推理成本便可极大提升模型精度的方法称为Bag of specials

2.3.1 增大感受野

  • SPP
    YOLOV4论文详解_第6张图片

  • ASPP
    YOLOV4论文详解_第7张图片

  • RFB
    YOLOV4论文详解_第8张图片

2.3.2 注意力机制

  • SE
    YOLOV4论文详解_第9张图片

  • SAM
    YOLOV4论文详解_第10张图片

2.3.3 特征融合

  • skip-connection

  • FPN
    YOLOV4论文详解_第11张图片

  • SFAM:使用SE模块对多尺度拼接特征图在通道维度进行加权
    YOLOV4论文详解_第12张图片

  • ASFF:使用softmax对多尺度拼接特征图在点维度进行加权
    YOLOV4论文详解_第13张图片

  • BiFPN
    YOLOV4论文详解_第14张图片

2.3.4 激活函数

  • ReLU
    R e L U = m a x { 0 , x } ReLU=max\{0, x\} ReLU=max{0,x}
  • Leaky-ReLU
    L R e L U = m a x ( α x , x ) LReLU=max(\alpha x, x) LReLU=max(αx,x)
  • Parametric-ReLU
    P R e L U ( x ) = { α x x ≤ 0 x x > 0 PReLU(x) = \begin{cases} \alpha x & x \leq 0 \\ x & x > 0 \end{cases} PReLU(x)={αxxx0x>0
  • ReLU6
    R e L U 6 ( x ) = m a x { R e L U ( x ) , 6 } ReLU6(x) = max\{ReLU(x), 6\} ReLU6(x)=max{ReLU(x),6}
  • SELU
    S E L U ( x ) = λ { α ( e x − 1 ) x ≤ 0 x x > 0 SELU(x)=\lambda \begin{cases} \alpha (e^x-1) & x \leq 0\\ x & x > 0 \end{cases} SELU(x)=λ{α(ex1)xx0x>0
  • Swish
    S w i s h ( x ) = x ⋅ s i g m o i d ( x ) Swish(x) = x \cdot sigmoid(x) Swish(x)=xsigmoid(x)
  • hard-Swish
    h − S w i s h ( x ) = x R e L U ( x + 3 ) 6 h-Swish(x)=x \frac {ReLU(x+3)} {6} hSwish(x)=x6ReLU(x+3)
  • Mish
    M i s h ( x ) = x ⋅ t a n h ( l n ( 1 + e x ) ) Mish(x) = x \cdot tanh(ln(1+e^x)) Mish(x)=xtanh(ln(1+ex))

2.3.5 后处理

YOLOV4论文详解_第15张图片

  • NMS将IoU超过阈值进行删除
    s i = { s i , I o U ( M , b i ) < N t 0 , I o U ( M , b i ) ≥ N t s_i= \begin{cases} s_i, & IoU(M,b_i) < N_t \\ 0, & IoU(M, b_i) \geq N_t \end{cases} si={si,0,IoU(M,bi)<NtIoU(M,bi)Nt
  • soft NMS将置信度得分小于阈值的进行删除,由于这个阈值需要人工设置,因此存在很大的局限性
    s i = { s i , I o U ( M , b i ) < N t s i ( 1 − I o U ( M , b i ) ) , I o U ( M , b i ) ≥ N t s_i= \begin{cases} s_i, & IoU(M,b_i) < N_t \\ s_i(1-IoU(M, b_i)), & IoU(M, b_i) \geq N_t \end{cases} si={si,si(1IoU(M,bi)),IoU(M,bi)<NtIoU(M,bi)Nt
    由于上式不连续,改进后如下:
    s i = { s i , I o U ( M , b i ) < N t s i e − I o U ( M , b i ) 2 σ , I o U ( M , b i ) ≥ N t s_i= \begin{cases} s_i, & IoU(M,b_i) < N_t \\ s_ie^{-\frac {IoU(M, b_i)^2} {\sigma}}, & IoU(M, b_i) \geq N_t \end{cases} si={si,sieσIoU(M,bi)2,IoU(M,bi)<NtIoU(M,bi)Nt
  • DIoU NMS: 将DIoU超过阈值进行删除
    s i = { s i , D I o U ( M , b i ) < N t 0 , D I o U ( M , b i ) ≥ N t s_i= \begin{cases} s_i, & DIoU(M,b_i) < N_t \\ 0, & DIoU(M, b_i) \geq N_t \end{cases} si={si,0,DIoU(M,bi)<NtDIoU(M,bi)Nt

3. Methodology

3.1 Selection of architecture

一个模型分类效果好不一定检测效果就好,好的检测器需要满足如下几点:

  • 更高的输入图像分辨率:有助于检测小物体。
  • 更深的网络层:能够覆盖更大面积的感受野
  • 更多的参数:更好的检测不同的物体

我们比较了3个backbone模型,最终选择了CSPDarkNet53
YOLOV4论文详解_第16张图片

3.2 Selection of BoF and BoS

  1. 对于激活函数,由于PReLUSELU更难训练,我们选择专门为量化网络设计的ReLU6
  2. 对于正则化,我们选择DropBlock
  3. 在归一化上,由于是单GPU,所以没有考虑syncBN

3.3 Additional improvements

为了使设计的探测器更适合单 gpu 的训练,我们进行了如下额外的设计和改进:

  • 新的数据增强方法:MosaicSelf-Adversarial Training
  • 应用遗传算法选择最优参数
  • 改进SAM改进PAN交叉小批量标准化(CmBN)

3.3.1 Mosaic

如下图所示,Mosaic方法是将4张训练图像混合成一张新图像,这样可以丰富图像的上下文信息。这种做法的好处是允许检测上下文之外的目标,增强模型的鲁棒性。此外,在每一层从4个不同的图像批处理标准化计算激活统计,这大大减少了对大mini-batch处理size的需求。
YOLOV4论文详解_第17张图片

3.3.2 Self-Adversarial Training

这是一种新的数据扩充技术,该技术分前后两个阶段进行。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自身执行一种对抗性训练,改变原始图像,从而造成图像上没有目标的假象。在第二阶段,训练神经网络对修改后的图像进行正常的目标检测。

3.3.3 CmBN

CmBN仅收集mini-batches单个batch的统计信息。
YOLOV4论文详解_第18张图片

3.3.4 SAM的改进

将SAM从空间上的注意力修改为点上的注意力
YOLOV4论文详解_第19张图片

3.3.5 PAN的改进

将PAN的short-connect从相加修改为拼接
YOLOV4论文详解_第20张图片

3.4 YOLOv4

YOLOV4由以下几部分组成:

  • BackBone:CSPDarkNet53
  • Neck:SPP、PAN
  • Head:YOLOV3

YOLOV3使用到了:

BOF:

  • BackBone:
    1. CutMix
    2. Mosaic数据增强
    3. DropBlock正则化
    4. 类标签平滑(Class Label Smoothing)
  • Detector:
    1. CIoU loss
    2. CmBN
    3. DropBlock正则化
    4. Mosaic数据增强
    5. 自对抗训练
    6. 消除网格敏感性
    7. 为单个GT box使用多个anchor
    8. 余弦退火调度器
    9. 最优超参数
    10. 随机训练形状

BOS:

  • BackBone:
    1. Mish激活函数
    2. CSP:Cross-stage partial connections
    3. MiWRC:Multi-input weighted residual connections
  • Detector:
    1. Mish激活函数
    2. SPP
    3. SAM
    4. PAN
    5. DIoU NMS

4. YOLOV4网络结构图

YOLOV4论文详解_第21张图片

你可能感兴趣的:(目标检测,目标检测,深度学习,yolo)