论文链接:https://arxiv.org/abs/2004.10934
YOLOv4: Optimal Speed and Accuracy of Object Detection
Abstract
有大量的特性都自称可以提升卷积神经网络(CNN)的精度。仍然需要在大数据集上实际测试这些特性的组合并对结果进行理论证明。一些特性只能应用在特定模型上,或针对特定问题,或只应用与小尺度的数据集;另一些特征,像BN和残差连接可以应用到大部分的模型、任务和数据集上。我们假设通用的特征包括加权残差链接(WRC),跨阶段的部分链接(CSP),交叉小批量归一化(CmBN),自我对抗训练(SAT)和Mish激活。我们使用的新特性:WRC、CSP、CmBN、SAT、Mish激活、马赛克数据增强、CmBN、DropBlock正则化和CIoU丢失,并将其中一些功能结合起来以实现最好的结果:使用Tesla V100在MS COCO数据集上的AP为43.5%(AP50为65.7%),实时检测速度为65FPS。源代码见:https://github.com/AlexeyAB/darknet。
1. Introduction
目前大部分基于CNN的目标检测器基本上只适用与推荐系统。例如,使用低速高精度模型通过城市的摄像头来搜索空闲停车位,然而车辆碰撞预警则使用快速低精度模型。提升实时目标检测系统的精度不仅可以使他们应用到推荐系统生成提示而且可以用于独立的流程管理和减少人工输入。在普通GPU上部署使用实时目标检测系统可以使他们在可接受的代价前提下大量应用。精度最高的流行神经网络不能够实时运行,并且要用大量的GPU进行大批量的训练。我们通过创建一个在传统GPU上能够达到实时计算的CNN来解决该问题,这样只需要一个普通GPU。
我们做这些事情的主要目的是设计一个在生成系统中运行速度快的检测器,优化并行计算,而不是低计算量理论指标(BFLOP)。我们希望设计出的系统易于训练和使用。例如,任何人使用普通的GPU来训练和测试都能够达到实时、高精度、令人信服的检测结果,就行图1中展示的YOLOv4的结果。
我们的主要贡献总结如下:
- 我们开发出一个高效且强大的目标检测模型。它可以让所有人使用1080Ti或2080Ti型号的GPU来训练一个速度超快且精准的检测器。
- 我们验证了最先进的目标检测方法Bag-of-Freebies和Bag-of-Specials在训练过程中的影响。
- 我们对表现最好一些的方法进行了修改,使他们效率更高更适用于单GPU训练,包括CBN [89], PAN [49], SAM [85]等。
2. Related work
2.1. Object detection models
现在的检测器通常由两部分组成——使用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部分,它通常分为两类,即——一阶段目标检测和两阶段目标检测。最具代表性的两阶段检测是R-CNN[19]系列,包括fast R-CNN [18], faster R-CNN [64], R-FCN [9], Libra R-CNN [58]。同样将两阶段检测修改成不依赖anchor的目标检测器,例如RepPoints [87]。对于一阶段检测器,最具代表性的是YOLO [61, 62, 63], SSD [50], and RetinaNet [45]。在近几年,不依赖anchor的一阶段检测得到了很大发展。该系列的检测器有CenterNet [13], CornerNet [37, 38], FCOS [78]等。近些年目标检测的发展通常是在backbone和head之间插入一些层,这些层通常用来收集不同阶段的特征图。我们称之为目标检测的neck。通常,一个neck网络由一些自下向上和一些自上向下的路径组成。使用该技术的网络包括Feature Pyramid Network (FPN) [44], Path Aggregation Network (PAN) [49], BiFPN [77]和 NAS-FPN [17]。基于上面的网络,一些研究者将重点放在了创建新的backbone(DetNet [43],DetNAS [7])或者一个新的完整的目标检测模型(SpineNet [12], HitDetector [20])。
总之,一个普通的目标检测器由一些部分组成:
2.2. Bag of freebies
通常,传统的目标检测器是离线训练的。因此,研究者通常喜欢利用该优势创造出更好的训练方法,可以使检测器在不增加推理成本的同时能够获得更高的精度。我们称这种只改变训练策略或只提升训练成本的方法为"bag of freebies"。在目标检测中经常使用并且满足 bag of freebies 定义的是数据增强。数据增强的目的是增加输入图片的多样性,因此通过设计的检测器对不同环境获取的图片有更好的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们肯定有利于目标检测任务。在处理光度畸变时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何畸变,我们添加了随机缩放、裁剪、翻转和旋转。
上面提到的数据增强方法都是像素级的调整,并且保留调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,random erase[100]和CutOut[11]可以随机选择图像中的矩形区域,并填充随机值或零值。至于hide-and-seek[69]和grid mask[6],它们随机或有规律地选择图像中的多个矩形区域,并将它们的值全部替换为零。在特征图上应用的类似方法有DropOut[71]、DropConnect[80]和DropBlock[16]。此外,一些研究人员提出了使用多幅图像进行数据增强的方法。例如,MixUp[92]使用两幅图像以不同的系数比例相乘后叠加在一起,然后根据这些叠加比例调整标签。至于CutMix[91],它是将裁剪后的图像覆盖到另一个图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法外,风格迁移GAN[15]也被用于数据增强,这种用法可以有效地减少CNN学习到的纹理细节的偏差。
与上提到的各种方法不同,一些其他的"bag of freebies"方法用来解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题中,一个很重要的问题是不同类别数据的数量不平衡,在两阶段目标检测器中该问题通常通过困难负样本挖掘[72]或者在线困难样本挖掘[67]来解决。但是,对于一阶段的目标检测器,样本挖掘方法就不再适用了,因为这种类别的检测器属于全连接检测架构。因此Lin等人[45]提出了focal loss来处理在多个类别见存在的数量不均衡的问题。另一个非常重要的问题是,很难表示出不同类别在one-hot硬表示的关联度的关系。这种表示方式通常在标记时使用。在[73]中提出的标签平滑用来将训练的硬标签转化为软标签,这样使得模型的鲁棒性更好。为了获取更好的软标签,Islam等人[33]引入了知识蒸馏的概念来设计标签细化网络。
硬标签:在机器学习中多指以0与1为值的训练数据的标签编码,例如one-hot编码。
软标签:使用概率的标签编码,多用于标签平滑,可以一定程度上抑制过拟合,例如:softmax
bag of freebies中最后一个是Bounding Box(BBox)回归的目标函数。传统的目标检测通常使用Mean Square Error(均方误差:MSE)来直接对BBox的中心点坐标、宽和高进行回归,即:{xcenter, ycenter, w, h}或者左上角和右下角的点坐标,即:{xtop_left , ytop_left , xbottom_right, ybottom_right}。对于基于anchor的方法,它需要估计对应的偏移,例如{xcenter_off_set, ycenter_offset, woffset, hoffset}和{xtop_left_ offset, ytop_left_offset, xbottom_right_offset, ybottom_right_offset}。但是,直接估计BBox每个点的对应坐标需要将这些点作为单独的变量来处理,但是实际上不会考虑物体本身的完整性。为了更好的处理该问题,一些研究者最近提出了IoU loss[90],它将BBox的预测区域和BBox的真值区域的覆盖范围考虑进来了。IoU loss的计算过程中通过计算与真值框的IoU然后将生成的结果连接成一个完成的编码,从而触发BBox四个坐标点的计算。因为IoU具有尺度不变性,它可以解决当传统方式计算{x, y, w, h}的L1或L2 loss时的问题——loss会跟着尺度的变大而变大。最近,一些研究者持续的发展IoU loss。例如,GIoU loss[65]除了覆盖区域外还包含了形状和方向。他们像找到一个能够覆盖预测的BBox和真值BBox的最小BBox,并使用该BBox作为分母,以取代IoU损失中最初使用的分母。至于DIoU loss[99],它还考虑了对象中心的距离,而CIoU loss[99],它同时考虑了重叠面积、中心点之间的距离和纵横比。CIoU可以在BBox回归问题上获得更好的收敛速度和精度。
2.3. Bag of specials
对于那些只增加很小的推理开销的情况下可以显著提升目标检测的精度的插件式模块和后处理方法,我们称之为"bag of specials"。一般来说,这些插件式模块用来增强模型的特定属性,例如扩大感受野,引入注意力机制,或者强化特征整合能力等,后处理是筛选模型预测结果的方法。
用来增强感受野的的常用模块有SPP[25], ASPP[5], RFB[47]。SPP模块是从Spatial Pyramid Matching (SPM) [39]中提取出来的,SPMs的原始方法是将特征图切成多个dxd的大小相同的块,这里d可以为{1, 2, 3, …},因此整合空间金字塔,然后提取特征。SPP是将SPM整合到了CNN中,使用最大池化运算来替代了bag-of-word。由于SPP——是He等人[25]提出的,会输出一维的特征向量,并不适用与全连接网络(FCN)。因此在YOLOv3[63]的设计中Redmon和Farhadi改进了SPP,使之成为kernel为kxk的池化输出结果的组合,k={1, 5, 9, 13},stride=1。使用这种设计后,一个相当大的kxk的池化可以有效提升骨干网特征的感受野。在使用了改进型的SPP模块后,YOLOv3-608在MS COCO的目标检测任务上的AP50提升了2.7%,而只增加了额外的0.5%的算力。ASPP[5]和改进型的APP在运算上的主要区别是原始的kxk卷积核大小,最大池化的步长等于1几个核大小为3x3,在空洞卷积运算中,膨胀率为k,步长为1。RBF模型使用了数个核为k x k的空洞卷积,膨胀率为k,步长为1,RFB [47]只消耗了额外7%的推理时间使SSD在MS COCO上的AP50提升了5.7%。
目标检测中常用的注意力模块主要分为通道注意力和点注意力,两个注意力模块的代码分别为Squeeze-and-Excitation (SE) [29] 和 Spatial Attention Module (SAM) [85]。虽然SE模型可以将ResNet50在只额外消耗2%算力的前提下使其在ImageNet图像分类任务中的Top-1精度提升了1%,但是在GPU上它却多消耗了10%的推理时间,因此它更适用于移动设备。但是对于SAM,它只需要消耗额外0.1%的算力就可以使ResNet50-SE在ImageNet图像分类任务上的Top-1精度提升0.5%。最重要的是它不会影响在GPU上的推理速度。
在特征整合方面,早期的实践是通过skip connection[51]或hyper column[22]来将低级别的物理特征集成到高级别的语义特征。当FPN等多尺度预测模型流行起来后,人们提出了许多集成不同特征金字塔的轻量级模块。该系列模型包括SFAM [98], ASFF [48] 和 BiFPN [77]。SFAM的主要思想是在组合到一起的多尺度特征图上使用SE模型来执行通道级别的re-weighting。至于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的梯度是0的问题。至于ReLU6 和 hard-Swish是为量化网络专门设计的。至于 ReLU6 和 hard-Swish,它们是专门为量化网络设计的。为了自归一化神经网络,提出了 SELU 激活函数来满足目标。需要注意的一件事是 Swish 和 Mish 都是连续可微的激活函数。
基于深度学习的物体检测常用的后处理方法是NMS,它用来过滤那些对同一个物体预测不好的BBox,只保留最好的BBox作为候选。NMS 尝试改进的方式与优化目标函数的方法一致。NMS提出的原始方法并没有考虑上下文信息,因此Girshick等人[19]在R-CNN中添加了分类的置信度作为参考,根据置信分数的顺序,贪婪的NMS按高得分低分数的顺序执行。对于soft NMS[1],它考虑了对象的遮挡可能导致其在使用IoU的贪婪NMS中的置信度分数降低的问题。DIoU NMS [99] 开发者的思路是在软 NMS 的基础上,在 BBox 筛选过程中加入中心点距离信息。值得一提的是,由于上述后处理方法都没有直接参考捕获的图像特征,因此在后续开发不依赖anchor的方法时不再需要进行后处理。
3.Methodology(方法论)
生产系统和并行计算优化的基本目标是神经网络快速的计算速度,而不是低计算量理论指标(BFLOP)。 我们提供了两种实时神经网络选项:
**GPU ** 在卷积层中我们使用了小分组(1-8):CSPResNeXt50 / CSPDarkne