据说有很多功能提高卷积神经网络(CNN)的准确性。实际测试此类功能的组合需要数据集和结果的理论依据。某些功能仅在某些型号上运行并且仅针对某些问题,或者仅针对小规模问题数据集而一些功能,例如批量归一化和残余连接,适用于大多数模型,任务和数据集。我们假设这样的普遍性功能包括加权残差连接(WRC),跨阶段部分连接(CSP),交叉微型批处理归一化(CmBN),自我对抗训练(SAT)和米什激活。我们使用新功能:WRC,CSP,CmBN,SAT,Mish激活,镶嵌数据增强,CmBN,DropBlock正则化和CIoU损失,并将其中的一些结合起来以达到最新的结果:43.5% 在Tesla V100上,MS COCO数据集的AP(65.7%AP50)的实时速度约为65 FPS。源代码位于https://github.com/AlexeyAB/darknet。
大多数基于CNN的物体探测器在很大程度上仅适用于推荐系统。 例如,通过慢速精确模型执行通过城市摄像机搜索空闲停车位的过程,而汽车碰撞警告与快速不精确模型有关。 改善中实时物体检测器的准确性使得可以使用它们不仅用于生成提示的推荐系统,而且也用于独立的流程管理和人工输入减少。 常规图形处理单元(GPU)上的实时对象检测器操作可实现其质量以合理的价格使用。 最准确的现代神经网络不能实时运行并且需要大量大量小批量训练的GPU数量。我们通过创建可在常规GPU上实时运行的CNN来解决此类问题,训练只需要一个传统的GPU。
这项工作的主要目标是设计生产系统中可以以快速运行的速度运行的目标检测器,并优化并行计算,而不是低计算量理论指标(BFLOP)。 我们希望可以轻松地训练和使用设计的对象。 例如,使用YOLOv4结果如图1所示,任何使用常规GPU进行训练和测试的人都可以获得实时,高质量和令人信服的对象检测结果。我们的贡献总结如下:
1.我们开发了高效而强大的物体检测模型。 它使每个人都可以使用1080 Ti或2080 Ti GPU训练超快速,准确的物体检测器。
2.我们在探测器training期间,验证了 state-of-the-art, Bag-ofFreebies ,Bag-of-Specials检测方法的影响。
3.我们修改 state-of-the-art方法并使之更有效,更适合单GPU训练,包括CBN [89],PAN [49],SAM [85]等。
现在的探测器通常由两部分组成,在ImageNet上预先训练的backbone和head, 用于预测对象的类和边界框。对于在GPU平台上运行的检测器,backbone 可以是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。对于在CPU平台上运行的检测器,其backbone 可以是SqueezeNet [31],MobileNet[28,66,27,74]或ShuffleNet [97,53]。至于head,它通常分为两种,即one-stage 对象探测器和two-stage 物体探测器。最有代表性的two-stage物体检测器是R-CNN [19]系列,包括 fast R-CNN [18], faster R-CNN [64], R-FCN [9], 和Libra R-CNN [58].也有可能使两阶段目标检测器成为anchor-free目标检测器,例如RepPoints [87]。one-stage物体检测器,代表机型是YOLO [61,62,63],SSD [50],和RetinaNet [45]。近年来,开发了anchor-free one-stage物体检测器。这种检测器有CenterNet [13],CornerNet [37、38],FCOS [78]等。近年来开发的对象探测器通常在骨架和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体检测器的颈部。通常是脖子,由几个自下而上的路径和几个自上而下的路径组成。配备此机制的网络包括功能金字塔网络(FPN)[44],路径聚合网络(PAN)[49],BiFPN [77]和NAS-FPN [17]。
除上述模型外,一些研究人员将重点放在直接构建用于对象检测的新 backbone(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDetector [20])上。综上所述,普通的物体探测器有以下个部分:
通常,常规的物体检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,并开发出更好的训练方法,从而使目标检测器在不增加推理成本的情况下获得了更好的精度。我们称这些仅更改培训策略或仅增加培训成本的方法为“一袋免费赠品”。物体检测方法经常采用并符合免费赠品袋定义的是数据增强。数据扩充的目的是增加输入图像的多样性,使设计的目标检测模型对不同环境下获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们都有益于目标检测任务。在处理光度失真时,我们会调整图像的亮度,对比度,色相,饱和度和噪点。 对于几何变形,我们添加了随机缩放,裁剪,翻转和旋转
上面提到的数据扩充方法都是逐像素调整,以及所有原始像素信息调整后的区域被保留。此外,一些从事数据扩充的研究人员将重点放在模拟对象遮挡问题上。他们在图像分类和目标检测上取得了不错的成绩。例如,随机擦除[100]和剪切[11]可以随机选择图像中的矩形区域并随机填充或零的互补值。至于hide-and-seek[69]和网格蒙版[6],他们随机或均匀地选择多个图像中的矩形区域并将其替换为全零。如果类似的概念应用于要素地图,分别是DropOut [71],DropConnect [80]和DropBlock [16] 方法。此外,一些研究人员提出了一起使用多个图像执行数据的方法增强。例如,MixUp [92]使用两个图像以不同的系数比率进行乘法和叠加,然后使用这些叠加比率来调整标签。至于CutMix [91],它会覆盖裁切后的图像到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上面提到的方法,GAN [15]的样式传递也是用于数据扩充,这种用法可以有效地减少CNN学会的纹理偏差。
与上面提出的各种方法不同,其他一些免费赠品方法专门用于解决问题在于数据集中的语义分布可能有偏见。在处理语义分布偏差问题时,一个非常重要的问题是存在一个问题类之间数据不平衡的问题,这个问题通常通过硬性否定示例挖掘来解决[72]或两阶段目标检测器中的在线硬示例挖掘[67]。但是示例挖掘方法不适用于一级目标检测器,因为这种检测器属于密集预测架构。因此林等。 [45]建议聚焦损失来处理问题各个类别之间存在的数据不平衡问题。另一个非常重要的问题是很难表达关联度之间的关系一站式的硬表示形式。执行标记时经常使用此表示方案。在[73]中提出的标签平滑是将硬标签转换为软标签以进行训练,这可以使模型更强大的。为了获得更好的软标签,Islam等。 [33]在设计中引入了知识蒸馏的概念标签优化网络。
最后一袋免费赠品是边界框(BBox)回归。传统物品检测器通常使用均方误差(MSE)直接对中心点坐标进行回归BBox的高度和宽度,即{xcenter,ycenter,w,h}或左上点和右下点,即{xtop lef t,ytop lef t,xbottom right,ybottom right}。如对于基于锚点的方法,它是估计相应的偏移量,例如{xcenter_offset,ycenter_offset,woffset, hoffset}和{xtop_left_offset,ytop_left_offset,xbottom_right_offset, ybottom_right_offset}。但是,要直接估算出每个点的坐标值BBox会将这些点视为自变量,但是实际上并不考虑对象本身的完整性。为了更好地解决这个问题,一些研究人员最近提出的IoU损失[90],预测的BBox面积和地面实况BBox面积已考虑在内。 IoU损失计算过程将触发通过使用地面真相执行IoU,然后将BBox的四个坐标点进行计算,生成的结果变成一个完整的代码。因为IoU是规模不变表示法,可以解决当传统方法会计算{x,y,w,
h},损失会随着规模的增加而增加。最近有一些研究人员一直在改善IoU损失。例如,GioU损失[65]包括形状和方向除覆盖区域外的对象。他们提议找到可以同时覆盖的最小区域BBox预测的BBox和地面真相BBox,并使用此BBox作为分母来替换最初在IoU损耗中使用的分母。至于DIoU损失[99],它另外考虑对象中心的距离,CIoU损失[99],另一方面同时考虑了重叠区域,中心点之间的距离以及长宽比。 CIoU可以实现更好的收敛速度和BBox回归问题的准确性。
对于那些插件模块和后处理方法只会少量增加推理成本但是可以大大提高物体检测的准确性,我们称它们为“特价袋”。 一般来说,这些插件模块用于增强某些属性一种模型,例如扩大接受域,引入注意力机制或增强特征集成能力等,而后处理是一种筛选方法模型预测结果。
可以用来增强感受野的常用模块是SPP [25],ASPP [5]和RFB [47]。SPP模块起源于空间金字塔匹配(SPM)[39],而SPM的原始方法是将特征图分成几个d×d个相等的块,其中d可以是{1,2,3,…},从而形成空间金字塔,然后提取词袋特征。 SPP将SPM集成到CNN中并使用最大池操作而不是词袋操作。由于He等人提出的SPP模块。 [25]将输出一维特征向量,这是不可行的在完全卷积网络(FCN)中应用。因此在YOLOv3的设计[63],Redmon和Farhadi有所改进SPP模块与最大池输出的串联内核大小为k×k,其中k = {1、5、9、13},步幅为
等于1。在这种设计下,较大的k×k最大池有效地增加了主干的接收场特征。添加改进版的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%。
物体检测中经常使用的注意力模块主要分为通道注意和点注意,这两种注意模型的代表是挤压和激发(SE)[29]和空间注意模块(SAM)[ 85]。 虽然SE模块可以将ImageNet图像分类任务中ResNet50的功能提高到1%top-1精度。仅将计算工作量增加2%的成本,但是在GPU上通常会增加推理时间大约10%,因此更适合在移动设备中使用设备。 但是对于SAM,它只需要支付0.1%的额外费用,就可以在ImageNet图像分类任务上将ResNet50-SE的top-1准确性提高0.5%。 最好的,它根本不影响GPU上的推理速度。
在功能集成方面,早期的实践是使用跳过连接[51]或超列[22],以将低级物理特征集成到高级语义特征。 以来
FPN等多尺度预测方法已成为流行的许多轻量级模块,它们集成了已经提出了特征金字塔。 这个的模块排序包括SFAM [98],ASFF [48]和BiFPN [77]。 的SFAM的主要思想是使用SE模块对多尺度级联特征执行通道级重加权
地图。 对于ASFF,它使用softmax作为逐点级别的权重,然后添加不同比例的特征图。在BiFPN中,多输入加权残余连接为建议执行按比例的级别重新加权,然后添加不同比例的要素地图。
在深度学习的研究中,有些人把他们的专注于寻找良好的激活功能。一个好的激活功能可以使梯度更有效
传播,同时也不会造成额外的计算成本。 Nair和Hinton [56]在2010年提出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,可以使用筛选那些不好地预测同一对象的BBox,并仅保留具有较高响应度的候选BBox。 NMS尝试改进的方式与优化目标函数的方法。 NMS提出的原始方法没有考虑上下文信息,因此Girshick等。 [19]添加了分类R-CNN中的置信度得分作为参考,并根据置信度得分顺序,进行贪婪的NMS从高分到低分的顺序。对于软网管[1],它考虑了一个问题,一个物体的遮挡可能导致贪婪NMS的置信度得分下降IoU得分。 DIoU NMS [99]开发人员的方法思维是在软的基础上将中心点距离的信息添加到BBox筛选过程中NMS。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像特征,因此在随后的无锚定方法开发中不再需要后处理。
基本目标是神经网络的快速运行,生产系统和并行计算的优化,而不是低计算量理论指标(BFLOP)。 我们提出两种实时选择神经网络:
我们的目标是在输入网络分辨率,卷积层数,参数号(过滤器大小2 过滤器通道/组),以及层输出(滤波器)的数量。 例如,我们的大量研究表明CSPResNext50是与CSPDarknet53相比,其性能要好得多ILSVRC2012(ImageNet)上的对象分类数据集[10]。 但是,相反,CSPDarknet53是与在MS COCO数据集上检测对象相比,CSPResNext50更好。
下一个目标是从不同的骨干水平针对不同的骨干选择额外的区块以增加感受野和参数聚集的最佳方法检测器级别:例如 FPN,PAN,ASFF,BiFPN。最适合分类的参考模型是并非总是对探测器最佳。 与分类器相比,检测器需要满足以下条件:
假设地说,我们可以假设一个模型具有较大的接收场大小(卷积层3×3)和大量参数应被选作主干。表1显示了CSPResNeXt50,CSPDarknet53和EfficientNet B3的详细信息。 CSPResNext50仅包含16个卷积层3×3、25×425接收场和20.6M个参数,而CSPDarknet53包含29个卷积层3×3、725×725接收场和27.6M个参数。这种理论上的证明,连同我们的大量实验表明,CSPDarknet53神经网络是两者作为骨干的最佳模型用于探测器。
不同大小的接收场的影响是总结如下:
我们将SPP块添加到CSPDarknet53上,因为它大大增加了感受力,将最重要的上下文特征,几乎不会降低网络运行速度。我们使用PANet作为来自不同主干级别,针对不同检测器级别的参数聚合方法,而不是FPN在YOLOv3中使用。
最后,我们选择CSPDarknet53主干,SPP附加模块,PANet路径聚合通道和YOLOv3(基于锚)作为YOLOv4的体系结构。
将来,我们计划大幅扩展内容检测器的赠品袋(BoF),理论上可以解决一些问题并增加检测器准确性,并以实验方式依次检查每个功能的影响。我们不使用跨GPU批量标准化(CGBN或SyncBN)或昂贵的专用设备。这使任何人都可以在以下方面重现我们的最新成果常规图形处理器,例如GTX 1080Ti或RTX2080Ti。
为了改进目标检测训练,CNN通常使用以下方法:
• Activations: ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish
• Bounding box regression loss: MSE, IoU, GIoU,CIoU, DIoU
• Data augmentation: CutOut, MixUp, CutMix
• Regularization method: DropOut, DropPath [36], Spatial DropOut [79], or DropBlock
• Normalization of the network activations by their mean and variance: Batch Normalization (BN) [32],
Cross-GPU Batch Normalization (CGBN or SyncBN) [93], Filter Response Normalization (FRN) [70], or
Cross-Iteration Batch Normalization (CBN) [89]
•Skip-connections:残余连接,加权残余连接,多输入加权残余连接或跨阶段部分连接(CSP)
至于训练激活功能,由于PReLU和SELU较难训练,而ReLU6特别适合为量化网络而设计,因此我们删除了
候选者列表中的上述激活功能。在里面reqularization方法,发布DropBlock的人们将他们的方法与其他方法进行了比较。细节,其正则化方法赢得了很多。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于归一化的选择方法,因为我们专注于仅使用一个GPU,不考虑syncBN。
为了使设计的检测器更适合在单个GPU上进行培训后,我们进行了其他设计和改进,如下所示:
•我们引入了一种新的数据增强 Mosaic, and Self-Adversarial Training (SAT)
•我们在应用时选择最佳超参数遗传算法
•我们修改了一些现有方法来进行设计适用于有效的培训和检测-修改SAM,修改的PAN和交叉微型批处理规范化(CmBN)
马赛克代表了一种新的数据增强方法混合4个训练图像。因此,混合了4个不同的上下文,而CutMix仅混合了2个输入图像。这样可以检测正常上下文之外的对象。在此外,批量归一化计算激活统计信息每层上有4张不同的图像。这明显减少了对大批量生产的需求。自我专业训练(SAT)也代表了新的可在2个前进操作中运行的数据增强技术落后阶段。在第一阶段,神经网络发生变化原始图像而不是网络权重。在这神经网络对其自身执行对抗攻击的方式,改变原始图像以产生欺骗图像上没有所需的对象。在第二阶段,训练神经网络以检测此修改后的对象以正常方式显示图像。
CmBN代表CBN修改版本,如图所示在图4中,定义为交叉微型批处理规范化(CmBN)。 仅收集迷你批次之间的统计信息在一个批次内。我们将SAM从空间注意改为点注意,并将PAN的快捷连接替换为串联,分别如图5和图6所示。
在本节中,我们将详细介绍YOLOv4
YOLOv4 consists of:
• Backbone: CSPDarknet53 [81]
• Neck: SPP [25], PAN [49]
• Head: YOLOv3 [63]
YOLO v4 uses:
• Bag of Freebies (BoF) for backbone: CutMix and Mosaic data augmentation, DropBlock regularization,
Class label smoothing
• Bag of Specials (BoS) for backbone: Mish activation, Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC)
• Bag of Freebies (BoF) for detector: 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
• Bag of Specials (BoS) for detector: Mish activation, SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS
我们在ImageNet上测试了不同训练改进技术对分类器准确性的影响(ILSVRC 2012 val)数据集,然后对
MS COCO(test-dev 2017)数据集上的检测器。
在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8,000,000; 批量大小和最小批量大小为128
和32,分别; 多项式衰减学习率采用初始学习率为0.1的调度策略;预热步骤为1000; 动量和权重衰减分别设置为0.9和0.005。 我们所有的BoS实验使用与默认相同的超参数设置,并且在BoF实验中,我们添加了一个额外的
50%的培训步骤。 在BoF实验中,我们验证MixUp,CutMix,Mosaic,模糊数据增强和标签平滑正则化方法。 在BoS实验中,我们比较了LReLU,Swish和Mish的影响激活功能。 所有实验均使用1080进行训练Ti或2080 Ti GPU。
在MS COCO对象检测实验中,默认的超参数如下:训练步骤为500,500;逐步衰减学习率调度策略是采用初始学习率0.01并乘以在40万步和45万步处分别为0.1;动量和权重衰减分别设置为0.9和0.0005。所有架构都使用单个GPU以批处理大小执行多尺度训练最小批量大小为8或4时为64,取决于架构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验均使用默认设置。遗传的该算法使用YOLOv3-SPP训练GIoU损失和在300个纪元内搜索最小5k集。我们采用搜索学习率0.00261,动量0.949,IoU阈值分配地面实况0.213和损耗归一化器0.07遗传算法实验。我们已经验证了BoF数量,包括消除网格敏感性,镶嵌数据增强,IoU阈值,遗传算法,分类标签平滑,交叉小批量标准化,自我对抗训练,余弦退火调度程序,动态迷你批次大小,DropBlock,优化锚点,不同一种IoU损失。我们还进行了各种实验BoS,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO [8]。对于所有实验,我们仅使用一个GPU进行培训,因此可以优化诸如syncBN之类的技术不使用多个GPU。
首先,我们研究不同功能对分类器培训; 具体来说,是类别标签平滑的影响,不同数据扩充的影响技术,双边模糊,MixUp,CutMix和Mosaic,如图7所示,以及不同激活的影响,例如Leaky-ReLU(默认情况下),Swish和Mish。
在我们的实验中,如表2所示,通过引入功能可以提高分类器的准确性,例如:CutMix和Mosaic数据扩充,类标签平滑和Mish激活。 因此,我们用于分类器训练的BoFbackbone(免费赠品袋)包括以下内容:CutMix和Mosaic数据扩充和类标签平滑。 此外,我们使用Mish激活作为补充选项,如表2和表所示3。
进一步的研究涉及不同的免费赠品袋(BoF-detector)对探测器训练精度的影响,如表4所示。我们大大扩展了BoF列表通过研究增加检测器的不同功能不影响FPS的准确性:
• S: Eliminate grid sensitivity the equation bx = σ(tx)+cx, by = σ(ty)+cy, where cx and cy are always whole
numbers, is used in YOLOv3 for evaluating the object coordinates, therefore, extremely high tx absolute
values are required for the bx value approaching the cx or cx + 1 values. We solve this problem through
multiplying the sigmoid by a factor exceeding 1.0, so eliminating the effect of grid on which the object is
undetectable.
• M: Mosaic data augmentation - using the 4-image mosaic during training instead of single image
• IT: IoU threshold - using multiple anchors for a single ground truth IoU (truth, anchor) > IoU threshold
• GA: Genetic algorithms - using genetic algorithms for selecting the optimal hyperparameters during network training on the first 10% of time periods
• LS: Class label smoothing - using class label smoothing for sigmoid activation
• CBN: CmBN - using Cross mini-Batch Normalization for collecting statistics inside the entire batch, instead
of collecting statistics inside a single mini-batch
• CA: Cosine annealing scheduler - altering the learning rate during sinusoid training
• DM: Dynamic mini-batch size - automatic increase of mini-batch size during small resolution training by using Random training shapes
• OA: Optimized Anchors - using the optimized anchors for training with the 512x512 network resolution
• GIoU, CIoU, DIoU, MSE - using different loss algorithms for bounded box regression
进一步的研究涉及不同的Bagof-Specials(BoS-探测器)对探测器训练精度的影响,包括PAN,RFB,SAM,高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,检测器使用SPP,PAN和SAM时可获得最佳性能。
进一步,我们研究了不同骨干的影响探测器精度的模型,如表6所示。请注意,就检测器而言,具有最佳分类精度的模型并不总是最佳的准确性。
首先,尽管与其他特征训练的CSPResNeXt50模型相比,分类精度更高到CSPDarknet53模型,CSPDarknet53模型显示在物体检测方面具有更高的准确性。
其次,将BoF和Mish用于CSPResNeXt50分类器训练可提高分类精度,但是这些预训练权重在检测器训练中的进一步应用降低了检测器精度。但是,使用BoF和Mish进行CSPDarknet53分类器训练提高分类器和检测器的精度使用此分类器的预训练权重。互联网结果是骨干CSPDarknet53更适合检测器比CSPResNeXt50。
我们观察到CSPDarknet53模型演示了由于提高了检测器精度的能力各种改进。
最后,我们分析使用模型获得的结果训练了不同的小批量大小,结果是如表7所示。根据表7所示的结果,我们
发现在添加BoF和BoS培训策略后,最小批量大小对检测器的性能几乎没有影响。 这个结果表明,引入BoF和BoS,不再需要使用昂贵的用于训练的GPU。 换句话说,任何人都只能使用传统的GPU训练出色的检测器。
与其他最新的物体检测器获得的结果比较如图8所示。YOLOv4位于帕累托最优曲线上,并且就最快和最准确的探测器而言,速度和准确性。由于不同的方法使用不同架构的GPU进行推理时间验证,因此我们使用YOLOv4
在Maxwell,Pascal和Volta常用的GPU上架构,并将其与其他最新技术进行比较方法。 表8列出了使用Maxwell GPU,并且可以是GTX Titan X(Maxwell)或Tesla M40 GPU。 表9列出了帧率比较使用Pascal GPU的结果,可以是Titan X(Pascal),Titan Xp,GTX 1080 Ti或Tesla P100 GPU。 至于表10,列出使用Volta的帧率比较结果
GPU,可以是Titan Volta或Tesla V100 GPU。