[Reading] YOLOv4: Optimal Speed and Accuracy of Object Detection

YOLOv4: Optimal Speed and Accuracy of Object Detection (2020/4)

1. 概述

  文章的主要贡献有:

  • 提出了一种高效且强大的目标检测器,称为 YOLOv4。YOLOv4 兼顾速度和准确率(Figure 1),且只需单个 GPU 就可以训练。
  • 验证了各种目标检测技巧的效果,从中选择了 WRC(Weighted-Residual-Connections)、CSP(Cross-Stage-Partial-connections)、CmBN(Cross mini-Batch Normalization)、SAT(Self-adversarial-training)、Mish 激活函数和 Mosaic 数据增强,DropBlock 正则化和 CIoU 损失,来构建目标检测网络。
  • 对 CBN(Cross-iteration Batch Normalization)、PAN(Path Aggregation Network)、SAM(Spatial Attention Module)等方法进行了修改,提高了效率,以适应单 GPU 的训练。
Figure 1
Figure 1

  文章指出,CNN 发展至今,出现了很多特征和方法来提升 CNN 的性能,有必要在大数据集上对这些方法的组合进行实际测试,并对结果进行分析。文章将这些方法按是否会增加推断成本,分为 Bag-of-Freebies 和 Bag-of-Specials 两大类,进行了详细的测试,寻找最有效的组合来构建新的目标检测网络。同时文章希望新的网络能在单块的常规 GPU 上实时运行,并能在单块的常规 GPU 上进行训练。

2. 目标检测模型和方法

2.1. 目标检测模型

Figure 2
Figure 2

  文章将一般的目标检测器结构总结如 Figure 2 所示,包括:

  • Input: Image,Patches,Image Pyramid
  • Backbones: VGG16,ResNet-50,SpineNet,EfficientNet-B0/B7,CSPResNeXt50,CSPDarknet53
  • Neck:
    • Additional blocks: SPP,ASPP,RFB,SAM
    • Path-aggregation blocks: FPN,PAN,NAS-FPN,Fully-connected
  • Heads:
    • Dense Prediction (one-stage):
    • RPN,SSD,YOLO,RetinaNet (anchor based)
    • CornerNet,CenterNet,MatrixNet,FCOS (anchor free)
    • Sparse Prediction (two-stage):
    • Faster R-CNN,R-FCN,Mask RCNN (anchor based)
    • RepPoints (anchor free)

2.2. Bag of freebies

  文章将只修改训练策略,或者只增加训练成本的方法,称为“bag of freebies”。

2.2.1. 数据增强

  数据增强是属于 bag of freebies 的一个典型方法,常见的增强包括:

  • 像素级调整:
    • 光学失真:调整亮度、对比度、饱和度等。
    • 几何失真:随机缩放、裁剪、翻转、选装等。
  • 模拟目标遮挡:
    • 随机擦除、CutOut:随机选择方形区域进行填充。
    • hide-and-seek、grid mask:在图像中随机或均匀选择多个方形区域并将它们替换为 0。
  • 用于特征图的增强:DropOut、DropConnect、DropBlock
  • 整合多张图片的增强:
    • MixUp:使用不同的系数将两张图片进行叠加,并根据该系数来调整标签。
    • CutMix:将裁剪的图片盖在其他图片上,根据混合区域的尺寸调整标签。
  • 风格迁移 GAN

2.2.2. 解决语义分布偏移

  还有一些 bag of freebies 方法专注于解决数据集中语义分布的偏移,如对于类别不均衡的问题,在两阶段目标检测器中常使用难负例挖掘(hard negative example mining)、在线难例挖掘(online hard example mining)等方法;但这些挖掘方法并不适用于密集预测的单阶段检测器,单阶段检测器可以使用 focal loss 来解决不同类别间数据不平衡的问题。

  另一个问题是使用独热的硬编码难以描述不同类别之间的关联程度,通过标签平滑在训练时将硬标签转换为软标签,可以增加模型的鲁棒性。为了获得更好的软标签,可以使用知识蒸馏(knowledge distillation)来设计标签精调网络(label refinement network)。

2.2.3. 边界框回归目标函数

2.2.3.1. MSE

  边界框回归的目标函数也属于 bag of freebies。传统的目标检测器常使用均方误差(MSE)对以下目标之一进行回归:

  • 中心点坐标和宽高 $\{x_{\text{center}}, y_{\text{center}}, w, h\}$
  • 左上角、右下角的坐标 $\{x_{\text{top_left}}, y_{\text{top_left}} x_{\text{bottom_left}}, y_{\text{bottom_left}}\}$

  使用基于锚点的方法时,通常会估计相对锚点框的偏移量,如:

  • 中心点坐标偏移和宽高偏移 $\{x_{\text{center_offset}}, y_{\text{center_offset}}, w_{\text{offset}}, h_{\text{offset}}\}$
  • 左上角、右下角的坐标偏移 $\{x_{\text{top_left_offset}}, y_{\text{top_left_offset}} x_{\text{bottom_left_offset}}, y_{\text{bottom_left_offset}}\}$

2.2.3.2. IoU 损失

  上述方法直接对边界框各点的坐标进行估计相当于把它们看成是独立变量,而没有考虑物体本身的完整性。为了改善这一问题,出现了一系列基于 IoU 的损失,如:

  • IoU 损失:通过计算预测边界框和标注边界框的 IoU,将预测框和标注框的覆盖程度纳入考虑。同时由于 IoU 是一个比例,与尺度无关,也解决了使用 $\{x, y, w, h\}$ 的 $l_1$ 或 $l_2$ 损失时损失会随尺度增加而上升的问题。
  • GIoU 损失:在计算覆盖区域之外,还包括了目标的形状和方向,尝试找到一个能够同时覆盖预测框和标注框的面积最小的边界框,作为 IoU 损失的分母。
  • DIoU 损失:额外考虑目标中心的距离。
  • CIoU 损失:同时考虑重叠区域、中心距离和长宽比例,在边界框回归中可以获得更快的收敛速度和准确率。

2.3. Bag of specials

  文章将会小幅增加推理成本,但会显著提升目标识别准确率的模块和后处理方法,称为“bag of specials”。这些模块会增强模型的特定属性,如增大感受野、引入注意力机制、增强特征整合能力等,后处理方法则用于对模型预测结果进行筛选。

2.3.1. 增强空间感受野

  增强感受野的常用模块有:

  • SPP(Spatial Pyramid Pooling):SPP 源自 SPM(Spatial Pyramid Matching),后者用于识别图像的语义分类,将特征图分为若干个 $d \times d$ 的 block,其中 $d = \{1, 2, 3, \cdots\}$,由此构成空间金塔,然后从中提取词袋(bag-of-word)特征。SPP 将 SPM 整合进 CNN,使用最大池化替换了词袋。
  • YOLOv3 改进的 SPP:SPP 本身输出一个一维的特征向量,可以很容易地整合进 FCN(Fully Convolutional Network)。YOLOv3 改进了 SPP,将步长为 $1$ 的 $k \times k$($k = \{1, 5, 9, 13\}$)最大池化的输出拼接起来,较大的池化尺寸增大了主干网络的感受野。使用改进 SPP 的 YOLOv3-608 在 MS COCO 目标检测任务上的 $\mathrm{AP}_{50}$ 提升了 2.7%,而计算量只增加了 0.5%。
  • ASPP(Atrous Spatial Pyramid Pooling):ASPP 将改进的 SPP 中步长为 $1$ 的 $k \times k$ 最大池化替换为了多个核尺寸为 $3 \times 3$、扩张比(dilated ratio)为 $k$、步长为 $1$ 的空洞卷积。
  • RFB(Receptive Field Block):RFB 使用了多个核尺寸为 $k \times k$、扩张比(dilated ratio)为 $k$、步长为 $1$ 的空洞卷积,获得比 ASPP 更全面的空间覆盖率,只需 7% 的额外推断时间就可以在 MS COCO 中让 $\mathrm{AP}_{50}$ 提升 5.7%。

2.3.1. 注意力模块

  目标检测中的注意力模块通常分为逐通道(channel-wise)注意力和逐点(point-wise)注意力两种,如

  • SE(Squeeze-and-Excitation):逐通道注意力。只需 2% 的额外计算量就可以让 ResNet50 在 ImageNet 上的 top-1 准确率提升 1%,但在 GPU 上会让推断时间增加 10%,因此通常用于移动设备。
  • SAM(Spatial Attention Module):逐点注意力。只需 0.1% 的额外计算量就可以让 ResNet50-SE 在 ImageNet 上的 top-1 准确率提升 0.5%,且不影响使用 GPU 时的推断速度。

2.3.1. 特征整合

  早期的特征整合(feature integration)方法,如 skip conection 和 hyper-column 将低级的物理特征和高级的语义特征整合起来。之后如 FPN(Feature Pyramid Network)的多尺度预测的方法开始流行,出现了整合不同特征金字塔的模块,如:

  • SFAM(Scale-wise Feature Aggregation Module):使用 SE 在不同尺度上拼接成的特征图上进行逐通道加权。
  • ASFF(Adaptively Spatial Feature Fusion):使用 softmax 进行逐点加权,将不同尺度的特征图相加。
  • BiFPN(Bi-directional Feature Pyramid Network):使用多输入加权残差连接进行逐尺度的加权,然后将不同尺度的特征图相加。

2.3.2. 激活函数

  优秀的激活函数应当能够有效地传播梯度,且不会引入过多的额外计算。相比于早期的 tanh 和 sigmoid,ReLU 更不容易出现梯度消失问题,之后又出现了很多激活函数,如:

  • LReLU
  • PReLU
  • ReLU6
  • SELU(Scaled Exponential Linear Unit)
  • Swish
  • hard-Swish
  • Mish

其中 LReLU 和 PReLU 解决了 ReLU 在输入小于零时梯度为零的问题,ReLU6 和 hard-Swish 用于量化网络,SELU 可以让网络自归一化,Swish 和 Mish 连续可微。

2.3.3. 后处理方法

  目标检测任务中常使用 NMS 进行后处理,对边界框进行过滤,保留高分数的边界框。但 NMS 并没有考虑上下文信息,之后出现了不同的方法来进行改进:

  • greedy NMS:使用 R-CNN 分类置信度作为参考,根据置信度进行排序。
  • soft NMS:考虑了目标的遮挡会导致置信度降低的情况。
  • DIoU NMS:在 soft NMS 的基础上,加入了中心点距离的信息。

3. 方法论

  文章的主要目标是获得能在生产系统中快速运行的神经网络,并对并行计算进行优化。文章给出了两种实时神经网络供选择:

  • 对 GPU:使用 CSPResNeXt50 / CSPDarknet53 的小部分卷积层
  • 对 VPU:使用分组卷积,但避免使用 SE,候选模型包括 EfficientNet-lite、MixNet、GhostNet、MobileNetV3

3.1. 架构选择

  首先要找到网络输入分辨率、卷积层数、卷积参数($\mathrm{filter_size}^2 * \mathrm{filters} * \mathrm{channels/groups}$)和输出数量($\mathrm{filters}$)间的最优平衡。对于 CSPResNext50 和 CSPDarknet53,文章发现前者的分类性能要优于后者,但后者的目标检测性能要优于前者。接下来要选择使用何种方式来增加感受野,以及如何聚合主干网络中不同层级的参数(如 FPN、PAN、ASFF、BiFPN)。

  文章指出,使用最优的分类模型并不总能得到最优的检测器,目标检测器要满足:

  • 更高的输入尺寸(分辨率):用于检测多个小物体
  • 更多的层数:获得更大感受野,以适应输入尺寸的增加
  • 更多参数:提升模型在单张图片中检测多个不同尺寸物体的能力
Table 1
Table 1

  文章认为应当选择具有更大感受野和更多参数的主干网络,参考 Table 1 给出了几个主干网络的信息,文章选择了 CSPDarknet53 作为主干网络。不同尺寸的感受野可以带来不同的影响:

  • 达到目标尺寸的感受野:可以看到整个物体
  • 达到网络尺寸的感受野:可以看到物体周围的上下文
  • 超过网络尺寸的感受野:增加图像和最终激活函数之间的连接

  文章在 CSPDarknet53 的基础上,加入了:

  • SPP block:显著增加感受野并区分上下文特征,同时几乎不会影响网络速度。
  • PANet:聚合主干中不同层级的参数,而没有使用 YOLOv3 中的 FPN。
  • YOLOv3 (anchor based) head:基于锚点的检测 head。

  文章没有选择如 CGBN(Cross-GPU Batch Normalization)这些需要多个 GPU,或者需要昂贵的专用设备的方法,以便任何人仅使用传统的 GPU(如 GTX 1080Ti 或 RTX
2080Ti)就可以复现文章中给出的 SOTA 性能。

3.2. 选择 BoF 和 BoS

  CNN 通常使用如下的 BoF 和 BoS 来改善目标检测任务的训练:

  • 激活函数:ReLU,leaky-ReLU,parametric-ReLU,ReLU6,SELU,Swish,Mish
  • 边界框回归损失:MSE,IoU,GIoU,CIoU,DIoU
  • 数据增强:CutOut,MixUp,CutMix
  • 正则化方法:DropOut,DropPath,Spatial DropOut,DropBlock
  • 按均值和方差归一化网络激活值:BN(Batch Normalization),CGBN/SyncBN(Cross-GPU Batch Normalization),FRN(Filter Response Normalization),CBN(Cross-Iteration Batch Normalization)

  文章的选择为:

  • 激活函数:由于 PReLU 和 SELU 难以训练,ReLU6 针对量化网络设计,首先排除这三种。
  • 正则化:根据 DropBlock 作者的比较,DropBlock 的效果要远好于其他方法,选择使用 DropBlock。
  • 归一化:文章希望训练只需使用单 GPU,排除 syncBN。

3.3. 额外改进

  为了让模型能在单 GPU 上训练,文章加入了一些额外该改进,包括:

  • 使用 Mosic 和 SAT(Self-Adversarial Training)进行数据增强。
  • 使用遗传算法选择超参数。
  • 修改了 SAM、PAN 和 CmBN(Cross mini-Batch Normalization),以提高训练和检测效率。

  Mosic 会对 4 张训练图像进行混合,以此来混合 4 种不同的上下文(相比之下,CutMIx 会混合 2 张输入图像),如 Figure 3 所示,这使得目标可以在其常规上下文之外被检测出来。同时 batch normalization 也会在 4 张不同的图像上计算激活值的统计值,而不必使用较大的小批量尺寸。

Figure 3
Figure 3

  SAT 会作用于前向和后向两个阶段:在第一阶段,网络会修改原始图像(而不修改权重),伪装图像中没有目标,相当于神经网络对自己进行一次对抗攻击;在第二阶段,训练神经网络来检测修改过的图像中的目标。

  CmBN 对 CBN 进行了修改,如 Figure 4 所示,只在一个批中的小批量间收集统计数据。

Figure 4
Figure 4

  文章修改了 SAM,将其从空间注意力修改为逐点注意力,如 Figure 5 所示。还修改了 PAN,将相加修改为拼接,如 Figure 6 所示。

Figure 5
Figure 5
Figure 6
Figure 6

3.4. YOLOv4

  文章提出的 YOLOv4 结构为:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

其中各部位使用的技巧和模块有:

  • Backbone:
    • BoF:CutMix 和 Mosaic 数据增强,DropBlock 正则化,类别标签平滑
    • BOS:Mish 激活函数,CSP(Cross-stage partial connections),MiWRC(Multiinput Weighted Residual Connections)
  • Detector:
    • BoF:CIoU 损失,CmBN,DropBlock 正则化,Mosaic 数据增强,SAT,Eliminate grid sensitivity,对单个标注使用多锚点,Cosine 退火调度,最优超参数,随机训练形状
    • BoS:Mish 激活函数,SPP-block,SAM-block,PAN path-aggregation block,DIoU-NMS

4. 实验结果

  文章进行了大量实验,在 ImageNet (ILSVRC 2012 val) 上测试分类器效果,并在 MS COCO (test-dev 2017) 上测试检测器效果。

4.1. 不同特征对分类器训练的影响

Figure 7
Figure 7

  文章研究了不同特征对分类器训练的影响,包括:

  • 标签平滑
  • 数据增强(Figure 7):双边模糊,MixUp,CutMix,Mosaic
  • 不同激活函数:Leaky-ReLU(默认),Swish,Mish

结果如 Table 2、3所示。可见 CutMix 和 Mosaic 数据增强、标签平滑、Mish 激活函数可以提高分类器的准确率。

Table 2
Table 2
Table 3
Table 3

  因此文章在训练分类器时是使用了 CutMix 和 Mosaic 数据增强以及标签平滑,将 Mish 激活函数作为互补选项。

4.2. 不同特征对检测器训练的影响

  文章研究了不同特征对检测器训练的影响,各 BoF 的效果如 Table 4 所示,其中各缩写的含义如下:

Table 2
Table 4
Table 4

  各 BoS 的效果如 Table 5 所示,可见使用 SPP、PAN、SAM 可以获得最佳性能。

Table 5
Table 5

4.3. 不同主干和预训练权重对检测器训练的影响

  使用不同主干网络的性能如 Table 6 所示,可见具有最佳分类准确率的模型并不一定具有最佳的检测准确率。另外,在 CSPResNeXt50 中使用 BoF 和 Mish 可以提高分类准确率,但将训练好的权重用于检测时,会降低检测准确率。而在 CSPDarknet53 中使用 BoF 和 Mish,不仅能提升分类准确率,将训练好的权重用于检测时,也会提升检测准确率。这说明 CSPDarknet53 更适合作为检测器。文章发现 CSPDarknet53 可以更容易地从各种改进中获得检测能力的提升。

Table 6
Table 6

4.4. 不同小批量尺寸对检测器训练的影响

  Table 7 比较了不同小批量尺寸对性能的影响,可见在加入 BoF 和 BoS 训练策略后,小批量尺寸对检测器性能几乎没有影响,这也说明使用 BoF 和 BoS 后,不再需要使用昂贵的 GPU 进行训练,只需常规的 GPU 就可以得到高性能的检测器。

Table 7
Table 7

4.5. 最终结果

  YOLOv4 和其他模型的比较如 Figuer 8 所示,YOLOv4 位于帕累托最优曲线上,在速度和准确率上优于最准确和最快的已有模型。

Figure 8
Figure 8