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

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

论文连接:https://arxiv.org/abs/2004.10934
论文代码:https://github.com/AlexeyAB/darknet

本以为YOLO系列因为作者的原因不会再更新了,没想到前些日子居然在GitHub上更新了yolov4的论文和代码。虽然作者不一样了,但是论文的目的是一样的,都是在研究高fps下准确率更高的检测网络。下图是coco数据集上yolov4与其他检测网络的FPS与AP比较。
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
可以看到YOLO v4相比YOLO v3的提升还是蛮大的,相同FPS下提升了大约10%的AP,我觉得基本上可以说是做到了精度高的模型(AP>40)里速度最快的,速度快的模型(FPS>30)里精度最高的。那接下来让我们看看相比yolo v3论文里又做了哪些提升吧。

Introduction

作者在第一章里先是介绍了他们的研究是用来解决CNN检测网络在单GPU上的训练以及实时推断的问题,也就是说YOLO v4是可以在单卡上进行训练以及实时检测的。然后作者在文章中阐明了他们的研究目的设计一个可以在工业系统上快速计算并且实现最优的平行计算能力的目标检测器,而不是低计算量(BFLOP)的检测器(这句话在文章进行了多次强调)。并提出了他们的主要贡献有以下三点:

  1. 提出了一个更高效的检测模型,并且可以在单独的一块1080ti或者2080ti上训练。
  2. 通过实验证实了一些SOTA的Bag-of-Freebies 和 Bag-of-Specials方法对检测网络的影响。这Bag-of-Freebies 和 Bag-of-Specials主要是指能够提升网络性能的训练方法、网络模块和计算函数等,论文后面会说。(不过我这种菜????之前一般把这些方法统称为tricks????)。
  3. 对一些SOTA的方法做了进一步的提升,例如CBN、PAN、SAM等

Related work

Object detection models

作者在这一节主要是对当今的检测模型做了一个大致的归纳,具体可以看下图:
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
现在的CNN检测模型一般可以分为图上的几个部分,分别是Input、Backbone、Neck、Dense Prediction 和Sparse Prediction。其中Input就是只网络的输入,一般是图像或者图像金字塔这些;Backbone是指骨干网络用来提取输入图片的特征,一般是VGG、ResNet这些比较成熟的图像分类网络去掉的最后的全连接层;Neck是指对图像不同特征进行融合的部分,像FPN、PANet、Bi-FPN这种;Dense Prediction是指一般单阶段检测网络的heads部分,主要用来对每个特征进行分类和位置回归;Sparse Prediction则是指一般双阶段检测网络的提取proposals(例如RPN层)以及分类回归的heads部分。

Bag of freebies

        Bag of freebies主要是指只更改训练阶段或者只增加训练阶段计算量的一些提升网络性能的方法。最常见的应该就是数据增强的方法。简单地,像对图像进行切割、放缩、旋转或者改变亮度、饱和度等等方法。这些方法只是对像素进行更改,并不会抹去像素的信息。但除此以外还有一些方法是通过模拟物体间的遮挡问题来进行数据增强,例如random erase 和CutOut,类比到特征层上就是dropout、dropblock这些方法。还有通过融合多个图像来进行训练的数据增强方法,例如MixUp和CutMix。
        除了数据增强的方法,还有一些方法是解决样本中数据不平衡的问题的。这些方法主要是有online hard example mining(OHEM,训练时只学习难学习的样本)和RetinaNet中提出的focal loss(加强难学习样本的损失)。还有像labal smoothing是通过把one-hot label向量转化成soft label向量(比如[1,0,0,0]变为[0.7,0.1,0.1,0.1])来解决不同类别存在相关性的问题。
        最后一种Bag of freebies方法是加强位置回归函数。传统的位置回归方法都是使用均方误差(MSE),但是使用均方误差是对物体的几个角点进行单独的回归,并没有考虑整个bounding box和ground truth之间的联系。所以有学者提出了IoU loss来替代MSE,之后也有更多的研究者对IoU loss进行进一步改进,例如GIoU、DIoU、CIoU等。

Bag of Specials

        Bag of Specials主要是指那些增加了较少推断阶段的计算量但是对网络性能有较大提升的方法。这些方法主要包括提升网络的感受野、加入感知结构、增强特征间的融合、改变**函数和优化后处理函数(NMS)等等
        其中提升网络感受野的方法主要是有SPP、ASPP和RBF、TridentNet这些方法。SPP和ASPP是通过pooling层来实现提取不同大小的感受野并对其进行融合。而RBF和TridentNet模型是使用dilated convolutions来提取不同感受野的特征再进行融合。
        感知模块主要是分为特征维度上(channel-wise)的感知和特征层(point-wise)上的感知。特征维度上的感知代表是SE模块,特征层上的感知代表是SAM模块。值得一提的是,SE模块虽然也能提升网络的性能,但是在GPU上会大幅增加推断阶段的时间消耗,所以作者并没有在之后的实验部分加入SE模块。
        特征融合主要是跟FPN相关的一系列方法,例如 SFAM , ASFF , 和 BiFPN。(这我就不细说了)
        **函数主要是ReLU的一系列变种,像 leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish和 Mish。YOLO v3用的好像是leaky-ReLU。
        最后也就是后处理部分,检测网络需要对重叠的Bounding box进行筛选,一般使用的是NMS算法。不过NMS只是根据得分依次筛选,所以在物体有重叠的场景下的效果并不好。所以之后又有了 soft NMS以及DIoU NMS。

Methodology

这节主要是探讨网络结构、BoFs、BoSs的选取,额外的创新点,以及最终形态的YOLOv4的结构。(不过感觉从这章开始有些问题说的就不是很详细了,可能是因为论文还没有定稿?)

Selection of architecture

对于backbone的选择主要是对比了CSPResNext50和CSPDarknet53。经实验发现CSPResNext50在分类任务上的效果更好,而CSPDarknet53在检测任务上的效果更好。因此说明分类效果好的网络不一定适合做检测网络的backbone。
作者认为相比于分类网络,检测网络有以下不同的需求:

  1. 更大输入尺寸:用于检测小物体
  2. 更多的网络层:增大感受野来覆盖所有尺寸的物体
  3. 更多的参数:检测任务相比分类任务更加复杂

所以作者认为拥有更大感受野(不过我有点好奇会不会影响小物体的检测性能)和更多参数的网络应该被选做为检测网络的backbone。下图是CSPResNext50、CSPDarknet53和EfficientNet B3网络的参数量、感受野等参数的比较:
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
可以看到相比CSPResNext50,CSPDarknet53的确拥有更大的感受野和更多的参数数量。所以作者选择CSPDarknet53作为YOLOv4的backbone。
然后作者又提到了多种感受野特征对网络性能的影响主要有以下三个方面:

  1. 可以包含所有的物体尺寸
  2. 可以包含物体的环境信息
  3. 增加网络之间的连接

因为都是正面影响,所以直接使用了SPP结构,并且把YOLOv3中的FPN改为了PANet。所以最终的YOLOv4网络结构=CSPDarknet53+SPP+PANet+YOLOv3 heads。

Selection of BoF and BoS

论文主要是对以下的这些BoF和BoS进行了对比试验:
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
图中画红线的方法并没有进行实验,这是因为pReLU和SELU比较难训,ReLU6是用于量化网络的,DropBlock那篇论文中比较了所有的regularization 方法所以不再进行试验,syncBN不适用于单卡训练。

Additional improvements

  1. 新的数据增强方式——Mosaic,可以混合四张图片进行训练(具体怎么混并没有说????)
    YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
  2. 自对抗训练(SAT),分为两个阶段,第一阶段让网络改变输入图像使网络检测不到物体,第二阶段训练网络在改变后的图像上检测物体。(文章又只说了这么多????)
  3. 通过遗传算法选择最优超参数
  4. CmBN,在CBN上进行改进,如下图:
    YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
  5. 改进的SAM以及改进的PANet,如下图:
    YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记

完整体YOLO v4

Backbone: CSPDarknet53
Neck:SPP、PAN
Heads:YOLOv3
BoF for backbone:CutMix、Mosaic、DropBlock、label smoothing
BoF for detector:CutMix、Mosaic、DropBlock、CIoU loss、SAT、Eliminate grid
sensitivity(居然写在了下一章。。。)、使用多个anchor预测一个ground truth、Cosine annealing scheduler 、最优超参数、随机训练图像的尺寸
BoS for backbone:Mish**函数、CSP、Multi-input weighted residual connections (MiWRC)
BoS for detector:Mish、SPP、PAN、DIoU-NMS

Experiments

具体的参数设置就不细说了,直接看对比实验的结果吧????

Influence of different features on Classifier training

话不多说,直接上图
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
可以很明显的看到加入CutMix、Mosaic、label smoothing和Mish对网络性能有比较大的提升。(不过我不太清楚CutMix和Mosaic具体使咋一块用的,是两个Mosaic后的图片进行CutMix还是先CutMix再Mosaic?得去看具体代码了????)。

Influence of different features on Detector training

还是先上图吧
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
缩写的意思如下:
S:Eliminate grid sensitivity,在YOLO v3中位置回归时,使用了sigmoid函数限制了中心点的回归范围,即bx = σ(tx)+cx; by = σ(ty)+ cy。作者在sigmoid前乘上了一个大于1的参数来扩大这个回归范围。(从实验结果上看应该是不利于网络性能的,不懂为啥要加上去)
M:Mosaic
IT:给了个IoU阈值,当anchor与gt的IoU大于阈值时既可以预测物体,不再限制anchor数量
GA:使用遗传算法选择最优超参数
LS:label smoothing
CBN: CmBN
CA: Cosine annealing scheduler,在训练时使用Cosine函数改变学习率
DM: Dynamic mini-batch size对于不同的图像尺寸自动改变batch-size
OA: Optimized Anchors - using the optimized anchors for training with the 512x512 network resolution(不太清楚怎么优化的,也要看代码????)
GIoU, CIoU, DIoU, MSE:不同的回归loss

从表中可以看到,在不同的loss函数中,CIoU的效果最好。单独加入M、GA、CBN、CA时对网络性能有正面效果。同时加入S、IT、M、GA时也对网络性能有正面效果。
各种BoS对网络的影响如下图:
YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
可以看到PAN+SPP+SAM的效果最好。

Influence of different backbones and pretrained weightings on Detector training

YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
可以看到CSPDarknet53加入BoF和Mish后做backbone的效果时更好的,不过为啥没给不加BoF和Mish的实验结果呢。。。

Influence of different mini-batch size on Detector training

YOLOv4: Optimal Speed and Accuracy of Object Detection 论文笔记
可以看到在引入各种BoF和BoS后,batch-size对结果的影响已经很小了,所以YOLOv4可以更好的在单卡上进行训练。

Results

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

最后再来张和其他模型的对比,因为一般视频都是每秒30帧,所以速度大于30FPS就可以认为是实时的检测器。那么从图中可以看到YOLOv4的确是实时的检测其中效果最好的那一个。

个人看法

总的来说,YOLOv4这篇论文的创新点相对较少,更多的是把SOTA的Bof和BoS方法加到YOLOv3上去达到一个更好的检测效果,给我的感觉就像一个YOLOv3叠满了各种buff,所以跟别的模型比就显得很强,但是不确定别的模型叠了buff后会不会变得更强。不过这篇文章做的大量实验还是明确了一个叠buff的方向,毕竟YOLO系列向来是面向工业界的,检测效果提升上去了还是很有帮助的。