YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)

闲谈:

       今年初 YOLO 之父Joseph Redmon宣布推出CV界,引起轩然大波,大家纷纷猜测YOLO是否不会再出v4版,退出历史舞台。

      今天,YOLOv4重磅发布,作者为俄罗斯开发者 Alexey Bochkovskiy 和两位中国台湾开发者 Chien-Yao Wang、Hong-Yuan Mark Liao

       YOLOv4 没有理论创新,而是在原有YOLO目标检测架构的基础上增加了近年CNN改进的众多技术,从数据处理到网络训练再到损失函数,遵行“拿来主义”,加上漂亮的工程实践,打造实现最佳速度与精度平衡的目标检测新基准!在MS COCO 数据集 实现 43.5% AP (65.7% AP50 ), 速度也更快了,在Tesla V100 GPU上 ∼65 FPS!

                                              YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第1张图片

Abstract:

 大量的特征提高卷积神经网络的准确性。 对大型数据集上的特征的组合进行实践测试,并从理论上证明实验结果的正确性。针对特定的问题,一些特征仅在特定模型上运行,或者仅在小规模数据集上运行; 然而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。 我们假设常见的特征包括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,并将其中的一部分以实现最新的结果:43.5% 在Tesla V100上以65 FPS的实时速度获得MS COCO数据集的AP(65.7%AP50)。

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

paper:https://arxiv.org/pdf/2004.10934v1.pdf

Introduction:

多数基于CNN的物体探测器在很大程度上仅适用于recommendation systems。 例如,低精度模型已经被用在城市摄像机寻找免费停车位中,而汽车碰撞警告与快速不准确的模型有关。 改善中实时物体检测器的准确性使得它们不仅用于生成提示的recommendation systems,而且也用于独立的进程管理和减少人工投入。 运行在GPU上实时目标检测器可以以合适的价格实现大规模生产。 最准确的现代神经网络不能实时运行并且在小批量训练需要多个GPU。我们利用一个CNN来处理这些问题,并且执行这些实时的检测在一个传统的GPU上,同时训练只需要一个传统的GPU。

          这项工作的主要目标是设计生产系统中目标检测器快速运行速度并优化并行计算,而不是低计算量理论指标(BFLOP)。  例如,任何使用常规GPU进行训练和测试的人都可以获得实时、高质量以及可信的目标检测结果。我们的贡献总结如下:

                                           YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第2张图片

YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第3张图片

Related work

 2.1 Object detection models

       作者首先对现有目标检测方法进行了总结,无论是one-stage 、two-stage 还是 anchor free 、anchor based,均包含 Input、Backbone 、Neck、Heads(Dense Prediction或者Sparse Prediction)四部分。

     近期的检测器通常由两部分组成,在ImageNet上预先训练的骨干和头部用于预测对象的类和边界框。对于在GPU平台上运行的检测器,backbone网可能是VGG [68],ResNet [26],ResNeXt [86],或DenseNet [30]。对于在CPU平台上运行的检测器,的骨干网可能是SqueezeNet [31],MobileNet[28,66,27,74]或ShuffleNet [97,53]。至于头部它通常分为两种,即一阶段对象
探测器和两级物体探测器。最有代表性两级物体检测器是R-CNN [19]系列,包括快速R-CNN [18],更快的R-CNN [64],R-FCN [9],和Libra R-CNN [58]。也可以进行两阶段对象检测器无锚对象检测器,例如RepPoints [87]。一阶段物体检测器典型代表是YOLO [61,62,63],SSD [50],和RetinaNet [45]。近年来,开发了无锚盒一阶段物体检测器。这类检测器是CenterNet [13],CornerNet [37、38],FCOS [78]等。j近年来开发的目标探测器经常是在骨干网络和头部网络中插入一些层,间,这些层通常是
用于收集不同阶段的特征图。我们可以称之为物体检测器的颈部。通常颈部是 由几个自下而上的路径和几个自上而下的路径构成。具有该机制的网络包括Feature Pyramid Network (FPN) [44], Path Aggregation Network (PAN) [49], BiFPN [77], and NAS-FPN [17].除了上述模型外,一些研究者还着重于直接构建一个新的主干(DetNet [43], DetNAS[7])或一个新的整体模型(SpineNet [12], HitDetector[20])用于目标检测。

通常目标检测包括以下几个部分:

                      YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第4张图片

 2.2  Bag of freebies

   通常,传统的目标探测器是离线训练的。因此,研究人员总是希望利用这一优势,开发出更好的训练方法,使目标探测器在不增加推理成本的情况下获得更好的精度。我们称这些方法为只改变训练策略或增加训练成本的免费赠品。目标检测方法中经常采用的是数据扩充。数据扩充的目的是增加输入图像的可变性,以至于所设计的目标检测模型对不同环境下获得的图像具有更高的鲁棒性。例如,photometric distortions 和 geometric distortions是两种常用的数据增强方法,它们对目标检测任务有明显的好处。在处理photometric distortions时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于geometric distortions,我们添加了随机缩放、剪切、翻转和旋转。

       上述数据增强方法均为像素级调整,调整区域内的所有原始像素信息均保留。此外,一些从事数据扩充的研究人员把重点放在模拟物体遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,random wipe[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充一个随机的或互补的0值。对于hide-and-seek [69]和grid mask [6],它们随机或均匀地选择图像中的多个矩形区域,并将其全部替换为零。如果将类似的概念应用于feature map,则有DropOut[71]、DropConnect[80]和DropBlock[16]方法。此外,一些研究者提出了将多幅图像结合在一起进行数据扩充的方法。例如,MixUp[92]使用两幅图像以不同的系数比率进行相乘和叠加,然后利用这些叠加比率调整标签。CutMix[91]是将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法外,style transfer GAN[15]也被用于数据扩充,这样的使用可以有效的减少CNN学习到的纹理偏差。

       不同于上面提出的各种方法,还有一些其他的免费赠品方法是专门用来解决的数据集中可能存在的语义分布问题有偏见。在处理语义分布偏差问题时,语义分布偏差是一个很重要的问题:不同类之间的数据不平衡,以及这个问题常通过难例样本挖掘[72]或在两阶段目标检测中的在线难例样本挖掘[67]。但样本挖掘方法不适用于单级目标检测,因为这种类型的检测属于稠密预测结构。因此,林[45]等人提出了焦点损失函数来解决这一问题不同类别之间存在的数据不平衡。另一个非常重要的问题是,它是难以表达的带有那one-hot 表示的不同分类之间的关联程度。这种表示法常用于执行标记。。文献[73]提出的标签平滑是对硬标签的转换变成软标签进行训练,这样可以使模型更完善健壮。为了获得更好的软标签,Islam等人[33]将知识蒸馏的概念引入到设计中标签细化网络。

       最后一个freebies是边界盒(BBox)回归的目标函数。传统的目标检测器通常使用均方误差(Mean Square Error, MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即或左上点和右下点,即。对于基于锚的方法,是对相应的偏移量进行估计,。但是,直接估计BBox中每个点的坐标值,就是把这些点当作自变量,而实际上并不考虑对象本身的完整性。为了更好地处理这个问题,一些研究者最近提出了IoU损失[90],将预测的BBox区域的覆盖范围和地面真实BBox区域考虑在内。IoU的丢包计算过程通过执行带有ground truth的IoU,触发BBox的四个坐标点的计算,然后将生成的结果连接成一个完整的代码。由于IoU是一种尺度不变的表示,它解决了传统方法在计算fx、y、w、hg的l1或l2损耗时,损耗随尺度增大而增大的问题。最近,一些研究人员继续改进 Giou loss 。例如GIoU loss[65],除了覆盖区域外,还包括了物体的形状和方向。他们提出寻找能够同时覆盖预测的BBox和ground truth BBox的最小面积BBox,用这个BBox作为分母来代替IoU损失中原来使用的分母。对于DIoU loss[99],它额外考虑了物体中心的距离,而CIoU loss[99],同时考虑了重叠区域、中心点之间的距离和长宽比。在BBox回归问题上,CIoU具有较好的收敛速度和精度。

2.3 Bag of specials  

        对于那些仅增加少量推理消耗,却能显著提高目标检测精度的插件模块和后处理方法,我们称之为特殊bags。这些插件模块一般用于增强模型中的某些属性,如扩大感受野、引入注意机制、增强特征聚合能力等,后处理是筛选模型预测结果的一种方法。

       可以用来增强感受野的常用组件有SPP[25]、ASPP[5]和RFB[47]。SPP组件源于空间金字塔匹配(SPM) [39], SPMs原始方法是将特征图分割成若干个d *d 等大的块,其中d可以为1,2,3....,从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN中,使用max-pooling操作代替bag-of-word操作。由于He等人提出的SPP模块会输出一维特征向量,因此在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3[63]的设计中,Redmon和Farhadi将SPP模块改进为最大池输出与内核大小 k *k级联,其中k = 1,5,9,13g,步长等于1。在本设计中,较大的k*k 最大池化有效地增加了骨干特征的感受域。在添加SPP模块的改进版本后,YOLOv3-608在MS COCO对象检测任务上对更新AP50了2.7%,增加了0.5%的额外计算量。ASPP[5]模块与改进后的SPP模块在运算上的区别主要体现在原始的 k*k内核大小上,stride的最大池大小为1*1到几个3*3个内核大小,膨胀率为k,扩展卷积运算的stride为1。RFB模块是利用k*k内核的几个空洞卷积,膨胀率为k, 步长等于1,得到比ASPP更全面的空间覆盖。RFB[47]只需额外花费7%的推理时间,就可以将MS COCO上SSD的AP50增加5.7%。

      在目标检测中经常使用的关注是模块主要分为两种:通道和点,这两种注意模型的代表分别是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在ImageNet图像分类任务上的0.5% top-1准确率。最重要的是,它完全不影响GPU上的推理速度。

        在特征融合方面,早期的实践是使用跳跃连接[51]或超列[22]将低级物理特征融合到高级语义特征。随着FPN等多尺度预测方法的流行,人们提出了许多融合不同特征金字塔的轻量级模型。这类模块包括SFAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是利用SE模块对多尺度的拼接特征图进行通道权重更新。对于ASFF,它使用softmax作为点向水平上权重更新,然后添加不同尺度的特征映射。在BiFPN中,提出了多输入加权残差来执行比例级权重更新,然后加入不同尺寸的特征映射。

      在深度学习的研究中,一些人把重点放在寻找好的激活函数。一个好的激活函数可以使梯度更有效地传播,同时也不会造成过多的计算消耗。2010年,Nair和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的主要目的是解决输出小于0时ReLU的梯度为零的问题。对于ReLU6和hard-Swish,它们是专门为量化网络设计的。为了实现神经网络的自归一化,提出了SELU激活函数。需要注意的一点是,Swish和Mish都是连续可微的激活函数。

         基于深度学习的目标检测中常用的后处理方法是NMS,它可以用来过滤那些对同一对象预测较差的bbox,只保留响应较高的候选bbox。NMS试图改进的方法与优化目标函数的方法是一致的。NMS提出的原始方法没有考虑上下文信息,所以Girshick等人[19]在R-CNN中加入了分类置信度评分作为参考,按照置信度评分的顺序,从高到低依次进行贪婪NMS。对于soft NMS[1],考虑了在IoU评分的贪心NMS中,目标遮挡可能会导致自信度得分下降的问题。DIoU NMS[99]开发人员的思路是在soft  NMS的基础上,将中心点距离信息添加到BBox筛选过程中。值得一提的是,由于以上的后处理方法都不直接引用捕获的图像特征,因此在后续的无锚方法开发中不再需要后处理。

3. Methodology

      目的是在生产系统中提高神经网络的运行速度和并行计算的优化速度,而不是降低BFLOP。我们提出了两种可选的实时神经网络: 

                                                  YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第5张图片

 3.1. Selection of architecture

        我们的目标是在输入网络分辨率、卷积层数、参数数量(filter size2 * filters * channel / groups)和输出的层数(filter)之间找到最优的平衡。例如,我们的大量研究表明,在ILSVRC2012 (ImageNet)数据集[10]上对象分类方面,CSPResNext50要比CSPDarknet53好得多。然而,相反地,在MS COCO数据集[46]上,检测性能CSPDarknet53优于CSPResNext50。

       下一个目标是对于不同的级别检测检测器(如FPN、PAN、ASFF、BiFPN),从不同的骨架网络级别上选择额外的块来增加感受野和最佳的参数聚合的方法。

      一个最优的分类模型不一定是最优的检测器。与分类器相比,检测器需要满足以下条件

                                            YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第6张图片

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

      不同尺寸感受野的影响如下:

                                                 YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第7张图片

         我们在CSPDarknet53上添加了SPP块,因为它显著地增大感受野,分离出了上下文性质,并且几乎不会降低网络的运行速度。我们使用PANet作为不同检测层的不同主干层的参数聚合方法,而不是YOLOv3中使用的FPN。

         最后,我们选择CSPDarknet53主干、SPP附加模块、PANet路径聚集颈和基于YOLOv3锚的头部作为YOLOv4的架构。在未来,我们计划对探测器的免费赠品包(BoF)的内容进行大幅扩展,理论上可以解决一些问题,提高探测器的精度,并以实验的方式依次检查每个特征的影响。我们不使用多GPU批处理标准化(CGBN或SyncBN)或昂贵的专用设备。这使得任何人都可以在传统的图形处理器(如GTX 1080Ti或RTX 2080Ti)上重现我们的最新成果。

3.2. Selection of BoF and BoS

  为了提升目标检测的训练,CNN通常遵循以下几种方式:

                                                       YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第8张图片

       对于训练激活函数,由于PReLU和SELU更难训练,而ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除。在规范化方法中,发表Drop- Block的人将其方法与其他方法进行了详细的比较,他们的规范化方法取得了很大的成果。因此,我们毫不犹豫地选择DropBlock作为我们的regularization方法。在归一化方法的选择上,由于我们关注的是只使用一个GPU的训练策略,所以没有考虑syncBN。

3.3. Additional improvements

     为了使设计更适合于单GPU上的训练检测器,我们做了如下的附加设计和改进:

                                                             YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第9张图片

                                                    YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第10张图片

        Mosaic 提出了一种混合四幅训练图像的数据增强方法,因此混合四种不同的上下文,这允许检测正常上下文之外的对象。此外,批处理标准化计算激活统计从4个不同的图像在每一层,这大大减少了对小批处理大小的需求。

       自对抗训练(SAT)也代表了一种新的数据扩充技术,它分前后两个阶段进行操作。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对自己执行一种对抗性攻击,改变原始图像,制造图像上没有期望对象的假象。在第二阶段,训练神经网络对修改后的图像进行正常的目标检测。

                            YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第11张图片 

           CmBN表示CBN的修改版本,如图4所示,定义为跨微批量标准化(CmBN)。这仅收集单个批中的小批之间的统计信息。

          我们将SAM从spatial-wise attention修改为point-wise attention,并将PAN的shortcut连接改为conncatenation,分别如图5和图6所示。

                            YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第12张图片  

 3.4. YOLOv4

             分享YOLOv4的细节:

                                                                            YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第13张图片 

    YOLO v4 uses:

      通用技巧:  CutMix and  Mosaic data augmentation, DropBlock regularization, Class label smoothing

      特殊技巧:Mish activation,Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC)

      探测器通用技巧: CIoU-loss,CmBN, DropBlock regularization, Mosaic data augmentation,Self-Adversarial Training, Eliminate grid  sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler [52], Optimal hyperparameters,Random training shapes

      探测器 特殊技巧:Mish activation,SPP-block, SAM-block, PAN path-aggregation block,DIoU-NMS

4. 实验结果

        作者在MS COCO 数据集上进行了实验,结果如下:

        YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第14张图片

每一行分别代表不同的GPU计算结果:

  • 在主流的SOTA目标检测算法中,YOLOv4实现了最佳的速度和精度的平衡,

  • 在精度差不多的情况下,YOLOv4的速度往往是最快的,

  • 尤其在FPS超过30的实时算法中,YOLOv4是精度最高的。

 

因为不同的算法公布时可能在不同的GPU上进行测试,作者根据不同的GPU(Maxwell/Pascal/Volta)分别列出了YOLOv4与其他算法的更详细的比较,即Table 8、9、10,帧率大于等于30的用蓝底标出。

                                                         YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第15张图片

                                                 YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第16张图片 

 

                                                YOLOv4::Optimal Speed and Accuracy of Object 及code 各种新实现、配置、测试、训练资源)_第17张图片 

可见YOLOv4 在实时目标检测算法中精度最高,实现了精度和速度的最佳平衡。

   总结:   虽然YOLOv4在理论上没有创新,但其引人注目的精度速度,承袭YOLO系列的简单易上手的操作体验,必将成为实时目标检测的口碑之作!

推荐:https://mp.weixin.qq.com/s/3vdhQ5wsacxuvmpQ4Jl5pw

code: https://mp.weixin.qq.com/s/9SR5CUDIBmdJeYEWABASWA(YOLOv4 的各种新实现、配置、测试、训练资源汇总)

你可能感兴趣的:(目标检测,计算机视觉)