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

论文地址:https://arxiv.org/pdf/2004.10934v1.pdf

code:https://github.com/AlexeyAB/darknet.

摘要

有大量的技巧可以提高CNN的精度。某些技巧仅在某些模型上使用或针对某些问题或小规模的数据集使用;有一些技巧例如BN,残差连接等,适用于大多数的模型,任务和数据集。我们假设这种普遍的技巧包括:Weighted-Residual-Connections (WRC),Cross-Stage-Partial-connections (CSP),Cross mini-Batch Normalization (CmBN),Self-adversarial-training (SAT)和Mish-activation.我们用了这些新的技巧:WRC, CSP, CmBN, SAT, Mish activation, Mosaic data augmentation, CmBN, DropBlock 正则项, 和 CIoU loss,以及组合的技巧以达到最好的效果。在COCO数据集上43.5%AP(65.7%AP50),TeslaV100上可以实时,速度65fps.

引言

 作者主要目标是设计一个应用生产环境快速运行的目标检测器,易于训练和使用。

贡献总结:

1,我们设计了一种有效的,强有力的目标检测模型。可以让每个人能够用一个1080Ti或2080Ti就可以训练一个超快超精准的目标检测器。

2,我们证明了在检测器训练阶段sota的Bag-of-Freebies 和 Bag-of-Specials方法的影响。

3,我们修改了sota的方法,使得更有效和适用于单GPU的训练,包括:CBN,PAN,SAM等。

相关工作

1 目标检测模型结构

当前的目标检测器一般有两部分,分别是ImageNet上预训练的backbone,和用来预测class和bbox的head。

(1)backbone,run在GPU上的backbone可以是VGG,ResNet,ResNeXt或DenseNet。Run在CPU上的backbone可以是SqueezeNet,MobileNet或ShuffleNet。

(2)Head的部分一般分成两类:One-Stage和Two-stage。最具代表性的Two-stage的检测器是R-cnn系列,包括:fast rcnn,faster rcnn,R-FCN 和Libra rcnn。Two-stage的目标检测器也可以anchor-free就像RepPoints。对于One-stage最具代表性的模型是YOLO,SSD,和RetinaNet。近几年Anchor-free的one-stage的目标检测器有所发展,CenterNet,CornerNet,FCOS等。

(3)Neck :目标检测器在发展过程中加入了一些layers在backbone和head中间,这些层的作用通常是用来从不同的stage上选择feature map。我们可以把这些层叫做neck通常,neck由几个bottom-up和to-down的paths构成。具有Neck这种机制的网络结构有:Feature Pyramid Network (FPN),Path Aggregation Network(PAN),BiFPN,和NAS-FPN。

除了上述这些模型外,一些研究者把重点放在了直接building一种新的backbon(DeNet,DetNAS)或者一整个新的模型(SpineNet,HitDetector)for 目标检测。

综上,一般一个目标检测器包含以下几个部分:

• Input: Image, Patches, Image Pyramid
• Backbones: VGG16 [68], ResNet-50 [26], SpineNet[12], EfficientNet-B0/B7 [75], CSPResNeXt50 [81],CSPDarknet53 [81]
• Neck:
        • Additional blocks: SPP [25], ASPP [5], RFB[47], SAM [85]
        • Path-aggregation blocks: FPN [44], PAN [49],NAS-FPN [17], Fully-connected FPN, BiFPN[77], ASFF [48], SFAM [98]
• Heads:
        • Dense Prediction (one-stage):RPN [64], SSD [50], YOLO [61], RetinaNet[45] (anchor based) CornerNet [37], CenterNet [13], MatrixNet[60], FCOS [78] (anchor free)
        • Sparse Prediction (two-stage):Faster R-CNN [64], R-FCN [9], Mask R-CNN [23] (anchor based) RepPoints [87] (anchor free

 2 Bag of freebies

训练一般是离线进行的,所以研究者们喜欢研究更好的训练方法,在不增加inference 损耗的前提下达到更好的精度。我们将这些仅改变训练策略,只增加训练成本的方法叫“Bag of freebies”。

(1)数据增强

目标检测里经常采用的就是数据增强,数据增强的目的是增加输入数据的可变性,从而提高模型的鲁棒性。photometric distortionsgeometric distortions是两种常用的数据增强方法,它们对检测任务肯定是有益的。

  • photometric distortions:我们调整亮度,对比度。图像的色相、饱和度和噪声。
  • geometric distortions:我们添加了随机缩放、裁剪、翻转和旋转
  • 模拟object occlusion:random erase [100] and CutOut [11]可以随机的选取图像中的矩形区域,并随机填入或补充值为零。至于hide-and-seek [69]和grid mask [6],他们随机或均匀地选择多个图像中的矩形区域,并将其替换为全0。

这个概念应用到特征图中,就是DropOut[71]、DropConnect[80]和DropBlock[16]方法

  • 多张图像一起使用数据的方法扩增:MixUp[92]使用了两个图像乘以不同系数的乘法叠加,并调整标签。至于CutMix[91],它是为了覆盖裁剪后的图像到其他图像的矩形区域,并根据混合区的大小调整标签。
  • style transfer GAN

(2)语义分布偏差(数据不平衡)

除了以上这些,其他的一些Bag of freebies方法是专门解决数据集中的语义分布偏差。

在处理语义困扰的问题上,有一个很重要的问题是不同类别之间的数据不平衡,

two-stage 检测器处理这个问题:通常是通过hard negative example mining [72]或online hard example mining [67],但one-stage不适用,因为这种检测器属于密集预测架构;因此,Linet al.[45]提出了focal loss解决数据不平衡问题;

(3)bbox回归loss

检测器通常使用MSE对BBOX的中心点和宽高进行回归,至于anchor-based方法,它是为了估算出对应的偏移量;

估计BBOX的点坐标值,是要将这些点作为独立变量,但实际上未考虑对象本身的完整性。为了使这一问题得到更好的处理,一些研究人员最近提出的IoU损失[90],同时考虑预测的BBox面积和ground truth BBox面积覆盖。

IOU是一个尺度不变表示,它可以解决当传统方法计算{x,y,w,h}的l1或l2损失导致尺度增加。最近,一些研究人员不断改善IOU损失。

GIoU损失[65]除覆盖面积也考虑物体的形状和方向。他们建议找到能同时覆盖预测BBOX和ground truth BBox的最小面积BBOX,并使用这个BBox作为分母,以取代IoU损失的分母。

DIoU 损失[99],它另外还包括考虑物体中心的距离

CIoU损失[99],另一方面,同时考虑到重叠区域,中心点之间的距离,以及长宽比。CIoU可以在BBox回归问题上实现更好的收敛速度和精度。

 3 Bag of specials

那些插入模块和后期处理方法只会增加少量的推理成本,但可显著提高目标检测的准确性,我们称其为 “Bag of specials”。一般来说,这些插入模块是用来增强某些属性的,如扩大感受野,引入注意力机制或增强特征整合能力等,而后处理是一种筛选模型预测结果方法。

(1)扩大感受野

可用于扩大感受野的模块有SPP[25]、ASPP[5]和RFB[47]。

SPP模块起源于Spatial Pyramid Match(SPM)[39],而SPMs的原始方法是将特征图分割成几个d×d等量的块,其中d可以是{1,2,3,…},从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN并使用max-pooling操作而不是bag-of-word运算,由于He等人提出的SPP模块[25]将输出一维特征向量,而不可能应用于全卷积网络(FCN)中。因此,在YOLOv3的设计[63]中,Redmon和Farhadi改进了YOLOv3的设计将SPP模块改进为融合k×k核的max-pooling输出,其中k = {1,5,9,13},并且步长等于1。在这种设计下,一个相对较大的k×k有效地增加了backbone的感受野。增加了SPP模块的改进版后,YOLOv3-608在MS COCO上AP 50提升2.7%,但要付出0.5%的额外计算成本。

ASPP[5]模块和改进后的SPP模块在操作上的区别是主要由原来的步长1、k×k核的max-pooling到几个3×3核的max-pooling、空洞率为k步长1的空洞卷积。RFB模块是使用几个k×k核的空洞卷积,空洞率为k,步长为1以获得比ASPP更全面的空间覆盖率。RFB[47]只需额外增加7%推理时间却在MS COCO上提升SSD的AP50 5.7%

(2)注意力模块

在目标检测中经常使用的注意力模块,通常分为channel-wise注意力和point-wise注意力。代表模型是Squeeze-and-Excitation (SE) [29] and Spatial Attention Module (SAM) [85]。虽然SE模块可以提高ResNet50在ImageNet图像分类任务1% top-1准确率而计算量增加2%,但是在GPU上,通常情况下,它将增加推理时间的10%左右,所以更适合用于移动端设备。但对于SAM,它只需要额外0.1%计算量提高ResNet50-SE 0.5% Top-1 精度,且它完全不影响GPU上的推理速度。

(3)特征融合

在特征融合方面,早期的做法是用skip connection [51]或hyper-column [22]来融合低级和高级特征。由于FPN等多尺度预测方法已成为流行,许多轻量级模块集成了不同的特征金字塔。包括SFAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是利用SE模块在多尺度叠加特征图上来执行channel-wise级别re-weighting。至于ASFF,它用softmax惊醒点对点re-weighting,然后添加不同尺度的特征图。在BiFPN中,提出multi-input weighted residual connections执行scale-wise level re-weighting然后再添加不同尺度的特征图。

(4)好的激活函数

一个好的激活函数可以使梯度更有效地传播,也不会造成太多的额外计算成本。2010年,Nair and Hinton [56]提出了ReLU来实质性地解决梯度消失的问题,这也是tanh和sigmoid中经常遇到的问题。随后就是LReLU[54], PReLU[24], ReLU6[28], Scaled Exponential Linear Unit (SELU)[35]、Swish[59]、hard-Swish[27]、和Mish[55]等,也是用来解决梯度问题的。LReLU和PReLU其主要目的是:是为了解决梯当输出小于零时,ReLU的梯度为零。至于ReLU6和Hard-Swish,它们是专为量化网络设计。对于自归一化的神经网络,提出了SELU的激活函数满足子归一化目的。有一点需要注意的是,Swish和Mish都是连续可微激活函数。

(5)后处理

后处理方法常用的是NMS,它可以用于过滤那些预测错误的BBoxes,并只保留较高的候选BBoxes。NMS努力改进的方式与以下目标函数的优化方法一致。NMS原始方法没有考虑背景信息,所以Girshick等人[19]增加了R-CNN中的置信度评分为参考,并根据信任分数的顺序,从高分到低分的顺序执行贪婪NMS。至于soft NMS [1],它考虑的问题是:object occlusion 可能会导致导致贪婪NMS的信任分降低。DIoU NMS[99]的开发者想法是在soft NMS基础上将中心点距离信息增加到BBox筛选过程中,值得一提的是,由于上述处理方法都没有直指提取的特征图,不再需要在后续的anchor-free方法开发中进行后处理。

方法

基本目的是快速运行速度和并行计算的优化
我们提出了两种实时神经网络。

  • 对于GPU,我们在卷积层使用少量组(1-8)。CSPResNeXt50 / CSPDarknet53
  • 对于VPU----我们使用分组卷积,但不使用Squeeze-and-excitement (SE) blocks,具体来说,这包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet[21] / MobileNetV3

1 架构选择

我们的目标是在输入网络分辨率,卷积层数,参数数(filtersize2 过滤器通道/组)和层输出(过滤器)数目之间找到最佳平衡。例如,大量研究表明,在ILSVRC2012(ImageNet)数据集的对象分类方面,CSPResNext50比CSPDarknet53更好。然而,相反,就检测MS COCO数据集上的对象而言,CSPDarknet53比CSPResNext50更好。

下一个目标是为不同的检测器级别从不同的主干级别中选择其他块以增加接收场和参数聚集的最佳方法:FPN,PAN,ASFF,BiFPN。

对于分类最佳的参考模型对于检测器并非总是最佳的。与分类器相比,检测器需要满足以下条件:

  • 更大的输入,用于检测小目标

  • 更多的层-以获得更大的感受野来覆盖增大的输入图像

  • 更多的参数-为了增强从单张图像中检测出不同大小的多个对象的能力

假设可以选择接受场较大(卷积层数为3×3)和参数数较多的模型作为主干。表1显示了CSPResNeXt50、CSPDarknet53和Effi-cientNet B3的信息。CSPResNext50只包含16个卷积层3×3,425×425感受野和20.6M参数,而CSPDarknet53包含29个卷积层3×3,725×725感受野和27.6M参数。这一理论证明,再加上我们的大量实验,表明CSPDarknet53神经网络是**两者作为探测器骨干的最佳模型**。

不同大小的感受野对检测效果的影响如下所示:

  • 最大对象大小-允许查看整个对象

  • 最大网络大小-允许查看对象周围的上下文

  • 超过网络大小-增加图像点和最终激活之间的连接

我们在CSPDarknet53上添加SPP块,因为它显著增加了接受场,分离出最重要的上下文特征,并且几乎不会降低网络操作速度。我们使用PANET代替YOLOv3中使用的FPN作为不同骨级的参数聚合方法,用于不同的检测器级别。

最后,我们选择了CSPDarknet53主干、SPP附加模块、PANET路径聚合Neck和YOLOv3(基于锚点的)头部作为YOLOv4的体系结构。

Selection of BoF and BoS

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

  • 激活函数:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish

  • bbox回归损失:MSE,IoU,GIoU,CIoU,DIoU

  • 数据增强:CutOut,MixUp,CutMix

  • 正则化方法:DropOut, DropPath [36],Spatial DropOut [79]或DropBlock

  • 通过均值和方差对网络激活进行归一化:Batch Normalization (BN) [32],Cross-GPU Batch Normalization (CGBN or SyncBN)[93], Filter Response Normalization (FRN) [70], orCross-Iteration Batch Normalization (CBN) [89]

  • 跨连接:Residual connections, Weightedresidual connections, Multi-input weighted residualconnections, or Cross stage partial connections (CSP)

至于训练激活功能,由于PReLU和SELU更难训练,并且ReLU6是专门为量化网络设计的,因此我们从候选列表中删除了上述激活功能。在重新量化方法中,发布Drop-Block的人们将自己的方法与其他方法进行了详细的比较,而其正则化方法赢得了很多。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于标准化方法的选择,由于我们专注于仅使用一个GPU的训练策略,因此不考虑syncBN。

3 进一步改进

为了适合在单个GPU上进行训练,我们进行了以下附加设计和改进:

  • 我们引入了一种新的数据增强方法:Mosaic, and Self-Adversarial Training (SAT)

  • 在应用遗传算法时,我们选择最优的超参数

  • 我们修改了一些现有方法,使我们的设计适合进行有效的训练和检测-改进的SAM,改进的PAN ,以及跨小批量标准化(CmBN)

Mosaic是一种新的混合4幅训练图像的数据增强方法。所以四个不同的上下文信息被混合,而CutMix只混合了2种。

这允许检测其正常上下文之外的对象。此外,批量归一化从每层上的4个不同的图像计算激活统计。这极大地减少了对large mini-batch-size的需求。

自对抗训练(SAT)也代表了一种新的数据增强技术,它在两个前向后向阶段运行。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对其自身执行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗。在第二阶段,训练神经网络,以正常的方式在修改后的图像上检测目标。

CmBN表示CBN的修改版本,如图4所示,定义为交叉小批量规范化(Cross mini-Batch Normalization,CMBN)。这仅在单个批次内的小批次之间收集统计信息。

 我们将SAM从空间注意修改为点注意,并将PAN的快捷连接分别替换为串联,如图5和图6所示。

 YOLOV4

YOLOV4的组成:

 YOLOV4的使用:

 实验

我们在ImageNet(ILSVRC 2012 Val)数据集上测试了不同训练改进技术对分类器精度的影响,然后在MS Coco(test-dev 2017)数据集上测试了不同训练改进技术对检测器精度的影响。

1 实验设置

略,,

2 Influence of different features on Classifier training

首先,我们研究了不同特征对分类器训练的影响;具体地说,类标签平滑的影响,不同数据增强技术的影响,双边模糊,混合,CutMix和马赛克,如图7所示,以及不同激活函数的影响,如Leaky-relu(默认情况下),SWISH和MISH。

在我们的实验中,如表2所示,通过引入诸如:CutMix和Mosaic数据增强、类标签平滑和Mish激活等特征,提高了分类器的精度。因此,我们用于分类器训练的BoF-Backbone(Bag Of Freebies)包括以下内容:CutMix和Mosaic数据增强以及类标签平滑。此外,我们还使用MISH激活作为补充选项,如表2和表3所示。

 3 Inflfluence of different features on Detector training

 进一步的研究涉及不同的免费袋(BOF探测器)对探测器训练精度的影响,如表4所示。我们通过研究在不影响FPS的情况下提高探测器精度的不同特性,显著扩展了BOF列表:

 进一步研究了不同的专BOS对检测器训练精度的影响,包括PAN、RFB、SAM、高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,当使用SPP、PAN和SAM时,检测器的性能最佳。

 4 Influence of different backbones and pretrained weightings on Detector training

进一步,我们研究了不同主干模型对检测器精度的影响,如表6所示。请注意,具有最佳分类精度的模型在检测器精度方面并不总是最佳。

首先,尽管与CSPDarknet53模型相比,经过不同功能训练的CSPResNeXt-50模型的分类准确性更高,但CSPDarknet53模型在对象检测方面显示出更高的准确性。

其次,使用BoF和Mish进行CSPResNeXt50分类器训练会提高其分类准确性,但是将这些预先训练的权重进一步应用于检测器训练会降低检测器准确性。但是,将BoF和Mish用于CSPDarknet53分类器训练可以提高分类器和使用该分类器预训练加权的检测器的准确性。结果是,与CSPResNeXt50相比,主干CSPDarknet53更适合于检测器。

我们观察到,由于各种改进,CSPDarknet53模型具有更大的能力来提高检测器精度。

5 Influence of different mini-batch size on Detector training

最后,我们分析了在不同最小批量大小下训练的模型所获得的结果,结果如表7所示。从表7所示的结果中,我们发现在添加BoF和BoS训练策略之后,最小批量大小几乎没有影响在检测器的性能上。该结果表明,在引入BoF和BoS之后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都只能使用传统的GPU来训练出色的探测器。

结果

 与其他最先进的物体探测器获得的结果比较如图8所示。YOLOv4在速度和准确性方面均优于最快,为最准确的探测器。

总结 

yolov4这篇论文通俗的说,可以是目标检测任务trick的综述。作者分别从数据处理,主干网络,网络训练,激活函数,损失函数等多个方面都做了不同程度的优化和改进。虽然没有理论上的创新,但作者对近些年来CNN领域中比较优秀的机制都做了很好的分析与实验,读完整篇文章,除了yolov4对做工程很友好外,对目标检测的思路的梳理还是很受益匪浅的。

猜你喜欢

转载自blog.csdn.net/Bolly_He/article/details/123914221