大量的特征据说可以提高卷积神经网络(CNN)的精度。需要在大数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。有些特性只适用于某些模型,只适用于某些问题,或仅适用于小规模数据集;而一些特性,如批处理标准化和残差连接,适用于大多数模型、任务和数据集。我们假设这些普遍特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、交叉小批归一化(CmBN)、自我对抗训练(SAT)和Mish激活。我们使用新功能:WRC,CSP,CmBN,SAT,Mish激活,Mosaic数据增强、CmBN,DropBlock正则化和CIoU损失,并结合其中一些实现最先进的结果:43.5%AP,(65.7%AP50)的实时速度∼65FPS Tesla V100。源代码是在https://github.com/AlexeyAB/darknet.。
大多数基于cnn的对象检测器基本上只适用于推荐系统。例如,通过城市摄像机搜索免费停车位是由慢速精确的模型执行的,而汽车碰撞警告与快速不准确的模型有关。为了提高实时目标检测器的精度,不仅可以将它们用于提示生成推荐系统,还可以用于独立的流程管理和减少人工输入。在传统图形处理单元(GPU)上的实时对象检测器操作允许它们以可承受的价格大规模使用。最精确的现代神经网络不能实时运行,需要大量的gpu来进行大的小批量训练。我们通过创建一个在普通的GPU上实时运行的CNN来解决这些问题,而其训练只需要一个普通的GPU。
这项工作的主要目标是在生产系统中设计一个目标检测器的快速运行速度,并优化并行计算,而不是低计算体积理论指标(BFLOP)。我们希望所设计的对象能够方便地训练和使用。例如,任何使用普通的GPU进行训练和测试的人都可以实现实时、高质量和令人信服的目标检测结果,如图1所示的YOLOv4结果所示。我们的贡献总结如下:
1.我们开发了一个高效而强大的目标检测模型。它使每个人都可以使用一个1080 Ti或2080 Ti GPU来训练一个超快和准确的目标探测器。
2.我们验证了state-of-the-art Bag-of Freebies and Bag-of-Specials对目标检测的影响。
3.我们修改了最先进的方法,使其更有效,更适合于单一的GPU训练,包括CBN[89],PAN[49],SAM[85]等。
现代探测器通常由两部分组成,一个是在ImageNet上预先训练的主干,另一个是用于预测物体的类和边界框的头部。对于那些运行在GPU平台上的检测器,它们的主干可以是VGG[68]、ResNet[26]、ResNeXt[86]或DenseNet[30]。对于那些运行在CPU平台上的检测器,它们的主干可以是SqueezeNet [31]、MobileNet[28,66,27,74]或ShufflfleNet[97,53]。对于头部部分,通常可分为一级目标探测器和两级目标探测器两类。最具代表性的两级目标探测器是R-CNN[19]系列,包括Fast R-CNN[18]、Faster R-CNN[64]、R-FCN[9]和Libra R-CNN[58].也可以使一个两级目标检测器成为一个无锚点的目标检测器,如反应点[87]。对于单级目标探测器,最具代表性的模型是YOLO[61,62,63]、SSD[50]和RetinaNet[45]。近年来,无锚的单级目标探测器已经发展起来。这类检测器有CenterNet [13]、CornerNet [37,38]、FCOS[78]等。近年来开发的目标探测器经常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体探测器的颈部。通常,颈部由几条自下向上的路径和几条自上向下的路径组成。配备这种机制的网络包括特征金字塔网络(FPN)[44]、路径聚合网络(PAN)[49]、BiFPN[77]和NAS-FPN[17]。
除了上述模型外,一些研究人员还强调了直接构建一个新的主干(DetNet[43],DetNAS[7])或一个新的整体模型(SpineNet[12],HitDetector[20])用于目标检测。
综上所述,一个普通的物体探测器由以下几个部分组成:
通常,一个传统的目标检测器是离线训练的。因此,研究者总是喜欢利用这一优势,开发出更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们把这些只会改变培训策略或只增加培训成本的方法称为“bag of freebies”。目标检测方法经常采用的、满足bag of freebies.定义的是数据增强。数据增强的目的是为了增加输入图像的可变性,从而使所设计的目标检测模型对在不同环境下获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们肯定有利于目标检测任务。在处理光度失真时,我们会调整图像的亮度、对比度、色调、饱和度和噪声。对于几何失真,我们添加了随机缩放、裁剪、翻转和旋转。
上述数据增强方法都是像素级调整,并保留调整区域中的所有原始像素信息。此外,一些从事数据增强工作的研究人员将其重点放在了模拟对象遮挡问题上。它们在图像分类和目标检测方面取得了良好的效果。例如,随机擦除[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充一个随机的或互补的零值。对于hide-and-seek[69]和grid mask[6],它们随机或均匀地选择一个图像中的多个矩形区域,并将它们替换为所有的零。如果将类似的概念应用于特征映射,则会有DropOut[71]、Drop连接[80]和DropBlock[16]方法。此外,一些研究者提出了使用多个图像一起进行数据增强的方法。例如,MixUp[92]使用两幅图像用不同的系数比进行乘法和叠加,然后用这些叠加的比率来调整标签。
CutMix[91]是将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除上述方法外,还采用了样式转移GAN[15]进行数据增强,这种使用可以有效地减少CNN学习到的纹理偏差。
与上面提出的各种方法不同,其他一些bag of freebies都致力于解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题,这个问题通常通过两级对象检测器中的硬负例挖掘[72]或在线硬例挖掘[67]来解决。但该示例挖掘方法不适用于单级对象检测器,因为这种检测器属于密集预测体系结构。因此,Lin等人[45]提出了焦点损失来解决不同类之间存在的数据不平衡问题。另一个非常重要的问题是,很难表达不同类别之间的关联程度与单一热硬表示之间的关系。这种表示方案经常用于执行标记。[73]中提出的标签平滑方法是将硬标签转换为软标签进行训练,使模型的鲁棒性更强。为了获得更好的软标签,Islam等人引入了知识精馏的概念来设计标签细化网络
最后bag of freebies是边界盒(BBox)回归的目标函数。传统的对象检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度和宽度进行回归,{,w、h}或左上角点和右下角点。对于基于锚的方法,是估计相应的偏移量,例如和,然而,直接估计BBox中每个点的坐标值是要将这些点作为自变量来处理,但实际上并没有考虑对象本身的完整性。为了更好地处理这一问题,一些研究人员最近提出了IoU损失[90],它考虑了预测的BBox区域和地面真实BBox区域的覆盖范围。IoU损失计算过程将通过使用地面真相执行IoU,触发BBox的四个坐标点的计算,然后将生成的结果连接到一个整个代码中。由于IoU是一种尺度不变表示,它可以解决传统方法计算{x、y、w、h}的l1或l2损失时,损失会随着尺度的增加而增加的问题。最近,一些研究人员继续改善IoU的损失。例如,GIoU损失[65]除了包括覆盖区域外,还包括物体的形状和方向。他们提出找到能够同时覆盖预测的BBox和地面真实BBox的最小面积的BBox,并使用该BBox作为分母来代替IoU损失中最初使用的分母。对于DIoU损失[99],它另外考虑了物体中心的距离,而CIoU损失[99]则同时考虑了重叠面积、中心点之间的距离和高宽比。CIoU在BBox回归问题上可以获得更好的收敛速度和精度。
对于那些只增加少量推理成本但又能显著提高目标检测精度的插件模块和后处理方法,我们称它们为“bag of specials"。一般来说,这些插件模块是用于增强模型中的某些属性,如扩大接受域、引入注意机制或增强特征整合能力等,而后处理是筛选模型预测结果的一种方法。
可用于增强感受野的常见模块是SPP[25]、ASPP[5]和RFB[47]。SPP模块起源于空间金字塔匹配(SPM)[39],SPMs的原始方法是将特征映射分割成几个d×d相等的块,其中d可以是{1,2,3,…},从而形成空间金字塔,然后提取bag-of-word特征。SPP将SPM集成到CNN中,使用最大池化操作,而不是bag-of-word操作。由于He等人[25]提出的SPP模块将输出一维特征向量,因此在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3[63]的设计中,Redmon和Farhadi将SPP模块改进为核大小为k×k,其中k={1,5,9,13},步幅等于1。在这种设计下,相对较大的最大池有效地增加了主干特征的接受域。 在添加改进版本的SPP模块后,YOLOv3-608在MS COCO目标检测任务上将AP50升级了2.7%,额外计算0.5%。ASPP[5]模块与改进的SPP模块在操作上的差异主要是从原始的k×k核大小,步幅最大池化等于1到多个3×3核大小,扩张比等于k,步幅等于1。RFB模块采用k×k核的多个扩张卷积,扩张比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖。RFB[47]只需要花费7%的额外推理时间,就可以使MS COCO上的SSD的AP50增加5.7%。
目标检测中常用的注意模块主要分为通道式注意和点态注意,这两种注意模型的代表分别是Squeeze-and-Excitation (SE)[29]和空间注意模块(SAM)[85]。虽然SE模块可以提高ResNet50的力量在ImageNet图像分类任务1%top-1精度的只增加2%计算,但在GPU通常将使推理时间增加约10%,所以它更适合用于移动设备。但对于SAM,它只需要额外支付0.1%的计算量,就可以将ResNet50-SE提高到ImageNet图像分类任务的0.5%的top-1精度。最重要的是,它根本不影响GPU上的推理速度。
在特征集成方面,早期的实践是使用skip connection[51]或hyper-column[22]将低级物理特征与高级语义特征进行集成。随着FPN等多尺度预测方法越来越流行,人们提出了许多整合不同特征金字塔的轻量级模块。这类模块包括SFAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是利用SE模块在多尺度连接的特征图上执行信道级重加权。对于ASFF,它使用softmax作为点级重新加权,然后添加不同尺度的特征图。在BiFPN中,提出了多输入加权残差连接来进行尺度水平重加权,然后添加不同尺度的特征图。
在深度学习的研究中,一些人将重点放在寻找良好的激活函数上。一个好的激活函数可以使梯度更有效地传播,同时也不会造成太多的额外计算成本。2010年,Nair和Hinton[56]提出ReLU来实质上解决传统的tanh和s型激活函数中经常遇到的梯度消失问题。随后,提出了LReLU[54]、PReLU[24]、ReLU6[28]、尺度指数线性单位(SELU)[35]、Swish[59]、hard-Swish[27]、Mish[55]等,它们也被用于解决梯度消失问题。LReLU和PReLU的主要目的是解决当输出小于零时,ReLU的梯度为零的问题。对于ReLU6和hard-swish,它们是专门为量化网络设计的。对于神经网络的自归一化,提出了SELU激活函数来满足该目标。需要注意的一点是,Swish和Mish都是连续可区分的激活函数。
在基于深度学习的对象检测中常用的后处理方法是NMS,它可以用于过滤那些预测同一对象不好的预测框,并且只保留响应率较高的候框。NMS试图改进的方法与优化目标函数的方法是一致的。NMS提出的原始方法不考虑上下文信息,因此Girshick等[19]在R-CNN中添加分类置信分数作为参考,根据置信分数的顺序,按照高到低的顺序进行greedy NMS。对于soft NMS[1],它考虑了对象的遮挡在greedy NMS中可能导致置信度分数下降的问题。DIoU NMS[99]开发者的思维方式是在soft NMS的基础上,将中心点距离的信息添加到BBox的筛选过程中。值得一提的是,由于上述所有的后处理方法都没有直接涉及到所捕获的图像特征,因此在后续的无锚定方法的开发中,不再需要后处理。
其基本目标是神经网络的快速运行速度,在生产系统和优化并行计算,而不是低计算体积理论指标(BFLOP)。我们提出了两种实时神经网络的选择:
对于GPU,我们使用卷积层中的少量组(1-8):CSPResNeXt50 / CSPDarknet53
对于VPU-我们使用分组卷积,但我们不使用Squeeze-and-excitement (SE) -特别是这包括以下模型EffificientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
我们的目标是在输入网络分辨率、卷积层数、参数数(滤波器大小2*滤波器*通道/组)和层输出数(滤波器)之间找到最优的平衡。例如,我们的大量研究表明,在ILSVRC2012(ImageNet)数据集[10]上,CSPResNext50比CSPDarknet53要好得多。然而,相反地,在检测MS COCO数据集[46]上的对象方面,CSPDarknet53比CSPResNext50更好。
下一个目标是选择额外的块来增加感受野,以及从不同检测器级别的参数聚合的最佳方法:例如FPN、PAN、ASFF、BiFPN。
对于分类最优的参考模型对于探测器来说并不总是最优的。与分类器相比,该探测器需要以下条件:
假设来说,我们可以假设应该选择一个具有更大的接受场大小(具有更多的卷积层3×3)和更多的参数的模型作为主干。表1显示了CSPResNeXt50、CSPDarknet53和efficientnetB3的信息。CSPResNext50只包含16个卷积层3×3、一个425×425感受野和20.6 M参数,而CSPDarknet53包含29个卷积层3×3、一个725×725感受野和27.6 M参数。这一理论证明,加上我们进行的大量实验,表明CSPDarknet53神经网络是两者作为探测器主干的最佳模型。
不同大小的感受野的影响总结如下:
我们在CSPDarknet53上添加了SPP块,因为它显著地增加了接受域,分离出了最重要的上下文特征,并且几乎不会导致降低网络运行速度。我们使用PANet作为来自不同检测器级别的不同主干级别的参数聚合的方法,而不是在YOLOv3中使用的FPN。
最后,我们选择CSPDarknet53主干、SPP附加模块、PANet路径聚合颈和YOLOv3(基于锚点)的头作为YOLOv4的体系结构。
未来,我们计划显著扩展检测器的f Bag of Freebies(BoF)的内容,理论上可以解决一些问题,提高检测器的精度,并以实验方式依次检查每个特征的影响。
我们不使用Cross-GPU批处理归一化(CGBN或SyncBN)或昂贵的专用设备。这允许任何人都可以在传统的图形处理器上再现我们最先进的结果,例如GTX 1080Ti或RTX 2080Ti。
为了改进目标检测训练,CNN通常使用以下:
对于训练激活函数,由于PReLU和SELU更难训练,而且ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除。在需求化方法上,发表DropBlock的人将其方法与其他方法进行了详细的比较,其正则化方法获得了很大的成功。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于归一化方法的选择,由于我们关注于只使用一个GPU的训练策略,因此不考虑syncBN。
为了使设计的探测器更适合训练单GPU上,我们做了额外的设计和改进如下:
Mosaic代表了一种新的数据增强方法,它混合了4个训练图像。因此,混合了4种不同的上下文,而CutMix只混合了2个输入图像。这允许检测其正常上下文之外的对象。此外,批归一化计算每一层上4个不同图像的激活统计信息。这大大减少了对大型小批量处理的需求
自对抗训练(SAT)也代表了一种新的数据增强技术,可以在2个向前向后的阶段运行。在第一阶段,神经网络改变了原始图像,而不是网络的权值。通过这种方式,神经网络对自己进行敌对性攻击,改变原始图像,以制造出图像上没有想要的目标的欺骗。在第二阶段,神经网络被训练以正常的方式检测修改后的图像上的对象。
CmBN表示CBN修改后的版本,如图4所示,定义为交叉小批量归一化(CmBN)。这只收集单个批次内的小批次之间的统计信息。
我们将SAM从空间级注意修改为点态注意,并将PAN的快捷连接替换为shortcut 连接,分别如图5和图6所示
在本节中,我们将详细说明YOLOv4的细节。
我们测试了不同的训练改进技术对ImageNet(ILSVRC 2012 val)数据集上分类器精度的影响,然后对MS COCO(test-dev 2017)数据集上检测器精度的影响。
在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8000000;批大小和小批量大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1;预热步骤为1000;动量衰减和权重衰减分别设置为0.9和0.005。我们所有的BoS实验都使用与默认设置相同的超参数,在BoF实验中,我们额外添加了50%的训练步骤。在BoF实验中,我们验证了MixUp、CutMix、Mosaic、模糊数据增强和标签平滑正则化方法。在BoS实验中,我们比较了LReLU、Swish和Mish激活功能的影响。所有实验均采用1080 Ti或2080TiGPU进行训练。
在MS COCO目标检测实验中,默认的超参数如下:训练步长为500,500;采用步长衰减学习率调度策略,初始学习率为0.01,在400000步和450000步时分别乘以0.1倍;动量和权重衰减分别设置为0.9和0.0005。所有架构都使用一个GPU来执行批处理大小为64的多规模训练,而小批处理大小为8或4,这取决于架构和GPU内存限制。除在超参数搜索实验中使用遗传算法外,所有其他实验均使用默认设置。遗传算法使用YOLOv3-SPP对GIoU损失进行训练,并搜索300个时元的最小值5k集。我们采用搜索学习率0.00261,动量0.949,IoU阈值分配地面真值0.213,遗传算法实验采用损失归一化器0.07。我们验证了大量的BoF,包括网格灵敏度消除、Mosaic数据增强、IoU阈值、遗传算法、类标签平滑、交叉小批归一化、自对抗训练、余弦退火调度器、动态小批大小、dropblock、优化锚点、不同类型的IoU损失。我们还在各种BoS上进行了实验,包括Mish、SPP、SAM、RFB、BiFPN和高斯YOLO[8]。对于所有的实验,我们只使用一个GPU来进行训练,因此不使用优化多个GPU的像syncBN这样的技术。
首先,我们研究了不同特征对分类器训练的影响;具体来说,类标签平滑的影响,不同数据增强技术的影响,bilateral blurring, MixUp, CutMix and Mosaic,如Fugure7所示,以及不同激活的影响,如Leaky-relu(默认)、Swish和Mish。
在我们的实验中,如表2所示,通过引入:CutMix和Mosaic数据增强、类标签平滑和Mish激活等特征,提高了分类器的精度。因此,我们用于分类器训练的BoF backbone(Bag of Freebies)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。此外,我们使用Mish激活作为补充选项,如表2和表3所示。
进一步研究了不同的Bag-of Freebies(BoF-detector)对探测器训练精度的影响,如表4所示。通过研究在不影响FPS的情况下提高检测器精度的不同特征,我们显著地扩展了BoF列表:
S:消除网格灵敏度的公式 其中cx和cy总是整数,在YOLOv3中用于计算对象坐标,因此,对于接近cx或cx+1值的bx值,需要极高的tx绝对值。我们通过将s型矩阵乘以一个超过1.0的因子来解决这个问题,从而消除了对象无法检测到的网格的影响。
M:Mosaic data-在训练期间使用4张图像的马赛克,而不是单一的图像
IT:IoU阈值-使用多个锚作为单一地面真实IoU(truth, anchor) >IoU阈值
GA:Genetic algorithms-在前10%的时间段内使用遗传算法选择最优超参数
LS:类标签平滑-使用类标签平滑的s型符号激活
CBN:CmBN-使用交叉小批标准化来收集整个批内的统计信息,而不是在单个小批内收集统计数据
CA:余弦退火调度器-改变正弦波训练过程中的学习速率
DM:动态小批量大小-在小分辨率训练中,通过使用随机训练形状自动增加小批量大小
OA:优化的锚-使用优化的锚与512x512网络分辨率进行训练
GIoU,CIoU,DIoU,MSE-使用不同的损失算法进行边界框回归
进一步研究了不同的Bag-of-Specials (bos-检测器)对检测器训练精度的影响,包括PAN、RFB、SAM、高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,检测器在使用SPP、PAN和SAM时性能最好。
进一步研究了不同主干模型对检测器精度的影响,如表6所示。我们注意到,具有最佳分类精度特征的模型在检测器精度方面并不总是最好的。
首先,虽然使用不同特征训练的CSPResNeXt-50模型的分类精度高于CSPDarknet53模型,但CSPDarknet53模型在目标检测方面具有更高的精度。
其次,使用CSPResF和Mish进行50分类器训练可以提高分类精度,但进一步应用这些预先训练的权重用于检测器训练会降低检测器的精度。然而,在CSPDarknet53分类器训练中使用BoF和Mish可以提高分类器和使用该分类器预训练的加权的检测器的准确性。最终的结果是,主干CSPDarknet53比CSPResNeXt50更适合用于检测器。
我们观察到,CSPDarknet53模型由于各种改进,显示出更大的能力来提高探测器的精度。
最后,我们分析了用不同的小批量训练的模型得到的结果,结果如表7所示。从表7所示的结果中,我们发现在添加BoF和BoS训练策略后,小批量大小对检测器的性能几乎没有影响。这一结果表明,在引入BoF和BoS后,不再需要使用昂贵的gpu进行训练。换句话说,任何人都只能使用一个普通的GPU来训练一个优秀的探测器。
与其他最先进的对象检测器所获得的结果的比较如图8所示。我们的YOLOv4位于Pareto最优性曲线上,在速度和精度方面都优于最快和最精确的探测器。
由于不同的方法使用不同架构的gpu进行推理时间验证,我们在通常采用的Maxwell、Pascal和Volta架构的gpu上操作YOLOv4,并将它们与其他最先进的方法进行比较。表8列出了使用MaxwellGPU的帧率比较结果,它可以是GTX TitanX(Maxwell)或TeslaM40GPU。表9列出了使用PascalGPU的帧率比较结果,可以是TitanX(Pascal)、TitanXp、GTX 1080Ti或特斯拉P100GPU。如表10所述,它列出了使用VoltaGPU的帧率比较结果,可以是Titan Volta或Tesla V100GPU。
我们提供了一个最先进的探测器,它比所有可用的替代探测器更快、更准确(MSCOCO50AP50…95和AP50)。所描述的检测器可以在具有8-16 GB-VRAM的普通的GPU上进行训练和使用,这使得它的广泛使用成为可能。单级锚定探测器的最初概念已经证明了其可行性。我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的精度。这些特性可以作为未来研究和发展的最佳实践。