YOLOv4论文笔记

    论文:YOLOv4: Optimal Speed and Accuracy of Object Detection.Alexey Bochkovskiy,Chien-Yao Wang,Hong-Yuan Mark Liao


摘要

    现在有非常多的tricks都说可以提高CNNs的精度,这些tricks需要在大型数据集上对这些trick的组合进行实际测试,并对结果进行理论论证。有些trick只能在某些模型或某些问题上运行的很好;而有些比如BN或残差连接则可以被广泛应用到各种任务和模型上。本文认为Weighted-Residual-Connections (WRC),Cross-Stage-Partial-connections (CSP), Cross mini-BatchNormalization (CmBN), Self-adversarial-training (SAT), Mish-activation这些都是通用的方法,而使用这些新的trick:WRC、CSP、CmBN、SAT、Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization、CIoU loss来构建一个新的目标检测模型:YOLOv4。在MS COCO数据集上达到了SOTA: 43.5% AP (65.7% AP50),同时可以在Tesla V100上以65FPS的速度运行。代码开源:https://github.com/AlexeyAB/darknet   


1.引言

    本文的目标是设计一个易于训练和使用的、快速的目标检测模型,提出的YOLOv4是一个可以使用传统GPU训练的、实时的、高质量的目标检测模型。YOLOv4与其他模型的比较如下:

图片1.jpg

    本文的贡献如下:

    1).设计了一个高效、强大的目标检测模型YOLOv4,甚至可以使用1080TI或2080TI去训练它。

    2).验证了SOTA的Bag-of-Freebies和Bag-of-Specials方法对目标检测模型的影响。

    3).修改了CBA、PAN、SAM等方法使得它们在单GPU上更高效的训练。


2.相关工作

2.1目标检测模型

    当前的目标检测模型通常由两部分组成:BackboneHead,前者通常在ImageNet上进行预训练。体量比较大的Backbone包括:VGG、ResNet、ResNeXt、DenseNet等,体量较小的模型包括:SqeezeNet、MobileNet、ShuffleNet等。目标检测头分为两种类型的方法:单阶段或两阶段。两阶段目标检测模型包括R-CNN、Fast R-CNN、Faster R-CNN、R-FCN、Libra R-CNN等,以及两阶段Anchor-free的目标检测模型:RepPoints。单阶段目标检测模型包括:YOLO1-3、SSD、RetinaNet等,以及单阶段Anchor-free的目标检测模型:CenterNet、CornerNet、FCOS等。目标检测模型通常在Backbone和Head之间加入一些聚合不同层次特征的层,这里称为目标检测模型的Neck。neck包括bottom-up和top-down两类。Neck包括:FPN、PAN、BiFPN、NAS-FPN等。此外,还有一些工作直接构建用于目标检测的新的backbone(DetNet、DetNAS)和整个新模型(SpineNet、HitDetector)。总结如下:

图片2.jpg

2.2 Bag of freebies

    将那些只改变训练策略,或只增加训练代价而不增加推断代价的方法统称为“bag of freebies”。

    目标检测中最常见的bag of freebies方法是数据增强,其目标是增加输入图像的多样性以提高模型的鲁棒性。最常见的数据增强方法是光学畸变和几何畸变,以及对象遮挡。模拟目标被遮挡的相关方法有随机擦除和CutOut等,可以在图像中随机选择矩形区域然后填充为随机数或0。对于hide-and-seek和grid mask方法,它们会随机或均匀在图像中选择多个矩形区域然后置零。类似的,DropOut、DropConnect、DropBlock等方法对特征图也随机矩形置零。有些方法使用多个图像进行数据增强。比如MixUp将两个图像以不同的系数比进行相乘或叠加,同时调整标签。CutMix将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。此外,风格迁移GAN也被用于数据增强,这可以CNN学习的纹理偏差。

    有的bag of freebies方法解决数据集中语义分布存在偏差的问题,这其中一个很重要的问题是不同类别之间存在的数据不平衡。两阶段目标检测模型可以通过难负例挖掘或在线难例挖掘解决,但是单阶段模型无法使用,由此有人提出了focal loss解决类别不平衡的问题。语义分割偏差中另一个很重要的问题是one-hot难以表示不同类别之间的关联程度,因此有人提出了标签平滑方法来讲硬标签转换为软标签,使模型更加鲁棒。以及通过知识蒸馏,可以获得更软的标签。

    还有一个bag of freebies是包围框(BBox)回归的目标函数。典型的函数是MSE,用来对BBox的中心坐标和宽高进行回归。对于Anchor-based方法来说,目标函数回归的是坐标或宽高的偏置。然而,直接估计BBox的每个点的坐标值是将这些点视为自变量,但实际上并不考虑对象本身的完整性。为了更好的处理这个问题,有人提出了IoU损失,即将predicted BBox的面积和ground-truth BBox的面积考虑到损失函数中。因为IoU是一种尺度不变的表示,因此可以解决当计算l1或l2损失时随尺度增加而增加的问题。GIoU除了考虑覆盖面价外,还包括目标的形状和方向;DIoU还考虑目标中心的距离;而CIoU还额外考虑纵横比。CIoU可以实现更好的收敛速度和精度。

2.3 Bag of specials

    对于那些仅增加少量的推断计算代价但是可以大幅提高精度的插件模块或后处理方法称为“bag of specials”。通常插件模块可以提高模型的某种属性,比如增大感受野、引入注意力机制、增强特征集成能力等。后处理模块用于筛选模型预测的结果。

    常用的用于增大感受野的模块有:SPP、ASPP、RFB等。SPP的思想来自于SPM,被何凯明集成到CNNs中。在YOLOv3中使用改进版的SPP,拼接最大池化size={1,5,9,13}、stride=1的特征输出,大的池化可以增加感受野。这个设计的加入使得YOLOv3-608提高了2.7%的AP50。ASPP与这类似。RFB模块使用k×k大小的几个扩张卷积,扩张比等于k,步长等于1,以获得比ASPP更全面的空间覆盖。RFB花费7%的额外推断时间,增加了SSD在COCO数据集上5.7%的AP50。

    在目标检测中常用的注意力机制模块主要分为通道注意力和空间注意力实现,SENet和SAM分别是两种实现的代表方法。

    在特征集成方面,早期使用skip connection或hyper-column将低层次特征与高层次特征连接起来。由于FPN等多尺度预测方法的流行,提出了许多集成不同特征金字塔的轻量级模块,包括:SFAM、ASFF、BiFPN等。SFAM的主要思想是利用SE模块对多尺度拼接的特征图进行通道级加权。对于ASFF,它使用Softmax作逐点重新加权,然后添加不同尺度的特征图。在BiFPN中,提出了多输入加权残差连接 来执行逐尺度重新加权,然后添加不同尺度的特征图。

    在深度学习的研究中,一些人把重点放在寻找良好的激活函数上。良好的激活函数可以使梯度更有效地传播,同时也不会造成太多的额外计算成本。2010年提出的ReLU极大的解决了梯度消失问题。然后,改进版本LReLU、PReLU、ReLU6、SELU、Swish、hard-Swish、Mish等激活函数被提出。LReLU和PReLU的主要目的是解决当输出小于零时ReLU的梯度为零的问题。ReLU6和hard-Swish专门为量化网络设计的。对于神经网络的自归一化提出了SELU激活函数。而Swish和Mish都是连续可微激活函数。

    基于深度学习的对象检测中常用的后处理方法是NMS,它可以用来过滤那些对同一对象预测很差的BBox,并且只保留响应较高的候选BBox。R-CNN中使用的NMS加入分类置信度,根据置信度分数的顺序,按高分到低分的顺序进行贪婪NMS。soft NMS考虑了目标的遮挡可能导致具有IoU分数的贪婪NMS中置信度分数下降的问题。DIoU NMS在soft NMS的基础上考虑了BBox的中心点距离。

    目标检测模型的组成:

图片3.jpg


3.方法

    本文的目标不是为了追求低计算量,而是为了在实际部署中获得高速、精确的结果。因此对于不同的场景本文使用不同的backbone。

    对于GPU场景,卷积分组数量少:CSPResNeXt50、CSPDarknet53。

    对于VPU场景,使用SE+分组卷积:EfficientNet-lite、MixNet、GhostNet、MobileNetV3。

3.1架构选择

     首先选择一个backbone网络,需要在输入网络分辨率、卷积层数、参数数量( size^2 * filters * channel / group )和层输出数(filters)之间找到最佳平衡。在ImageNet上CSPResNeXt50要优于CSPDarknet53,而在MS COCO目标检测数据集上则相反。

    接着选择一个neck用于增大感受野和聚合不同层次的特征例如FPN、PAN、ASFF、BiFPN。

    一个最适合分类的模型并不最适合目标检测。目标检测器需要如下特点:

1)高分辨率的输入图像,这样有利于检测多个小目标。

2)更多的网络层,随着层数增加感受野会增大有利于检测大目标。

3)更多的参数,模型容量更大可以同时检测多个不同大小的目标。

    经验性的假设一个感受野更大、参数更多的Backbone感受野越好,下表是几个备选模型的对比:

图片4.png

    根据这个理论,加上大量实验表明,CSPDarknet53是最适合作为目标检测Backbone的模型。感受野的大小具有如下影响:

1)大到目标的大小,使得模型可以看到整个目标。

2)大到特征图的大小,使得模型可以看到目标周围的背景信息。

3)超过网络大小-增加图像点与最终激活之间的连接数量。

    因此,YOLOv4使用CSPDarknet53作为Backbone ,并在其上增加SPP模块,这可以显著增加了感受野,分离出最重要的背景特征,并且几乎不降低推断速度。使用PANet作为neck,而不像YOLOv3那样使用FPN。最后Head使用YOLOv3(anchor based) head。这就是YOLOv3的网络架构。

3.2BoF和BoS的选择

    目标检测常用的BoF和BoS如下:

激活函数: ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, Mish

包围框回归损失: MSE, IoU, GIoU,CIoU, DIoU

数据增强:CutOut, MixUp, CutMix

正则化方法: DropOut, DropPath,Spatial DropOut,DropBlock

网络归一化方法: Batch Normalization (BN) ,Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN),Cross-Iteration Batch Normalization (CBN)

跳跃连接: Residual connections, Weighted residual connections, Multi-input weighted residual connections, Cross stage partial connections (CSP)

    对于激活函数来说,PReLU和SELU训练更困难,而ReLU6是专为量化网络设计的,因此都不考虑。DropBlocks听说效果很好,因此这里采用它作为正则化方法。对于归一化方法来说,因为YOLOv4不在多GPU上训练,故也不予考虑。

3.3 其他改进

1)本文提出了新的数据增强方法Mosaic和Self-Adversarial Training

2)应用遗传算法搜索最优的超参数

3)加入修改的现存方法使得YOLOv4更加高效:修改版SAM、修改版PAN、修改版CmBN。

    Mosaic是一种新的数据增强方法,可以对四张图像进行混合,使得模型可以检测正常背景之外的目标。此外,BN从四个不同的图像中计算,可以大大减少mini-batch的大小。

图片5.jpg

    SAT也是一种新的数据增强方法,他在两个forward backward阶段运行。 在第一阶段,神经网络改变原始图像而不是网络权重。 通过这种方式,神经网络对自己执行对抗性攻击,改变原始图像以创建图像上没有所需对象的欺骗。 在第二阶段,神经网络被训练以正常的方式检测这个修改后的图像上的物体。

    CmBN是CBN的修改版,仅在单个mini-batch内计算统计特征,如下图所示:

图片6.jpg

    对SAM修改,从空间注意力修改为逐点注意力,如下图所示:

图片7.jpg

    同对PAN也进行了修改:

图片8.jpg

3.4YOLOv4细节

    YOLOv4由如下3部分组成:Backbone:CSPDarknet53,Neck:SPP、PAN,Head:YOLOv3

    下面是YOLOv4使用的BoF和BoS:

    Backbone的BoF:CuMix和Mosaic作为数据增强方法、DropBlock作为正则化方法、标签平滑

    Backbone的BoS:Mish激活函数、跨阶段部分连接CSP、多输入权重残差连接MiWRC

    目标检测模型的BoF:CIoU损失函数、CmBN、DropBlock正则化方法、Mosaic数据增强方法、SAT、消除网络敏感性、单个ground-truth对应多个Anchor、余弦退火调度程序(Cosine annealing scheduler)、最优超参数、随机训练形状

    目标检测模型的BoS:Mish激活函数、SPP模块、SAM模块、PAN模块、DIoU-NMS。


4.实验

    本文在ImageNet分类数据集和MS COCO目标检测数据集上进行实验。

4.1实验设置

    在ImageNet分类实验中,超参数如下:训练步数8000000、Batch size是128、mini-batch size是32;采用多项式衰减学习速率策略,初始学习率为0.1;warm-up步数是1000;动量和权重衰减系数是0.005。我们所有的BoS实验都使用与默认设置相同的超参数,在BoF实验中,我们增加了50%的额外训练步骤。 所有实验都用1080Ti或2080Ti GPU训练。

    在MS COCO目标检测实验中,超参数如下:训练步数500500;采用步长衰减策略,初始学习率为0.1,在400000和450000步时学习率乘以0.1;动量系数和权重系数为0.0005。在单GPU上训练,batch size是64,mini-batch size是8或4。除了使用遗传算法进行超参数搜索实验外,所有其他实验都使用默认设置。遗传算法使用YOLOv3-SPP训练GIOU损失,并搜索300个epoch的min-val 5k数据集。我们采用搜索学习率0.00261,动量0.949,分配ground truth的IoU阈值为0.213,损失法器0.07用于遗传算法实验。


4.2不同trick对Backbone分类效果的影响

    下面是不同数据增强方法:

图片9.jpg

    下表展示了不同trick在CSPResNeXt-50上的消融实验:

图片10.jpg

    下表展示了不同trick在CSPDarknet-53上的消融实验:

图片11.jpg

4.3不同trick对目标检测模型的影响

    这里首先对比了不同BoF对目标检测器的影响,包括:

S:消除网格的敏感性。等式bx=σ(tx)+cx,by=σ(ty)+cy,其中cx和cy是整数,在YOLOv3中用于评估目标坐标。因此对于接近cx或cx+1的bx值,需要很大的tx值。这里通过乘以系数为0.1sigmoid来解决这个问题,笑出了目标无法检测到网格的问题。

M:Mosaic数据增强方法。

IT:IoU阈值,多个anchor对单个ground truth。

GA:遗传算法。

LS:类别标签平滑。

CBN:CmBN。

CA:Cosine annealing scheduler,在正弦波的方法改变学习率。

DM:Dynamic mini-batch size, 在小分辨率训练中,使用随机训练形状自动增加mini-batch size。

OA:最优Anchor,使用统计出来的最佳的Anchor来训练。

GIoU,CIoU,DIoU,MSE:包围框回归使用的损失函数。

    消融实验如下:

图片12.jpg

    接着对比了不同BoS对目标检测器的影响,包括:PAN、RFB、SAM、Gaussian YOLO(G)、ASFF,结果如下:

图片13.jpg

4.4不同backbone和预训练权重的影响

    不同预训练权重对目标检测精度的影响:

图片14.jpg

    可以发现具有最佳分类精度的模型在检测器精度方面并不总是最好的,比如使用BoF和Mish对CSPResNeXt50训练时,可以提高分类精度,但是用于目标检测时精度反而下降了。因此CSPDarknet-53更适合用于目标检测。

4.5 不同mini-batch size的影响

    如下表所示:

图片15.jpg

    可以发现在加入BoF和BoS后,mini-batch size对探测器的性能几乎没有影响。因此可以使用单GPU进行训练。


5.结论

    下表是不同目标检测模型之间的对比:

图片16.jpg

图片17.jpg

    结果YOLOv4在速度和精度上是综合性能最强的模型。由于不同的方法使用不同架构的GPU进行推理时间验证,我们在Maxwell、Pascal和Volta架构的常用GPU上运行YOLOv4,并与SOTA方法进行比较。

    表8列出了使用Maxwell GPU(GTX Titan X或Tesla M40)的比较结果:

图片18.jpg

图片19.jpg

    表9列出了使用Pascal GPU(GTX Titan X、Titan Xp、GTX 1080TI、Tesla P100)的比较结果:

图片20.jpg

    表10列出了使用Volta GPU(Titan Volta或Tesla V100)的比较结果:

图片22.jpg

图片23.jpg




上一篇:
下一篇: 没有了

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于