论文小结:在 yolov4的网络结构设计上,强调通过并行运算提高速度,而不是单纯的优化参数,减小参数量FLOPs,减少卷积层、参数数量和图像分辨率,在提高速度的同时降低了检测精度,这种做法是不恰当的,yolov4的并行运算可以为我们在改进网络上提供一定的思路。作者选择使用29层卷积层的CSPDarknet53上添加了SPP块,通过跨尺度连接上下文信息,增加输入层的输入量,扩大感受野/分辨率,以提供更好的检测细节。而且作者之后将继续t拓展这种bag of free(BoF)策略。整个网络作者是使用单个GPU运行,没有选择在多个GPU上同时训练。
文章也强调了BoF\BoS,从表7的结果可以看出,加入BoF和BoS训练策略后,小批量的训练对检测器的性能几乎没有影响。实验结果表明,在引入BoF和BoS之后,不再需要使用昂贵的GPU进行训练。从图8中也可以看出yolov4远远优于其他目标检测器。
yolov4较为全面地比较了不同的网络结构设计对于目标分类、目标检测中训练速度和检测精度的影响,包括不同的数据增强、骨干网络、预训练权重、Bag-of- Freebies (BoF-detector,包括CutMix和
镶嵌数据扩充,DropBlock正则化,类标签平滑)、用于骨干网络的Bag of Specials【BoS 包括mish激活函数,跨阶段部分连接(CSP),多输入加权残余连接(MiWRC)】
文章翻译有的不是很正确,请谅解。
有大量的特征被认为可以提高卷积神经网络(CNN)的精度。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。某些功能只在某些模型上运行,某些问题只在某些模型上运行,或只在小规模数据集上运行;而某些功能(如批处理规范化和剩余连接)适用于大多数模型、任务和数据集。我们假设这些通用特征包括加权剩余连接(WRC)、跨阶段部分连接(CSP)、跨小批量规范化(CmBN)、自对抗训练(SAT)和Mish激活。我们使用新功能:WRC、CSP、CmBN、SAT、误激活、马赛克数据增强、CmBN、DropBlock正则化和CIoU丢失,并将其中一些功能结合起来,以达到最新的结果:43.5%的AP(65.7%的AP50)用于MS COCO数据集,在Tesla V100上以65 FPS的实时速度。源代码位于https://github.com/AlexeyAB/darknet
图1:所提议的YOLOv4与其他最先进的对象探测器的比较。YOLOv4的运行速度比EfficientDet快两倍,性能也差不多。分别提高YOLOv3的AP和FPS 10%和12%。
大多数基于CNN的目标检测器大多只适用于推荐系统。例如,通过城市摄像机搜索免费停车位是由低精度模型执行的,而汽车碰撞警告则与高精度模型相关。通过提高实时目标检测的准确性,不仅可以将其用于提示生成推荐系统,还可以用于独立的过程管理和减少人工输入。在传统图形处理单元(GPU)上进行实时目标检测,可以以合理的价格大量使用。最精确的现代神经网络不具备实时性,需要大量的gpu进行小批量的训练。我们通过创建一个CNN来解决这些问题,CNN在传统GPU上实时运行,而训练只需要一个传统GPU。
这项工作的主要目标是在生产系统中设计一个快速运行的目标探测器,并对并行计算进行优化,而不是设计一个低计算量的理论指示器(BFLOP)。我们希望设计的对象可以很容易地训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以获得实时、高质量、令人信服的对象检测结果,如图1所示的YOLOv4结果。我们的贡献总结如下:
1.我们开发了一个高效、强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU来训练一个超级快速和准确的目标探测器。
2.我们验证了在检测器训练过程中,最先进的袋- offreebies和袋- specials对象检测方法的影响。
3.我们修改了最先进的方法,使其更有效,更适合于单GPU训练,包括CBN[89]、PAN[49]、SAM[85]等。
图2:目标探测器
2.1 目标检测模型
现代检测器通常由两部分组成,一个是在ImageNet上预先训练的骨架,另一个是用来预测对象的类别和边界框的头部。对于在GPU平台上运行的那些检测器,其主干可能是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]等。近年来开发的对象检测器通常在骨架和头部之间插入一些层,这些层通常用于收集特征图。 从不同的阶段。 我们可以称其为对象检测器的颈部。 通常,颈部由几个自下而上的路径和几个自上而下的路径组成。 配备此机制的网络包括功能金字塔网络(FPN)[44],路径聚合网络(PAN)[49],BiFPN [77]和NAS-FPN [17]。除上述模型外,一些研究人员将重点放在直接构建用于对象检测的新主干(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDetector [20])上。
综上所述,普通的物体检测器由以下几部分组成:
2.2. Bag of freebies
通常,传统的目标探测器是离线训练的。因此,研究者总是希望利用这一优势,开发出更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们把这些只改变训练策略或只增加训练成本的方法称为“免费包”,目标检测方法通常采用的满足免费包定义的方法是数据增强。数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们无疑有利于目标检测任务。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何失真,我们添加了随机缩放、裁剪、翻转和旋转。
上述数据增强方法均为逐像素调整,并且保留调整区域中的所有原始像素信息。此外,一些从事数据增强的研究者把重点放在模拟物体遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,random erase[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充0的随机值或互补值。至于捉迷藏(69)和网格掩码(6),它们随机或均匀地选择图像中的多个矩形区域,并将它们替换为全部零。
与以上提出的各种方法不同的是,其他一些免费包方法致力于解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题,这一问题通常通过两级对象检测器中的硬负示例挖掘[72]或在线硬示例挖掘[67]来解决。
但是,由于单级目标检测器属于密集预测结构,因此实例挖掘方法不适用于单级目标检测器。因此,Lin等人。[45]提出了焦点损失的概念,以解决不同类别之间存在的数据不平衡问题。另一个非常重要的问题是,很难用一个热硬表示来表达不同类别之间关联度的关系。此表示方案通常在执行标记时使用。
文[73]提出的标签平滑是将硬标签转化为软标签进行训练,使模型更加健壮。为了获得更好的软标签,Islam等人。[33]引入知识蒸馏的概念,设计了标签细化网络。
最后一袋免费赠品是边界框(BBox)回归的目标函数。 传统的对象检测器通常使用均方误差(MSE)直接对BBox的中心点坐标以及高度和宽度执行回归,即fxcenter,ycenter,w,hg或左上点和右下点, 即,fxtop左,ytop左,xbottom右,ybottom右g。 对于基于锚的方法,将估计相应的偏移量,例如fxcenter偏移量,ycenter偏移量,woffset,hoffsetg和fxtop左偏移量,ytop左偏移量,xbottom右偏移量,ybottom右偏移量g。 但是,直接估计BBox的每个点的坐标值是将这些点视为独立变量,但实际上并未考虑对象本身的完整性。 为了使这个问题得到更好的处理,一些研究者最近提出了IoU损失[90],该方法考虑了预测的BBox区域和地面真实BBox区域的覆盖范围。 IoU损失计算过程将通过使用基本事实执行IoU,然后将生成的结果连接到整个代码中,触发BBox的四个坐标点的计算。 因为IoU是尺度不变表示,所以可以解决传统方法计算fx,y,w,hg的l1或l2损失时,损失会随着尺度增加的问题。 最近,一些研究人员继续改善IoU损失。 例如,GioU损失[65]除了覆盖区域外还包括对象的形状和方向。 他们建议找到可以同时覆盖预测的BBox和地面真值BBox的最小面积BBox,并使用该BBox作为分母来代替最初用于IoU损失的分母。 至于DIoU损失[99],它还考虑了对象中心的距离,而CIoU损失[99]同时考虑了重叠区域,中心点之间的距离和纵横比。 CIoU可以在BBox回归问题上实现更好的收敛速度和准确性。
2.3. Bag of specials
对于那些仅增加少量推理成本但可以显着提高对象检测准确性的插件模块和后处理方法,我们将其称为“特价袋”。 一般而言,这些插件模块用于增强模型中的某些属性,例如扩大接受域,引入注意力机制或增强特征集成能力等,而后处理是用于筛选模型预测结果的方法。
可以用来增强感受野的常用模块是SPP [25],ASPP [5]和RFB [47]。 SPP模块起源于空间金字塔匹配(SPM)[39],而SPM的原始方法是将特征图分割为几个d d个相等的块,其中d可以为f1。 2; 3; ::: g,从而形成空间金字塔,然后提取词袋特征。 SPP将SPM集成到CNN中,并使用最大池操作而不是单词袋操作。由于He等人提出的SPP模块。 [25]将输出一维特征向量,在全卷积网络(FCN)中应用是不可行的。 因此,在YOLOv3的设计中[63],Redmon和Farhadi将SPP模块改进为内核大小为k k的最大池输出的级联,其中k = f1。 5; 9; 13g,步幅等于1。在这种设计下,相对较大的k k maxpooling有效地增加了主干特征的接收场。 在添加了改进版本的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],它考虑到一个问题,即物体的遮挡可能会导致带有IoU分数的贪婪的网络管理系统的置信度得分下降。 DIoU NMS [99]开发人员的思维方式是在软NMS的基础上将中心点距离的信息添加到BBox筛选过程中。 值得一提的是,由于上述后处理方法均未直接涉及捕获的图像特征,因此在随后的无锚定方法开发中不再需要后处理。
表1:用于图像分类的神经网络参数。
基本目标是在生产系统中 使用神经网络以更快的速度运行,并优化并行计算,而不是使用低计算量理论指标(BFLOP)。 我们提供了实时神经网络的两种选择:
马赛克表示一种新的数据增强方法,该方法混合了4个训练图像。 因此,混合了4个不同的上下文,而CutMix仅混合了2个输入图像。 这样可以检测正常上下文之外的对象。 此外,批量归一化从每层上的4张不同图像计算激活统计信息。 这大大减少了对大批量生产的需求。
自对抗训练(SAT)也代表了一种新的数据增强技术,它在两个前向后向阶段运行。 在第一阶段,神经网络改变原始图像而不是网络权值。 以这种方式,神经网络对其自身执行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗。 在第二阶段,训练神经网络,以正常的方式在修改后的图像上检测目标。
图4:交叉微型批处理规范化。
CMBN表示CBN修改版本,如图4所示,定义为交叉小批量规范化(Cross mini-Batch Normalization,CMBN)。 这仅在单个批次内的小批次之间收集统计信息。
图5:修改后的SAM。 图6:修改后的PAN。
我们将SAM从空间关注修改为点关注,并将PAN的快捷连接替换为串联,分别如图5和图6所示。
3.4. YOLOv4
在本节中,我们将详细介绍YOLOv4的细节。
YOLOv4包括:
主干:CSPDarknet53[81]
颈部:SPP[25],PAN[49]
头部:YOLOv3[63]
YOLO v4使用:
主干网免费包(BoF):CutMix和Mosaic数据增强,DropBlock正则化,类标签平滑主干网专用包(BoS):误激活,跨阶段部分连接(CSP),多输入加权剩余连接(MiWRC)
检测器免费包(BoF):CIoU丢失,CmBN,DropBlock正则化、马赛克数据增强、自对抗训练、消除网格敏感度、使用多个锚来实现单一地面真理、余弦退火调度器[52]、最优超参数、检测器的随机训练形状
特殊包(BoS):误激活、SPP块、SAM块、泛路径聚合块,DIoU-NMS
在ImageNet(ILSVRC 2012 val)数据集上测试了不同训练改进技术对分类器精度的影响,然后在MS-COCO(test dev 2017)数据集上测试了检测器的精度。
4.1. Experimental setup
在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;训练步骤是500,500。 采用步阶衰减学习率调度策略,初始学习率为0.01,并分别在400,000步和450,000步处乘以系数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,包括消除网格敏感度,镶嵌数据增强,IoU阈值,遗传算法,类标签平滑,交叉小批量标准化,自对抗训练,余弦退火调度程序,动态小批量大小,DropBlock,优化 锚,不同类型的IoU损失。 我们还对各种BoS进行了实验,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO [8]。 对于所有实验,我们仅使用一个GPU进行训练,因此未使用可优化多个GPU的诸如syncBN之类的技术。
4.2 不同功能对分类器训练的影响
首先,我们研究不同特征对分类器训练的影响; 具体来说,如标签7所示,类别标签平滑化的影响,不同数据增强技术的影响,双边模糊,MixUp,CutMix和Mosaic的影响,以及Leaky-ReLU(默认情况下),Swish等不同激活的影响 和Mish。
图7:数据增强的各种方法。
在我们的实验中,如表2所示,通过引入以下功能提高了分类器的准确性:CutMix和Mosaic数据增强,类标签平滑和Mish激活。 因此,我们用于分类器训练的BoFbackbone(免费赠品袋)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。 此外,我们使用Mish激活作为补充选项,如表2和表3所示。
表2:BoF和Mish对CSPResNeXt-50分类器准确性的影响。
表3:BoF和Mish对CSPDarknet-53分类器准确性的影响。
4.3 不同功能对探测器训练的影响
进一步的研究涉及到不同的免费赠礼袋(BoF-detector)对探测器训练精度的影响,如表4所示。我们通过研究在不影响FPS的情况下提高探测器精度的各种功能来显着扩展BoF列表:
s:消除栅格敏感性YOLOv3中使用公式bx=(Tx)+cx;by=(Ty)+cy(其中cx和cy始终是整数)来计算对象坐标,因此,bx值需要极高的tx绝对值才能接近cx或cx+1值。 我们通过将Sigmoid乘以大于1.0的因子来解决这个问题,从而消除了目标在其上不可检测的网格的影响。
M:马赛克数据增强-在训练期间使用4-图像马赛克而不是单个图像
IT:IOU阈值-针对单个地面真实IOU(真相、锚)使用多个锚>IOU阈值
GA:遗传算法-使用遗传算法在时间周期的前10%的网络训练期间选择最佳超参数
LS:类标签平滑-使用类标签平滑用于S形激活
CBN:CMBN-使用交叉小批次归一化来收集整个批次内的统计信息, 代替收集单个小批量
CA:余弦退火调度器-在正弦训练期间改变学习速率
DM:动态小批量大小-使用随机训练形状在小分辨率训练期间自动增加小批量大小
OA:优化锚点-使用512x512网络分辨率
GIoU,CIoU,DIoU,MSE-使用不同的损失算法进行有界框回归
进一步的研究涉及不同的BagofSpecials(BoS检测器)对检测器训练精度的影响,包括PAN,RFB,SAM,高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,检测器获得最佳性能 使用SPP,PAN和SAM时。
表4:赠品袋的消融研究。 (CSP ResNeXt50-PLANet-APP,512x512)。
4.4 不同骨干和预训练权重对检测器训练的影响
进一步,我们研究了不同主干模型对检测器精度的影响,如表6所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最佳的。
首先,尽管与CSPDarknet53模型相比,经过不同功能训练的CSPResNeXt50模型的分类准确性更高,但是CSPDarknet53模型在对象检测方面显示出更高的准确性。
其次,将BoF和Mish用于CSPResNeXt50分类器训练可提高其分类精度,但是将这些预训练权重进一步用于检测器训练会降低检测器准确性。 但是,对CSPDarknet53分类器训练使用BoF和Mish可以提高分类器和使用该分类器预训练加权的检测器的准确性。 最终结果是,骨干CSPDarknet53CSPResNeXt50更适合于检测器。
我们观察到,由于各种改进,CSPDarknet53模型显示出提高检测器精度的更大能力。
表6:使用不同的分类器预训练权重进行检测器训练(所有其他训练参数在所有模型中均相似)。
4.5 不同小批量的大小对探测器训练的影响
最后,我们分析了使用不同小批量大小训练的模型获得的结果,结果显示在表7中。从表7中显示的结果中,我们发现在添加BoF和BoS训练策略之后,小批量大小 对检测器的性能几乎没有影响。 该结果表明,在引入BoF和BoS之后,不再需要使用昂贵的GPU进行训练。 换句话说,任何人都只能使用常规的GPU来训练出色的检测器。
表7:使用不同的迷你批处理大小进行检测器培训。
图8:不同目标探测器的速度和精度比较。(有些文章只对其中一个gpu的FPS进行了说明:Maxwell/Pascal/Volta)
图8显示了与其他最先进的目标探测器的比较结果。我们的YOLOv4位于Pareto最优曲线上,在速度和精度方面都优于最快和最精确的检测器。
由于不同的方法使用不同体系结构的gpu进行推理时间验证,我们对常用的Maxwell、Pascal和Volta体系结构的gpu进行了YOLOv4运算,并与其他最新方法进行了比较。表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。
表8:MS COCO数据集(testdev)上不同物体检测器的速度和准确性的比较2017)。(此处以FPS 30或更高的实时检测器突出显示。我们将结果与batch = 1而不使用tensorRT。)
表9:MS COCO数据集上不同物体检测器的速度和准确性的比较(test-dev 2017)。(FPS 30或更高的实时检测器在此处突出显示。我们将结果与batch = 1进行比较,而无需使用tensorRT。)
表10:MS COCO数据集上不同物体检测器的速度和准确性的比较(test-dev 2017)。(FPS 30或更高的实时检测器在此处突出显示。我们将结果与batch = 1进行比较,而无需使用tensorRT。)
我们提供一种最先进的探测器,它比所有可用的替代探测器更快(FPS)和更准确(MS COCO AP50:::95和AP50)。描述的探测器可以训练和使用传统的GPU与8-16 GB-VRAM,这使它的广泛使用成为可能。基于锚点的单级检波器的概念已经被证明是可行的。我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的准确性。这些特性可以作为未来研究和开发的最佳实践。
作者希望感谢 Glenn Jocher 关于 Mosaic 数据增强的想法,使用遗传算法选择超参数的想法,以及解决超分辨率 https://github.com/ / yolov3网格敏感性问题的想法。