YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
论文:https://arxiv.org/abs/2207.02696
代码:https://github.com/WongKinYiu/yolov7
摘要
- YOLOv7 在速度和准确性方面均超越了所有已知的目标检测器,在 5 FPS 到 160 FPS 的范围内表现卓越,并且在 V100 GPU 上,以 30 FPS 或更高的实时性能达到了所有已知目标检测器中的最高准确率 56.8% AP。YOLOv7-E6 目标检测器(V100 上 56 FPS,55.9% AP)在速度上比基于 Transformer 的检测器 SWINL Cascade-Mask R-CNN(A100 上 9.2 FPS,53.9% AP)快 509%,准确率高 2%;在速度上比基于卷积的检测器 ConvNeXt-XL Cascade-Mask R-CNN(A100 上 8.6 FPS,55.2% AP)快 551%,准确率高 0.7%。此外,YOLOv7 也在速度和准确性上优于 YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR、Deformable DETR、DINO-5scale-R50、ViT-Adapter-B 等多种目标检测器。此外,我们仅在 MS COCO 数据集上从头训练 YOLOv7,没有使用任何其他数据集或预训练权重。源代码已发布在 https://github.com/WongKinYiu/yolov7。
1. 介绍
- 实时目标检测是计算机视觉中的一个重要课题,因为它通常是计算机视觉系统中的必要组成部分。例如,多目标跟踪 [94, 93]、自动驾驶 [40, 18]、机器人技术 [35, 58]、医学图像分析 [34, 46] 等。执行实时目标检测的计算设备通常是一些移动 CPU 或 GPU,以及各大厂商开发的神经处理单元 (NPU)。例如,Apple 神经引擎 (Apple)、神经计算棒 (Intel)、Jetson AI 边缘设备 (Nvidia)、Edge TPU (Google)、神经处理引擎 (Qualcomm)、AI 处理单元 (MediaTek)、AI SoCs (Kneron) 等,都是 NPU 设备。上述一些边缘设备主要关注加速不同的操作,例如标准卷积、深度卷积或 MLP 操作等。本文提出的实时目标检测器主要希望能够支持从边缘到云端的移动 GPU 和 GPU 设备。
- 近年来,实时目标检测器仍在为不同的边缘设备进行开发。例如,MCUNet [49, 48] 和 NanoDet [54] 的开发侧重于实现低功耗单芯片,并提升边缘 CPU 上的推理速度。而 YOLOX [21] 和 YOLOR [81] 等方法则专注于提高各种 GPU 的推理速度。最近,实时目标检测器的开发更多地集中在设计高效的架构上。用于 CPU 的实时目标检测器 [54, 88, 84, 83] 大多基于 MobileNet [28, 66, 27]、ShuffleNet [92, 55] 或 GhostNet [25],而另一主流的 GPU 实时目标检测器 [81, 21, 97] 则主要基于 ResNet [26]、DarkNet [63] 或 DLA [87],并采用 CSPNet [80] 策略来优化架构。本文提出的方法的开发方向不同于当前主流的实时目标检测器。除了架构优化外,本文的方法还将关注训练过程的优化,重点在于一些优化模块和优化方法,这些方法可能会增加训练成本以提高目标检测的准确率,但不会增加推理成本。我们将这些模块和优化方法称为可训练的免费增益 (trainable bag-of-freebies)。
- 最近,模型重参数化 [13, 12, 29] 和动态标签分配 [20, 17, 42] 已成为网络训练和目标检测中的重要话题。尤其是在上述新概念提出之后,目标检测器的训练出现了许多新的问题。本文将介绍我们发现的一些新问题,并设计有效的方法来解决它们。针对模型重参数化,我们通过梯度传播路径的概念,分析了适用于不同网络层的模型重参数化策略,并提出了计划性重参数化模型。此外,我们发现采用动态标签分配技术时,多输出层模型的训练会产生新的问题,即:“如何为不同分支的输出分配动态目标?”针对该问题,我们提出了一种新的标签分配方法,称为粗到精引导的标签分配(coarse-to-fine lead guided label assignment)。
- 本文的主要贡献总结如下:
- 1)我们设计了若干可训练的BOF方法,以使实时目标检测在不增加推理成本的情况下大幅提高检测精度;
- 2)在目标检测方法的演变过程中,我们发现了两个新问题,即如何用重参数化模块替换原模块,以及动态标签分配策略如何处理不同输出层的分配问题。此外,我们还提出了针对这些问题的解决方法;
- 3)我们提出了“扩展”和“复合缩放”方法,用于有效利用实时目标检测器的参数和计算资源;
- 4)我们提出的方法可有效减少约 40% 的参数量和 50% 的计算量,相比于当前最先进的实时目标检测器,具有更快的推理速度和更高的检测精度。
2. 相关研究
2.1 实时目标检测
- 目前,最先进的实时目标检测器主要基于 YOLO [61, 62, 63] 和 FCOS [76, 77],包括 [3, 79, 81, 21, 54, 85, 23]。成为最先进的实时目标检测器通常需要具备以下特性:(1)更快且更强的网络架构;(2)更有效的特征整合方法 [22, 97, 37, 74, 59, 30, 9, 45];(3)更精确的检测方法 [76, 77, 69];(4)更稳健的损失函数 [96, 64, 6, 56, 95, 57];(5)更高效的标签分配方法 [99, 20, 17, 82, 42];以及(6)更高效的训练方法。本文不打算探讨需要额外数据或大模型的自监督学习或知识蒸馏方法,而是针对上述提到的(4)、(5)和(6)相关的先进方法所产生的问题,设计新的可训练的BOF方法。
2.2 模型重参数化
- 模型重参数化技术 [71, 31, 75, 19, 33, 11, 4, 24, 13, 12, 10, 29, 14, 78] 在推理阶段将多个计算模块合并为一个。模型重参数化技术可以被视为一种集成方法,我们可以将其分为模块级集成和模型级集成两类。模型级重参数化有两种常见的实现方式以获得最终的推理模型。一种是使用不同的训练数据训练多个相同的模型,然后对多个训练好的模型的权重进行平均;另一种是对模型在不同迭代次数下的权重进行加权平均。模块级重参数化最近成为了更受关注的研究问题,这种方法在训练时将一个模块拆分为多个相同或不同的模块分支,在推理阶段将多个分支模块整合为一个完全等效的模块。然而,并非所有提出的重参数化模块都能完美地应用于不同的架构。基于此,我们开发了新的重参数化模块,并设计了适用于各种架构的相关应用策略。
2.3 模型缩放
- 模型缩放 [72, 60, 74, 73, 15, 16, 2, 51] 是一种对已有设计模型进行放大或缩小,使其适配于不同计算设备的方法。模型缩放通常使用不同的缩放因子,如分辨率(输入图像大小)、深度(层数)、宽度(通道数)和阶段(特征金字塔数量),从而在网络参数量、计算量、推理速度和精度之间取得良好的平衡。网络架构搜索(NAS)是常用的模型缩放方法之一,NAS 可以在搜索空间中自动寻找合适的缩放因子,而无需定义过于复杂的规则。NAS 的缺点在于其搜索模型缩放因子所需的计算成本非常高。在文献 [15] 中,研究者分析了缩放因子与参数量和计算量之间的关系,尝试直接估算某些规则,以获得模型缩放所需的缩放因子。通过查阅文献,我们发现几乎所有模型缩放方法都是独立分析各个缩放因子的,即使是复合缩放类方法也通常是独立优化缩放因子。这是因为大多数流行的 NAS 架构处理的缩放因子相关性较低。我们观察到,所有基于连接的模型(如 DenseNet [32] 或 VoVNet [39])在缩放深度时会改变某些层的输入宽度。由于我们提出的架构基于连接,我们必须为该模型设计一种新的复合缩放方法。
3. 结构
3.1 E-ELAN(Extended efficient layer aggregation networks)
- 在大多数关于设计高效架构的文献中,主要考虑的因素通常只有参数数量、计算量和计算密度。从内存访问成本的特点出发,Ma 等人 [55] 还分析了输入/输出通道比、架构的分支数量以及逐元素操作对网络推理速度的影响。Dollar 等人 [15] 在进行模型缩放时额外考虑了激活函数,即更多地考虑卷积层输出张量中元素的数量。图 2 (b) 中的 CSPVoVNet [79] 是 VoVNet [39] 的一种变体。除了考虑上述基本设计问题外,CSPVoVNet [79] 的架构还分析了梯度路径,以使不同层的权重能够学习到更多样化的特征。上述梯度分析方法使得推理速度更快,精度更高。图 2 © 中的 ELAN [1] 考虑了以下设计策略——“如何设计一个高效的网络?”。他们得出了一个结论:通过控制最短最长梯度路径,一个更深的网络可以有效地学习和收敛。在本文中,我们提出了基于 ELAN 的 Extended-ELAN(E-ELAN),其主要架构如图 2 (d) 所示。
- 不管是在大规模 ELAN 中梯度路径的长度和计算块的堆叠次数,ELAN 已经达到一个稳定状态。如果无限堆叠更多的计算块,这个稳定状态可能会被破坏,导致参数利用率降低。我们提出的 E-ELAN 通过扩展、混洗和合并基数的方法,能够持续增强网络的学习能力,同时不破坏原有的梯度路径。在架构方面,E-ELAN 仅改变了计算块中的架构,而过渡层的架构完全保持不变。我们的策略是通过组卷积来扩展计算块的通道和基数。我们将相同的组参数和通道倍数应用于计算层中所有计算块。然后,计算出的特征图将按照设定的组参数 g,将每个计算块的特征图混洗成 g 组,再将它们拼接在一起。此时,每个组的特征图中的通道数与原架构中的通道数相同。最后,我们将 g 组特征图进行合并基数。通过这种方式,除了保持原有的 ELAN 设计架构,E-ELAN 还可以引导不同组的计算块学习更多样化的特征。
3.2 Model scaling for concatenation-based models
- 模型缩放的主要目的是调整模型的某些属性,并生成不同规模的模型,以满足不同推理速度的需求。例如,EfficientNet 的缩放模型 [72] 考虑了宽度、深度和分辨率。对于缩放后的 YOLOv4 [79],其缩放模型则是调整阶段的数量。在 [15] 中,Dollar 等人分析了普通卷积和分组卷积在进行宽度和深度缩放时对参数数量和计算量的影响,并用此设计了相应的模型缩放方法。这些方法主要应用于如 PlainNet 或 ResNet 等架构。当这些架构进行上缩放或下缩放时,每一层的输入度(in-degree)和输出度(out-degree)不会改变,因此我们可以独立分析每个缩放因子对参数数量和计算量的影响。然而,如果将这些方法应用于基于拼接的架构,我们会发现,当对深度进行上缩放或下缩放时,紧接在基于拼接的计算模块后的过渡层的输入度将会减少或增加,如图 3(a)和(b)所示。可以从上述现象推测,我们不能单独分析基于拼接的模型的不同缩放因子,而必须将它们一起考虑。
- 以深度上缩放为例,这种操作会导致过渡层的输入通道和输出通道之间的比例发生变化,这可能导致模型的硬件使用效率降低。因此,我们必须为基于拼接的模型提出相应的复合模型缩放方法。当我们对计算模块的深度因子进行缩放时,还必须计算该模块输出通道的变化。然后,我们将对过渡层进行相同量级的宽度因子缩放,结果如图 3(c)所示。我们提出的复合缩放方法可以保持模型在初始设计时的属性,并维持其最优结构。
4. 可训练的BOF(bag-of-freebies)
4.1 Planned re-parameterized convolution
- 虽然 RepConv [13] 在 VGG [68] 上表现出色,但当我们将其直接应用于 ResNet [26]、DenseNet [32] 等架构时,其准确性会显著降低。我们使用梯度流传播路径分析了重新参数化卷积如何与不同的网络进行结合。基于此分析,我们还设计了相应的计划性重新参数化卷积方法。
- RepConv 实际上将 3 × 3 卷积、1 × 1 卷积和恒等连接结合在一个卷积层中。在分析了 RepConv 与不同架构的组合及其对应的性能后,我们发现 RepConv 中的恒等连接破坏了 ResNet 中的残差连接,以及 DenseNet 中的拼接连接,后者为不同特征图提供了更多梯度多样性。基于这些原因,我们使用没有恒等连接的 RepConv(即 RepConvN)来设计计划性重新参数化卷积的架构。在我们的设想中,当带有残差或拼接的卷积层被重新参数化卷积替代时,应该去除恒等连接。图 4 展示了我们设计的“计划性重新参数化卷积”在 PlainNet 和 ResNet 中的应用示例。至于在基于残差模型和基于拼接模型中的完整计划性重新参数化卷积实验,将在消融研究部分展示。