论文原文链接:
[2004.10934] YOLOv4: Optimal Speed and Accuracy of Object Detection (arxiv.org)
https://arxiv.org/abs/2004.10934
arXiv:2004.10934v1 [cs.CV] 23 Apr 2020
说明
基于谷歌翻译的基础上进行了修改,部分翻译可能不准确。仅供学习参考。
YOLOv4: Optimal Speed and Accuracy of Object Detection
据说有大量特征可以提高卷积神经网络 (CNN) 的准确性。 需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论论证。 某些特征专门针对某些模型,专门针对某些问题,或仅针对小规模数据集; 而一些特性,如批量归一化和残差连接,适用于大多数模型、任务和数据集。我们假设这些通用(universal)特征包括加权残差连接 (WRC)、跨阶段部分连接 (CSP)、交叉小批量归一化 (CmBN)、自我对抗训练 (SAT) 和 Mish 激活。 我们使用新功能:WRC、CSP、CmBN、SAT、Mish 激活、Mosaic 数据增强、DropBlock 正则化和 CIoU 损失,并结合其中的一些来实现最先进的结果:在 Tesla V100 上以 ~65 FPS 的实时速度用于 MS COCO 数据集,结果为43.5% AP(65.7 % AP50) 。 源代码位于 https://github.com/AlexeyAB/darknet。
大多数基于 CNN 的对象检测器在很大程度上仅适用于推荐系统(recommendation system)。 例如,通过城市摄像机搜索免费停车位是由慢速准确模型执行的,而汽车碰撞警告与快速不准确模型有关。 提高实时对象检测器的准确性不仅可以将它们用于提示生成推荐系统,还可以用于独立流程管理(stand-alone process management)和减少人工输入。 传统图形处理单元 (GPU) 上的实时对象检测器操作允许以可承受的价格大量使用。 最准确的现代神经网络不是实时运行的,需要大量 GPU 来进行大批量的训练。我们通过创建一个在传统 GPU 上实时运行的 CNN 来解决这些问题,并且训练只需要一个传统 GPU。
图 1:提议的 YOLOv4 和其他最先进的物体检测器的比较。 YOLOv4 的运行速度比 EfficientDet 快两倍,但性能相当。 将 YOLOv3 的 AP 和 FPS 分别提高 10% 和 12%。
这项工作的主要目标是设计一个生产系统中运行速度快的物体检测器和并行计算的优化,而不是低计算量理论指标 (BFLOP)。 我们希望设计的对象可以很容易地训练和使用。 例如,任何使用传统 GPU 进行训练和测试的人都可以获得实时、高质量和令人信服的物体检测结果,如图 1 所示的 YOLOv4 结果。我们的贡献总结如下:
1. 我们开发了一个高效而强大的对象检测模型。 它使每个人都可以使用 1080 Ti 或 2080 Ti GPU 来训练超快速和准确的物体检测器。
2. 在检测器训练期间,我们验证了最先进的 Bag-of-Freebies 和 Bag-of-Specials 目标检测方法的影响。
3. 我们修改了最先进的方法,使其更有效,更适合单 GPU 训练,包括 CBN [89]、PAN [49]、SAM [85] 等。
现代检测器通常由两部分组成,在 ImageNet 上预训练的主干(backbone)和用于预测对象类别和边界框的头部(head)。
对于在 GPU 平台上运行的检测器,它们的主干可以是 VGG [68]、ResNet [26]、ResNeXt [86] 或 DenseNet [30]。 对于在 CPU 平台上运行的检测器,它们的主干可以是 SqueezeNet [31]、MobileNet [28、66、27、74] 或 ShuffleNet [97、53]。
对于头部,通常分为两类,即单阶段(one-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]。对于单阶段目标检测器,最具代表性的模型是 YOLO [61, 62, 63]、SSD [50] 和 RetinaNet [45]。 近年来,开发了无锚单阶段目标检测器。 这类检测器有 CenterNet [13]、CornerNet [37, 38]、FCOS [78] 等。
近年来发展起来的目标检测器经常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体检测器的颈部(neck)。通常,一个脖子由几个自下而上的路径和几个自上而下的路径组成。 配备这种机制的网络包括特征金字塔网络 (FPN) [44]、路径聚合网络 (PAN) [49]、BiFPN [77] 和 NAS-FPN [17]。
除了上述模型之外,一些研究人员还把重点放在直接构建一个新的主干(DetNet [43]、DetNAS [7])或一个新的整体模型(SpineNet [12]、HitDetector [20])来进行对象检测。
图 2:物体检测器
综上所述,一个普通的物体检测器由几部分组成:
• 输入:图像、补丁、图像金字塔
• 主干:VGG16 [68]、ResNet-50 [26]、SpineNet [12]、EfficientNet-B0/B7 [75]、CSPResNeXt50 [81]、CSPDarknet53 [81]
• 脖子:
• 附加模块:SPP [25]、ASPP [5]、RFB [47]、SAM [85]
• 路径聚合(Path-aggregation)块:FPN [44]、PAN [49]、NAS-FPN [17]、全连接 FPN、BiFPN [77]、ASFF [48]、SFAM [98]
• 头:
• 密集(dense)预测(单阶段):
◦ RPN [64]、SSD [50]、YOLO [61]、RetinaNet [45](anchor based)
◦ CornerNet [37]、CenterNet [13]、MatrixNet [60]、FCOS [78](anchor free)
• 稀疏(sparse)预测(两阶段):
◦ Faster R-CNN [64]、R-FCN [9]、Mask R-CNN [23](anchor based)
◦ RepPoints [87](anchor free)
通常,传统的物体检测器是离线训练的。 因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的准确性。我们将这些只会改变训练策略或只会增加训练成本的方法称为“bag of freebies(免费赠品)”。对象检测方法经常采用且符合bag of freebies(免费赠品袋)定义的是数据增强(data augmentation)。数据增强的目的是增加输入图像的可变性(variability),使设计的目标检测模型对不同环境下获得的图像具有更高的鲁棒性。例如,光度失真(photometric distortion)和几何失真(geometric distortion)是两种常用的数据增强方法,它们绝对有利于目标检测任务。在处理光度失真时,我们调整图像的亮度(brightness)、对比度(contrast)、色调(hue)、饱和度(saturation)和噪声(noise)。 对于几何失真,我们添加了随机缩放(random scale)、裁剪(crop)、翻转(flip)和旋转(rotate)。
上面提到的数据增强方法都是逐像素(pixel-wise)调整的,并且保留了调整区域内的所有原始像素信息。 此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡(occlusion)问题上。他们在图像分类和目标检测方面取得了很好的效果。 例如,随机擦除[100]和CutOut[11]可以随机选择图像中的矩形区域并填充随机值或互补值零(complementary value of zero)。至于捉迷藏(hide-and-seek) [69] 和网格蒙版(grid mask) [6],它们随机或均匀地选择图像中的多个矩形区域并将它们全替换为零。 如果将类似的概念应用于特征图,则有 DropOut [71]、DropConnect [80] 和 DropBlock [16] 方法。 此外,一些研究人员提出了将多个图像一起使用来进行数据增强的方法。 例如,MixUp [92] 使用两幅图像来使不同的系数比例(coefficient ratio)相乘叠加(superimpose),然后用这些叠加比例调整标签。至于CutMix [91],就是将裁剪后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。 除了上述方法外,风格迁移 GAN [15] 也被用于数据增强,这种用法可以有效减少 CNN 学习到的纹理(texture)偏差。
与上面提出的各种方法不同,其他一些bag of freebies方法专门用于解决数据集中语义分布(semantic distribution)可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类之间存在数据不平衡(data imbalance)的问题。 这个问题通常通过两阶段目标检测器中的硬反例挖掘(hard negative example mining)[72]或在线硬示例挖掘(online hard example mining)[67]来解决。 但是示例挖掘方法不适用于单阶段目标检测器,因为这种检测器属于密集预测架构。因此 Lin 等人 [45] 提出了focal loss 来处理各个类之间存在的数据不平衡问题。 另一个非常重要的问题是,使用one-hot hard表示很难表达不同类别之间的关联程度的关系。 这种表示方案在进行标注时经常使用。[73]中提出的标签平滑(label smoothing)是将硬标签(hard label)转换为软标签(soft label)进行训练,可以使模型更加鲁棒。 为了获得更好的软标签,Islam等[33]引入了知识蒸馏(knowledge distillation)的概念来设计标签细化网络(label refinement network)。
最后一些 bag of freebies 是边界框 (BBox) 回归的目标函数。 传统的物体检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度和宽度进行回归,即{x center, y center, w, h},或左上点和右下点,即{x top-left, y top-left, x bottom-right, y bottom-right}。对于anchor-based方法,就是估计对应的offset,例如{x center-offset, y center-offset, w offset, h offset} 和{x top-left-offset, y top-left-offset, x bottom-right-offset, y bottom-right-offset}。但是,直接估计BBox每个点的坐标值,就是把这些点当成自变量(independent variable),实际上并没有考虑对象本身的完整性。 为了更好地处理这个问题,最近有研究人员提出了 IoU loss [90],它考虑了预测 BBox 区域和真实BBox 区域的覆盖范围。IoU 损失计算过程通过使用真实值计算IoU 来触发BBox 四个坐标点的计算,然后将生成的结果连接成一个完整的代码。由于IoU是比例不变的表示,可以解决传统方法计算{x,y,w,h}的L1或L2损失时,损失会随着比例增加的问题。最近,一些研究人员继续改进 IoU 损失。例如,GIoU loss[65]除了覆盖区域外,还包括物体的形状和方向(orientation)。他们提出寻找可同时覆盖预测BBox和真实BBox的最小面积BBox,并用这个BBox作为分母(denominator)来代替原来在IoU loss中使用的分母。至于DIoU loss [99],它额外考虑了物体中心的距离,而CIoU loss [99],另一方面同时考虑了重叠区域、中心点之间的距离和纵横比。CIoU 在 BBox 回归问题上可以达到更好的收敛速度和精度。
对于那些只增加少量推理成本但可以显着提高目标检测精度的插件模块(plugin module)和后处理(post-processing)方法,我们称之为“bag of specials(特价包)”。 一般来说,这些插件模块是为了增强模型中的某些属性(attribute),比如扩大感受野(receptive field)、引入注意力机制(attention mechanism)、或者加强特征整合(integration)能力等,后处理是一种筛选(screen)模型预测结果的方法。
可用于增强感受野的常见模块有 SPP [25]、ASPP [5] 和 RFB [47]。SPP模块起源于Spatial Pyramid Matching(SPM)[39],SPM的原始方法是将特征图分割成几个d × d相等的块,其中d可以是{1, 2, 3, ...},因此形成空间金字塔,然后提取词袋(bag-of-word)特征。SPP 将 SPM 集成到 CNN 中并使用最大池化操作而不是词袋操作。由于He等人[25]提出的SPP模块会输出一维特征向量,因此不适用于全卷积网络(FCN)。因此,在 YOLOv3 [63] 的设计中,Redmon 和 Farhadi 将 SPP 模块改进为 内核大小为 k × k 的最大池化输出的串联,其中 k = {1, 5, 9, 13},步幅等于 1。 在这种设计下,相对较大的 k × k 最大池化有效地增加了主干(backbone)特征的感受野。添加改进版SPP模块后,YOLOv3-608在MS COCO物体检测任务上以0.5%的额外计算为代价将AP50提升了2.7%。ASPP [5] 模块和改进的 SPP 模块在操作上的区别主要是原始的 k×k 核大小,最大池化的步幅等于1 到几个 3×3 核大小,扩张比(dilated ratio)等于 k,在扩张卷积(dilated convolution)操作中步幅等于 1。RFB模块是使用几个k×k核的扩张卷积,扩张比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖。RFB [47] 仅花费 7% 的额外推理时间即可将 MS COCO 上 SSD 的 AP50 提高 5.7%。
物体检测中经常使用的注意力模块(attention module)主要分为逐通道注意力(channel-wise attention)和逐点注意力(point-wise attention),这两种注意力模型的代表分别是Squeeze-and-Excitation(SE)[29]和Spatial Attention Module(SAM)[85]。虽然 SE 模块可以将 ResNet50 在 ImageNet 图像分类任务中的能力提高 1% top-1 准确率,代价是只增加 2% 的计算量,但在 GPU 上通常会增加大约 10% 的推理时间, 所以更适合用在移动设备上。但对于 SAM 来说,它只需要额外付出 0.1% 的计算,就可以将 ResNet50-SE 在 ImageNet 图像分类任务上的 top-1 准确率提高 0.5%。 最重要的是,它根本不会影响 GPU 上的推理速度。
在特征整合(feature integration)方面,早期的做法是使用跳过连接(skip connection)[51]或超列(hyper-column)[22]将低级物理特征整合到高级语义特征(semantic feature)。 随着FPN等多比例(multi-scale)预测方法的流行,许多集成不同特征金字塔的轻量级模块被提出。 这类模块包括 SFAM [98]、ASFF [48] 和 BiFPN [77]。 SFAM 的主要思想是使用 SE 模块在多比例级联(multi-scale concatenated)特征图上执行逐通道水平的重新加权(channel-wise level re-weighting)。 至于ASFF,它使用softmax作为逐点级重加权(point-wise level re-weighting),然后添加不同比例的特征图。 在 BiFPN 中,提出了使用多输入加权残差连接(multi-input weighted residual connections)来执行按尺度级别重新加权(scale-wise level re-weighting),然后添加不同尺度的特征图。
在深度学习的研究中,有人把重点放在寻找好的激活函数上。一个好的激活函数可以让梯度更有效地传播,同时不会造成太多额外的计算成本。2010 年,Nair 和 Hinton [56] 提出 ReLU 来实质性地解决传统 tanh 和 sigmoid 激活函数中经常遇到的梯度消失(gradient vanish)问题。随后,LReLU [54]、PReLU [24]、ReLU6 [28]、Scaled Exponential Linear Unit (SELU) [35]、Swish [59]、hard-Swish [27] 和 Mish [55] 等被提出,也用于解决梯度消失问题。LReLU和PReLU的主要目的是解决输出小于零时ReLU梯度为零的问题。至于 ReLU6 和 hard-Swish,它们是专门为量化(quantization)网络设计的。为了自归一化(self-normalize)神经网络,SELU 激活函数被提出以实现该目标。需要注意的一件事是 Swish 和 Mish 都是连续可微(continuously differentiable)的激活函数。
基于深度学习的物体检测常用的后处理(post-processing)方法是NMS,它可以用来过滤那些对同一物体预测不好的BBox,只保留响应较高的候选BBox。NMS 尝试改进的方式与优化目标函数的方法一致。 NMS 提出的原始方法没有考虑上下文(context)信息,因此 Girshick 等人 [19] 在 R-CNN 中添加了分类置信度(classification confidence score)分数作为参考,并按照置信度得分的顺序,从高分到低分的顺序进行贪婪(greedy)NMS。对于 soft NMS [1],它考虑了在具有 IoU 分数的 greedy NMS 中对象的遮挡(occlusion)可能导致置信度下降的问题。 DIoU NMS [99] 开发者的思路是在软 NMS 的基础上,在 BBox 筛选(screen)过程中加入中心点距离信息。 值得一提的是,由于上述后处理方法都没有直接参考捕获的图像特征,因此在后续开发anchor-free方法时不再需要进行后处理。
基本目标是神经网络在生产系统中的快速运行和并行计算(parallel computation)的优化,而不是低计算量理论指标(low computation volume theoretical indicator)(BFLOP)。 我们提供了两种实时神经网络选项:
• 对于 GPU,我们在卷积层中使用少量组 (1 - 8):CSPResNeXt50 / CSPDarknet53
• 对于 VPU - 我们使用分组卷积,但我们避免使用 Squeeze-and-excitement (SE) 块
- 具体包括以下模型:
EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
我们的目标是在输入网络分辨率、卷积层数、参数数量(过滤器大小2 *过滤器*通道/组 filter_size2 * filters * channel / groups)和层输出数(过滤器)之间找到最佳平衡。 例如,我们的大量研究表明,在 ILSVRC2012 (ImageNet) 数据集 [10] 上的对象分类方面,CSPResNext50 与 CSPDarknet53 相比要好得多。 然而,相反,在检测 MS COCO 数据集上的对象方面,CSPDarknet53 比 CSPResNext50 更好 [46]。
下一个目标是选择额外的块来增加感受野,以及从不同的主干级别为不同的检测器级别选择参数聚合(parameter aggregation)的最佳方法:例如 FPN、PAN、ASFF、BiFPN。
对于分类而言最佳的参考模型对于检测器而言并不总是最佳的。 与分类器相比,检测器需要以下内容:
• 更高的输入网络尺寸(分辨率)——用于检测多个小尺寸物体
• 更多层——用于更高的感受野以覆盖增加的输入网络大小
• 更多参数——使模型有更大的能力在单个图像中检测多个不同大小的对象
表1:用于图像分类的神经网络的参数
假设地说,我们可以假设应该选择具有更大感受野大小(具有更多卷积层 3 × 3)和更多参数的模型作为主干。 表 1 显示了 CSPResNeXt50、CSPDarknet53 和 EfficientNet B3 的信息。 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((anchor based)头部作为 YOLOv4 的架构。
未来我们计划大力扩展检测器的Bag of Freebies (BoF) 内容,理论上可以解决一些问题并提高检测器的准确性,并以实验方式依次检查每个特征的影响。
我们不使用跨 GPU(Cross-GPU)批量归一化(CGBN 或 SyncBN)或昂贵的专用设备。 这允许任何人在传统图形处理器上重现我们最先进的结果,例如 GTX 1080Ti 或 RTX 2080Ti。
为了改进目标检测训练,CNN 通常使用以下内容:
• 激活:ReLU、leaky-ReLU、参数化 ReLU(parametric-ReLU)、ReLU6、SELU、Swish 或 Mish
• 边界框回归损失:MSE、IoU、GIoU、CIoU、DIoU
• 数据增强:CutOut、MixUp、CutMix
• 正则化方法:DropOut、DropPath [36]、Spatial DropOut [79] 或 DropBlock
• 通过均值和方差对网络激活进行归一化:
批归一化 (BN) [32]、Cross-GPU 批归一化(CGBN 或 SyncBN)[93]、滤波器响应(Filter Response)归一化 (FRN) [70] 或交叉迭代(Cross-Iteration)批归一化 (CBN) [89]
• 跳过连接(Skip-connections):残差连接(Residual connection)、加权残差连接、多输入(Multi-input)加权残差连接或跨阶段部分连接(Cross stage partial connections) (CSP)
至于训练激活函数,由于 PReLU 和 SELU 更难训练,而 ReLU6 是专门为量化(quantization)网络设计的,因此我们从候选列表中删除了上述激活函数。 在正则化的方法上,发表Drop-Block的人详细对比了他们的方法和其他方法,他们的正则化方法大获全胜。 因此,我们毫不犹豫地选择 DropBlock 作为我们的正则化方法。 至于归一化方法的选择,由于我们专注于仅使用一个 GPU 的训练策略,因此没有考虑 syncBN。
为了使设计的检测器更适合在单GPU上训练,我们做了如下额外的设计和改进:
• 我们引入了数据增强马赛克(Mosaic)和自我对抗训练 (SAT) 的新方法
• 我们在应用遗传算法(genetic algorithm)的同时选择最佳超参数
• 我们修改了一些现有的方法,使我们的设计适合高效的训练和检测——修改的 SAM、修改的 PAN 和交叉小批量归一化 (CmBN)
Mosaic 代表了一种新的数据增强方法,它混合了 4 个训练图像。 因此混合了 4 个不同的上下文,而 CutMix 仅混合了 2 个输入图像。 这允许检测正常上下文之外的对象。 此外,批量归一化计算每层 4 个不同图像的激活统计数据。 这显着减少了对大尺寸 mini-batch 的需求。
图 3:Mosaic 代表了一种新的数据增强方法。
自我对抗训练 (SAT) 也代表了一种新的数据增强技术,它在 2 个前向和后向阶段中运行。 在第一阶段,神经网络改变原始图像而不是网络权重。 通过这种方式,神经网络对自身执行对抗性攻击,改变原始图像 以制造图像上没有所需对象的欺骗(deception)。 在第二阶段,训练神经网络以正常方式检测此修改图像上的对象。
图 4:交叉小批量归一化。
CmBN 表示 CBN 修改版本,如图 4 所示,定义为交叉小批量归一化 (CmBN)。 这仅在单个批次内的小批次之间收集统计信息。我们将 SAM 从按空间注意(spatial-wise attention)修改为逐点注意(point-wise attention),并将 PAN 的快捷连接(shortcut connection)替换为串联(concatenation),分别如图 5 和图 6 所示。
在本节中,我们将详细阐述 YOLOv4 的细节。
YOLOv4 包括:
• 主干:CSPDarknet53 [81]
• 颈部:SPP [25]、PAN [49]
• 头部:YOLOv3 [63]
YOLO v4 使用:
• 骨干的BoF:CutMix 和 Mosaic 数据增强、DropBlock 正则化、类标签平滑(Class label smoothing)
• 骨干的BoS:Mish 激活、跨阶段部分连接 (CSP)、多输入加权残差连接 (MiWRC)
• 检测器的BoF:CIoU-loss、CmBN、DropBlock 正则化、Mosaic 数据增强、自我对抗训练(SAT)、消除网格敏感性(Eliminate grid sensitivity)、使用多个锚点(multiple anchors)获取单个真实值、余弦退火调度程序(Cosine annealing scheduler) [52]、最优超参数,随机训练形状
• 检测器的BoS:Mish 激活、SPP 块、SAM 块、PAN 路径聚合块、DIoU-NMS
我们在 ImageNet (ILSVRC 2012 val) 数据集上测试了不同训练改进技术对分类器准确性的影响,然后在 MS COCO (test-dev 2017) 数据集上测试了检测器的准确性。
在 ImageNet 图像分类实验中,默认超参数如下:训练步数为 8,000,000; 批量大小和小批量大小分别为 128 和 32; 采用多项式衰减学习率调度策略(polynomial decay learning rate scheduling strategy),初始学习率0.1; 预热(warm-up)步数为1000; 动量衰减和权重衰减分别设置为 0.9 和 0.005。
我们所有的 BoS 实验都使用与默认设置相同的超参数,并且在 BoF 实验中,我们添加了额外的 50% 训练步数。 在 BoF 实验中,我们验证了 MixUp、CutMix、Mosaic、Bluring 数据增强和标签平滑正则化(label smoothing regularization)方法。 在 BoS 实验中,我们比较了 LReLU、Swish 和 Mish 激活函数的效果。 所有实验均使用 1080 Ti 或 2080 Ti GPU 进行训练。
在 MS COCO 目标检测实验中,默认超参数如下:训练步数为 500,500; 采用步长衰减学习率调度策略(step decay learning rate scheduling strategy),初始学习率0.01,分别在40万步和45万步乘以因子0.1; 动量和权重衰减分别设置为 0.9 和 0.0005。
所有架构(architecture)都使用单个 GPU 以 64 的批量大小执行多比例(multi-scale)训练,而小批量大小为 8 或 4,具体取决于架构和 GPU 内存限制。 除了使用遗传算法进行超参数搜索实验外,其他所有实验均使用默认设置。 遗传算法使用 YOLOv3-SPP 训练 GIoU损失并搜索 300 个 epoch 以获取min-val 5k 集。 我们采用搜索学习率 0.00261,动量 0.949,分配真实值的 IoU 阈值 0.213,遗传算法实验的损失归一化器 0.07。
我们已经验证了大量的 BoF,包括网格敏感性消除(grid sensitivity elimination)、马赛克数据增强、IoU 阈值、遗传算法、类标签平滑、交叉小批量归一化 (CmBN)、自对抗训练、余弦退火调度器、动态小批量大小、DropBlock , 优化的锚点(Optimized Anchor),不同种类的 IoU 损失。 我们还对各种 BoS 进行了实验,包括 Mish、SPP、SAM、RFB、BiFPN 和Gaussian YOLO [8]。 对于所有实验,我们只使用一个 GPU 进行训练,因此没有使用优化多个 GPU 的同步BN(syncBN) 等技术。
首先,我们研究了不同特征对分类器训练的影响; 具体来说,Class label smoothing的影响,不同数据增强技术的影响,双边模糊(bilateral blurring),MixUp,CutMix和Mosaic,如Fugure 7所示,以及不同激活的影响,例如Leaky-ReLU(默认),Swish ,和Mish。
图 7:各种数据增强方法。
在我们的实验中,如表 2 所示,通过引入以下特征来提高分类器的准确性:CutMix 和 Mosaic 数据增强、类标签平滑和 Mish 激活。 因此,我们用于分类器训练的 BoF-backbone(Bag of Freebies)包括以下内容:CutMix 和 Mosaic 数据增强以及类标签平滑。 此外,我们使用 Mish 激活作为补充选项(complementary option),如表 2 和表 3 所示。
表 2:BoF 和 Mish 对 CSPResNeXt-50 分类器准确度的影响。
表 3:BoF 和 Mish 对 CSPDarknet-53 分类器准确性的影响。
进一步的研究涉及不同的BoF 检测器对检测器训练准确度的影响,如表 4 所示。我们通过研究不同的特征来显著扩展 BoF 列表,这些特征在不影响 FPS 的情况下提高检测器准确度:
• S:消除网格敏感性方程 bx = σ(tx)+cx, by = σ(ty)+cy,其中cx 和cy 始终是整数,在YOLOv3 中用于评估对象坐标。因此,对于接近 cx 或 cx + 1 值的 bx 值,需要极高的 tx 绝对值。 我们通过将 sigmoid 乘以一个超过 1.0 的因子来解决这个问题,从而消除了无法检测到对象的网格的影响。
• M:镶嵌( Mosaic)数据增强 - 在训练期间使用 4 幅图像镶嵌(mosaic)而不是单幅图像
• IT:IoU 阈值 - 为单个真实 IoU(真相,锚点)> IoU 阈值 使用多个锚点(anchor)
• GA:遗传算法——在网络训练期间的前 10% 的时间段内,使用遗传算法选择最佳超参数
• LS:类标签平滑 - 使用类标签平滑进行 sigmoid 激活
• CBN:CmBN - 使用交叉小批量归一化来收集整个批次内的统计信息,而不是收集单个小批量内的统计信息
• CA:余弦退火调度程序 - 在正弦训练期间改变学习率
• DM:动态小批量大小 - 在小分辨率训练期间使用随机训练形状自动增加小批量大小
• OA:优化的锚点——使用优化的锚点以 512x512 网络分辨率进行训练
• GIoU、CIoU、DIoU、MSE - 使用不同的损失算法进行有界框回归(bounded box regression)
表 4:Ablation Studies of Bag-of-Freebies. (CSPResNeXt50-PANet-SPP,512x512)。
进一步的研究涉及不同 Bag-of-Specials (BoS-detector) 对检测器训练精度的影响,包括 PAN、RFB、SAM、高斯 YOLO (G) 和 ASFF,如表 5 所示。在我们的实验中, 检测器在使用 SPP、PAN 和 SAM 时获得最佳性能。
我们进一步研究了不同主干模型对检测器精度的影响,如表 6 所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最好的。
表 6:使用不同的分类器预训练权重进行检测器训练(所有其他训练参数在所有模型中都相似)。
首先,虽然与 CSPDarknet53 模型相比,使用不同特征训练的 CSPResNeXt-50 模型的分类准确率更高,但 CSPDarknet53 模型在目标检测方面表现出更高的准确率。
其次,使用 BoF 和 Mish 进行 CSPResNeXt50 分类器训练会提高其分类准确度,但进一步应用这些预训练权重进行检测器训练会降低检测器准确度。 然而,使用 BoF 和 Mish 进行 CSPDarknet53 分类器训练提高了分类器和使用该分类器预训练权重的检测器的准确性。 最终结果是主干 CSPDarknet53 比 CSPResNeXt50 更适合检测器。
我们观察到,由于各种改进,CSPDarknet53 模型展示了提高检测器精度的更大能力。
最后,我们分析了不同 mini-batch 大小训练的模型得到的结果,结果如表 7 所示。 从表 7 的结果中,我们发现加入 BoF 和 BoS 训练策略后,mini-batch size 对检测器的性能几乎没有影响。 这个结果表明,在引入 BoF 和 BoS 之后,不再需要使用昂贵的 GPU 进行训练。 换句话说,任何人都可以只使用传统的 GPU 来训练一个优秀的检测器。
表 7:使用不同的 mini-batch 大小进行检测器训练。
与其他最先进的物体检测器获得的结果的比较如图 8 所示。我们的 YOLOv4 位于帕累托最优曲线(Pareto optimality curve)上,在速度和精度方面都优于最快和最准确的检测器。
图 8:不同物体检测器的速度和准确度的比较。(一些文章仅说明了其中一个 GPU 的检测器的 FPS:Maxwell / Pascal / Volta)
由于不同的方法使用不同架构的 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。
我们提供最先进的检测器,它比所有可用的替代检测器更快 (FPS) 和更准确(MS COCO AP50...95 和 AP50)。 所描述的检测器可以在具有 8-16 GB-VRAM 的传统 GPU 上训练和使用,这使其广泛使用成为可能。 单阶段基于锚的检测器的原始概念已证明其可行性。 我们已经验证了大量特征,并选择使用它们来提高分类器和检测器的准确性。 这些功能可用作未来研究和开发的最佳实践。
作者要感谢 Glenn Jocher 的 Mosaic 数据增强思想、使用遗传算法选择超参数和解决网格敏感性问题 https://github.com/ultralytics/yolov3。
一些很长的图表已略去。如有需要请参考论文原文。