目标检测经典论文翻译汇总:[翻译汇总]
翻译pdf文件下载:[下载地址]
此版为纯中文版,中英文对照版请稳步:[YOLOv4中英文对照版]
YOLOv4: 目标检测最优速度和精度 |
||
| Alexey Bochkovskiy* alexeyab84@gmail.com |
Chien-Yao Wang* Institute of Information Science Academia Sinica, Taiwan kinyiu@iis.sinica.edu.tw |
Hong-Yuan Mark Liao Institute of Information Science Academia Sinica, Taiwan liao@iis.sinica.edu.tw |
摘要
有大量的技巧可以提高卷积神经网络(CNN)的精度。需要在大数据集下对这种技巧的组合进行实际测试,并需要对结果进行理论论证。某些技巧仅在某些模型上使用和专门针对某些问题,或只针对小规模的数据集;而一些技巧,如批处理归一化、残差连接等,适用于大多数的模型、任务和数据集。我们假设这种通用的技巧包括加权残差连接(Weighted-Residual-Connection,WRC)、跨小型批量连接(Cross-Stage-Partial-connection,CSP)、Cross mini-Batch Normalization(CmBN)、自对抗训练(Self-adversarial-training,SAT)和Mish激活函数。我们在本文中使用这些新的技巧:WRC、CSP、CmBN、SAT,Mish-activation,Mosaic data augmentation、CmBN、DropBlock正则化和CIoU损失,以及这些技巧的组合,在MS COCO数据集达到目前最好的结果:43.5%的AP(65.7% AP50),在Tesla V100上速度达到约65FPS。源码见:https://github.com/AlexeyAB/darknet.
1. 引言
大多数基于CNN的目标检测器基本上都仅适用于推荐系统。例如:通过城市摄像头寻找免费停车位,它由精确的慢速模型完成,而汽车碰撞警报需要由快速、低精度模型完成。改善实时目标检测器的精度,使其能够不仅可以用于提示生成推荐系统,也可以用于独立的流程管理和减少人力投入。传统GPU使得目标检测可以以实惠的价格运行。最准确的现代神经网络不是实时运行的,需要大量的训练的GPU与大的mini bacth size。我们通过创建一个CNN来解决这样的问题,在传统的GPU上进行实时操作,而对于这些训练只需要一个传统的GPU。
这研究的主要目的是设计一个可以在生产环境快速运行的目标检测器,并且进行并行计算优化,而不是较低的计算量理论指标(BFLOP)。我们希望所设计的目标易于训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以实现实时、高质量、有说服力的目标检测结果,YOLOv4的结果如图1所示。现将我们的成果总结如下:
1. 我们构建了一个快速、强大的模型,这使得大家都可以使用1080 Ti或2080 Ti GPU来训练一个超快、准确的目标检测器。
2. 我们验证了最先进的Bag-of-Freebies和Bag-of-Specials方法在目标检测训练期间的影响。
3. 我们修改了最先进的方法,使其变得更高效并且适合单GPU训练,包括CBN[89]、PAN[49]、SAM[85]等。

图1:本文提出的YOLOv4和其他先进的目标检测器比较结果。YOLOv4与EfficientDet相比精度差不多相同,但速度比其快两倍。YOLOv3的AP值和FPS都分别提升了10%和12%。
2. 相关工作
2.1. 目标检测模型
现代目标检测器通常由两部分组成:ImageNet上预训练的backbone和用于预测类别和BBOX的检测器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)的目标检测器。最有代表性的两阶段检测器是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]和RetinaNet[45]。近几年来,也开发了许多不使用anchor的一阶段目标检测器。这类检测器有CenterNet[13]、CornerNet[37,38]、FCOS[78]等。近年来开发检测器往往会在backbone和head之间插入一些层,这些层用于收集不同阶段的特征图。我们可以称它为检测器的neck。通常情况下neck是由几个自下而上或自上而下的通路(paths)组成。具有这种结构的网络包括Feature Pyramid Network (FPN)[44]、Path Aggregation(PAN)[49]、BiFPN[77]和NAS-FPN[17]。除上述模型外,有的研究者注重于直接重新构建backbone(DetNet[43]、DetNAS[7])或重新构建整个模型(SpineNet[12]、HitDetector[20]),并用于目标检测任务。
总结起来,通常目标检测模型由以下一些部分组成:
- 输入:图像、图像块、图像金字塔
- Backbones:VGG16[68]、ResNet-50[26]、SpineNet[12]、EfficientNet-B0/B7[75]、CSPResNeXt50[81]、CSPDarknet53[81]
- Neck:
-
Additional blocks: SPP [25], ASPP [5], RFB[47], SAM [85]
-
Path-aggregation blocks: FPN [44], PAN [49],NAS-FPN [17], Fully-connected FPN, BiFPN[77], ASFF [48], SFAM [98]
- Heads:
-
Dense Prediction (one-stage):RPN [64], SSD [50], YOLO [61], RetinaNet[45] (anchor based) CornerNet [37], CenterNet [13], MatrixNet[60], FCOS [78] (anchor free)
-
Sparse Prediction (two-stage):Faster R-CNN [64], R-FCN [9], Mask R-CNN [23] (anchor based) RepPoints [87] (anchor free)

图2:目标检测器。
2.2. Bag of freebies
通常情况下,传统的目标检测器的训练都是在线下进行的。因此,研究者们总是喜欢利用纯下训练的好处而研究更好的训练方法,使得目标检测器在不增加测试成本的情况下达到更好的精度。我们将这些只需改变训练策略或只增加训练成本的方法称为bag of freebies。目标检测经常采用并符合这个定义的就是数据增强。数据增强的目的是增加输入图像的多样性,从而使设计的目标检测模型对来自不同环境的图片具有较高的鲁棒性。比如photometric distortions和geometric distortions是两种常用的数据增强方法,它们对检测任务肯定是有好处的。使用photometric distortions时,我们调整图像的亮度、对比度、色调、饱和度和噪声。使用geometric distortions时,我们对图像添加随机缩放、裁剪、翻转和旋转。
上面提到的数据增强方法都是逐像素的调整,以及调整区域的所有原始像素信息会被保留下来。此外,一些从事数据增强工作的研究者把重点放在了模拟目标遮挡问题上。他们在图像分类和目标检测取得了好的结果。例如,随机擦除[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方法是专门解决可能有偏差的数据集中语义分布问题。在处理语义分布偏差的问题上,有一个很重要的问题是不同类别之间的数据不平衡,而两阶段检测器处理这个问题通常是通过hard negative example mining [72]或online hard example mining [67]。但example mining method不适用于一阶段的目标检测器,因为这种检测器属于密集预测架构。因此,Linet al.[45]提出了focal loss解决数据不平衡问题。另一个很重要的问题是,one-hot编码很难表达出类与类之间关联程度。这种表示方法(one-hot)通常在打标签的时候使用。在[73]中提出的label smoothing方案是将硬标签转化为软标签进行训练,可以使模型更具有鲁棒性。为了获得更好的软标签,Islam等[33]引入知识蒸馏的概念并用于设计标签细化网络。
最后一个bag of freebies是边界框(BBox)回归的目标函数。检测器通常使用MSE损失函数对BBOX的中心点和宽高进行回归,例如{xcenter, ycenter, w, h},或者是回归预测左上角的点和右下角的点,例如{xtop_left, ytop_left, xbottom_right, ybottom_right}。对于基于anchor的方法,它会估算出对应的偏移量,例如{ x center offset , y center offset , w offset , h offset } and { x top left offset , y top left offset , x bottom right offset , y bottom right offset }。但是,如果要直接估计BBOX每个点的坐标值,就要将这些点作为独立变量,但实际上未考虑对象本身的完整性。为了使这一问题得到更好的解决,一些研究人员最近提出了IoU损失[90],其考虑了预测BBox面积和ground truth 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

:YOLOv4: 目标检测最优速度和精度(YOLOv4: Optimal Speed and Accuracy of Object Detecti)&spm=1001.2101.3001.5002&articleId=107749467&d=1&t=3&u=98741dc8d64a4ff592f87714c6f48bb4)
1万+

被折叠的 条评论
为什么被折叠?



