【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection

简介:

笔者原本计划接着解读一篇有关NAS的文章的,奈何今天YOLOv4突然闪亮登场,经不住诱惑,那篇有关NAS的文章就只能后面再写了。好了,废话不多说,进入正题。

论文链接
代码链接
本文链接

前言:

YOLO系列的网络都有一个共同的特点,即追求网络精度也追求网络速度,YOLOv4在此基础上又多了一个追求,那就是降低硬件要求。换句话说,作者希望只有一个GPU的“穷人”也能玩转YOLO,而不是像Google那样的“土豪”才能玩。那作者是如何做到的呢?简单来说就是通过大量实验对大量tricks带来的效果进行逐层分析、比对,最终得到一组最佳的trick组合。

文章概括:

现在很多网络要么是精度高、实时性差,要么是精度低、实时性高。而YOLOv4设计的理念是:鱼和熊掌我都要。
主要贡献:
1、 设计了一个高精度、高实时性的网络,并且该网络只需要一个GPU就可以快速训练;
2、 验证了Bag-of-Freebies和Bag-of-Specials对目标检测的影响很大(现在不知道Bag-of-Freebies和Bag-of-Specials是什么意思也没关系,后面会做解释);
3、 优化了一些tricks,使其可以在单GPU上进行训练。

YOLOv4性能曲线:
从下图可以看到,YOLOv4将网络精度和网络实时性之间的balance做的非常好。
【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第1张图片

上文说的都是YOLOv4的优点,但是个人觉得YOLOv4也不是完美的,因为它并不care网络的算力,所以YOLOv4对于要求低算力移动端来说可能并不友好(论文刚出,暂未看代码,也未实测算力,纯属个人感觉)。

Tricks介绍:

所谓tricks,就是我们平时设计、训练、测试网络的技巧。本文引用的trick非常非常多,我在这里做个简单的总结,相信大家一定用得到。
文章将tricks分为两大类:
一、 Bag-of-Freebies:这类tricks是指在网络训练时使用到的trick,只增加训练的时长,但是不影响推理的时长。
Bag-of-Freebies又细分为几类

  1. 数据增强
    Random erase
    CutOut
    Hide-and-seek
    Grid mask
    DropOut
    DropConnect
    DropBlock
    MixUp
    CutMix
    GAN
  2. 样本均衡
    Hard negative example mining
    Online hard example mining
    Focal loss
  3. 软标签
    Label smooth
    Label Refinement
  4. Bbox的回归
    IOU loss
    GIOU loss
    DIOU/CIOU loss

二、 Bag-of-Specials:这类tricks是指网络设计或者后处理时使用的tricks,它们可以在增加较少的推理时间的同时,较大的提升网络精度。
Bag-of-Freebies又细分为几类:

  1. 感受野
    SPP
    ASPP
    RFB
  2. 注意力机制
    SE block
    SAM
  3. 特征融合
    Skip connection
    Hyper-column
    SFAM
    ASFF
    BiFPN(NAS搜索出来的FPN结构)
  4. 激活函数
    ReLU
    LReLU
    PReLU
    ReLU6
    SELU
    Swish
    Hard-Swish
    Mish
  5. NMS(非极大值抑制)
    Soft-NMS
    DIoU NMS

为了方便大家查找tricks,已经将各个trick的链接都附在文章中了,不同的trick有不同的作用,作用相同的tricks之间也有着不同的区别。本文的重点是讲解YOLOv4,就不一一介绍上述众多tricks的功能和区别了,有兴趣的朋友可以点文中链接去详细了解。

YOLOv4设计:

目标检测网络,无论是one-stage还是two-stages、无论是anchor based还是anchor free、无论是在GPU上运行还是在CPU上运行,网络结构无外乎是由三个部分组成:backbone、neck、heads(做个小广告,如果大家想知道如何用NAS同时搜索这三个部分,可以看我的另一篇博客Hit-Detector,哈哈哈)。

那么YOLOv4是如何设计backbone、neck和heads的呢?
1、 backbone的选择:为了使网络速度更快、优化并行计算,作者在卷积层使用group(1-8)比较小的卷积,并将ResNeXt50、Darknet53分别与Cross-Stage-Partial-connections(CSP)结合,组成了CSPResNeXt50和CSPDarknet53。由于实验证明CSPResNeXt50更适合于分类网络,CSPDarknet53更适合于检测网络,因此YOLOv4的backbone选择CSPDarknet53。
2、 neck的选择:这部分主要是考虑如何扩大感受野以及如何更好的进行特征融合。对于检测网络来说,主要有三个要求:

  1. 提高网络输入的分辨率,可以提升检测小目标的性能;
  2. 更多的网络层,可以扩大网络的感受野,以便网络可以hold大分辨率的输入;
  3. 更多的网络参数,可以让网络更好的检测图像中不同尺寸的目标

经过一系列的实验,最终选择SPP module和PANet中的path-aggregation neck作为YOLOv4的neck。
3、head的选择:沿用YOLOv3的head。

将YOLOv4的主体网络结构设计完以后,作者就开始设计YOLOv4的tricks了,要使用哪些tricks可以使YOLOv4延续YOLO家族的辉煌呢?
作者通过一些先验知识和大量实验,最终选择了如下tricks组合:

  1. Bag of Freebies (BoF) for backbone:
    1)CutMix and Mosaic data augmentation(本文创新的数据增强)
    2)DropBlock regularization
    3)Class label smoothing
  2. Bag of Specials (BoS) for backbone:
    1)Mish activation
    2)Cross-stage partial connections (CSP)
    3)Multiinput weighted residual connections (MiWRC)
  3. Bag of Freebies (BoF) for detector:
    1)CIoU-loss
    2)CmBN
    3)DropBlock regularization
    4)Mosaic data augmentation
    5)Self-Adversarial Training(本文创新的训练方式)
    6)Eliminate grid sensitivity
    7)Using multiple anchors for a single ground truth
    8)Cosine annealing scheduler
    9)Optimal hyperparameters
    10)Random training shapes
  4. Bag of Specials (BoS) for detector:
    1)Mish activation
    2)SPP-block
    3)SAM-block(本文优化,提高训练和推理速度)
    4)PAN path-aggregation block(本文优化,提高训练和推理速度)
    5)DIoU-NMS

YOLOv4使用的如此众多tricks着实挺让人吃惊的,YOLOv4也用实力证明了“tricks大法好”。接下来简单介绍一下,本文在tricks中的创新点:
本文提出的Mosaic数据增强的方法,是将4张训练图片混合在一起然后输入网络,这样一来四张图片的信息会有融合(感觉就是CutMix的升级版)。
本文提出的SAT也是一种数据增强的方法,分成两阶段完成:
在第一阶段,神经网络会更改原始图像,而不是网络权重。以这种方式,神经网络对其自身执行对抗攻击,从而改变原始图像,以便造成一种图像上没有我们想要关注的目标的假象(说的这么绕,其实就是在增加样本的训练难度)。
在第二阶段,训练神经网络以正常方式检测此修改图像上的物体。
本文分别对SAM、PAN和BN做了优化,分别如Figure4、Figure5和Figure6所示:
【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第2张图片
【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第3张图片

通过Figure4、Figure5和Figure6很容易能get到作者是如何进行优化的,在此,我就不费口舌了。
除此之外,YOLOv4还通过遗传算法对超参进行了优化,NAS就是擅长做这种超参搜索、网络搜索的事情哦,快来关注我,一起学NAS啦,哈哈哈!

实验结果:

前面说了那么多,终于到了可以看实验结果的时候了,废话不多说,直接上图:
Table8:
【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第4张图片

Table9:
【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第5张图片

Table10:
【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第6张图片

其他:

除了上述介绍内容,本文还做了大量的实验去验证各个tricks的有效性,并且均给出了实验结果。YOLO家族从诞生那天起,就在不断地给我们带来各种惊喜,希望YOLOv4不是YOLO家族的最后一代网络,期待见到v5,v6……

若文中有不足之处,还请各位大佬们指正!
原创码字不易,若转载,请注明出处!
欢迎各位关注我的公众号,一个专注于NAS的公众号,我会持续跟进学术界NAS领域的最新进展,每周更新一篇新Paper,公众号刚刚起步,希望各位多多支持

【论文笔记】YOLOv4: Optimal Speed and Accuracy of Object Detection_第7张图片

你可能感兴趣的:(YOLOv4重磅来袭,你准备好了吗?,【论文阅读】YOLOv4:,Optimal,Speed,and,Acc)