论文链接:https://arxiv.org/abs/2207.02696
代码链接:https://github.com/WongKinYiu/yolov7
在5 FPS 到160 FPS 范围内,YOLOv7的速度和精度都超过了所有已知的目标检测器,在 V100 上所有已知的30 FPS 以上的实时目标检测器中,YOLOv7的准确率最高,达到56.8% AP。
其中,YOLOv7 - E6 目标检测器(56 FPS V100, 55.9% AP)比基于 transformer 的检测器 SWIN-
L Cascade-Mask R-CNN(9.2 FPS A100, 53.9% AP)速度快509%,精度高2%;比基于卷积的检测器 ConvNeXt-XL Cascade-Mask R-CNN(8.6 FPS A100, 55.2% AP)速度快551%,精度高0.7% AP。
YOLOv7在速度和精度方面优于:YOLOR, YOLOX, Scaled-YOLOv4, YOLOv5, DETR, Deformable DETR, DINO-5scale-R50, ViT-Adapter-B 和许多其他目标检测器。
实时目标检测是计算机视觉中的一个重要课题,是计算机视觉系统中必不可少的组成部分。例如,多目标跟踪、自动驾驶、机器人、医学图像分析等。执行实时目标检测的计算设备通常是一些移动CPU或GPU,以及各大厂商开发的各种神经处理单元(NPU)。上面提到的一些边缘设备专注于加速不同的操作,如普通卷积、深度卷积或MLP操作。在本文中提出的实时目标检测器主要是希望它能够同时支持从边缘到云端的移动GPU和GPU设备。
针对不同边缘设备的实时目标检测器目前仍在不断发展。例如,MCUNe 和 NanoDet 主要致力于提供低功耗的单片机和提高边缘 CPU 的推理速度。而 YOLOX 和 YOLOR 等方法则专注于提高各种GPU的推理速度。
近年来,实时目标检测器的发展主要集中在高效体系结构的设计上。在CPU上使用的实时目标检测器,大多基于 MobileNet, ShuffleNet 或GhostNet。针对GPU开发的主流的实时目标检测器,大多使用 ResNet、DarkNet 或 DLA,然后使用 CSPNet 策略来优化架构。
本文提出的方法的发展方向不同于目前主流的实时目标检测器。除了架构优化之外,本文提出的方法将重点放在训练过程的优化上。作者的焦点是在一些优化模块和优化方法上,它们可以通过增加训练成本来提高目标检测的准确性,但不增加推理成本。作者将所提出的模块和优化方法称为可训练的 bag-of-freebies。
近年来,模型重参化和动态标签分配已成为网络训练和目标检测中的重要课题。在本文中,将介绍一些新发现的问题,并设计有效的方法来解决它们,例如:
(1)在模型重参数化方面,结合梯度传播路径的概念,分析了不同网络中各层的模型重参数化策略,提出了规划重参数化模型。
(2)当使用动态标签分配技术时,多输出层模型的训练会产生新的问题。“如何为不同分支的输出分配动态目标?”,作者提出了一种新的标签分配方法——粗到细引导标签分配方法。
本文的主要贡献如下:
目前最先进的实时目标检测器主要基于 YOLO 和 FCOS。能够成为最先进的实时目标检测器通常需要以下特征:
(1)更快更强的网络架构;
(2)一种更有效的特征集成方法;
(3)更精确的检测方法;
(4)更鲁棒的损失函数;
(5)一种更有效的标签分配方法;
(6)一种更有效的训练方法。
在本文中,作者不打算探索需要额外数据或大型模型的自我监督学习或知识蒸馏方法。相反,将针对上述(4)、(5)和(6)的最先进方法衍生的问题,设计新的可训练的 bag-of-freebies。
模型重参化技术在推理阶段将多个计算模块合并为一个。模型重参化技术可以看作是一种集成技术,可以将其分为两类,即模块级集成和模型级集成。为了获得最终的推断模型,有两种常见的模型级重参化实践:
模块级重参化是近年来比较热门的研究课题。这种方法在训练期间将一个模块拆分为多个相同或不同的模块分支,并在推理期间将多个分支模块集成为完全等价的模块。然而,并不是所有提出的重参化模块都能完美地应用于不同的架构。考虑到这一点,作者开发了新的重参化模块,并为各种体系结构设计了相关的应用策略。
模型缩放是一种放大或缩小已经设计好的模型,使其适合不同计算设备的方法。模型缩放法通常使用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)和阶段(特征金字塔数),从而在网络参数的数量、计算量、推理速度和精度方面达到良好的权衡。
网络架构搜索(NAS)是一种常用的模型缩放方法。NAS可以从搜索空间中自动搜索合适的比例因子,而无需定义过于复杂的规则。NAS的缺点是需要非常昂贵的计算来完成模型缩放因子的搜索。
通过查阅文献,作者发现几乎所有的模型缩放方法都是独立分析单个缩放因子的,甚至复合缩放类别中的方法也是独立优化缩放因子的。这是因为大多数流行的NAS架构都处理不太相关的缩放因子。作者观察到所有基于级联的模型,如 DenseNet 或 VoVNet,当这些模型的深度被缩放时,会改变某些层的输入宽度。由于本文提出的体系结构是基于串联的,必须设计一种新的复合缩放方法。
在大多数设计高效体系结构的文献中,主要考虑的因素是参数量、计算量和计算密度。从内存访问代价的特点出发,还可以分析输入/输出信道比、体系结构分支数量和单元操作对网络推理速度的影响。此外,在执行模型缩放时还可以考虑激活,即更多地考虑卷积层输出张量中的元素数量。
在大规模ELAN中,无论梯度路径长度和计算块的堆叠数量如何,都达到了稳定状态。如果无限地叠加更多的计算块,可能会破坏这种稳定状态,导致参数利用率下降。提出的E-ELAN利用expand、shuffle、merge cardinality来实现在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。
在体系结构上,E-ELAN 只改变了计算块的体系结构,而过渡层的体系结构完全不变。作者的策略是使用分组卷积来扩展计算模块的信道和基数,将相同的 group parameter 和 channel multiplier 用于计算每一层中的所有模块。然后,将每个计算模块计算出的特征映射,按照设定的分组数 g,打乱成 g 组,然后拼接在一起。此时,每组feature map中的通道数将与原架构中的通道数相同。最后,作者添加了 g 组特征映射来执行merge cardinality。除了保持原来 ELAN 的设计架构外,E-ELAN还可以引导不同的计算模块组学习更多不同的特征。
在PlainNet 或 ResNet等架构中,执行放大或缩小时,每一层的入度和出度不会发生变化,因此可以独立分析每个缩放因子对参数量和计算量的影响。然而,如果这些方法应用于基于串联的架构中,会发现,当进行深度缩放时,紧接在基于级联的计算块之后的转换层的分支将减少或增加,如图3 (a)和(b)所示。
从上面的现象可以推断出,我们不能单独分析基于串联的模型的不同缩放因子,而是必须一起考虑。以放大深度为例,这种行为会导致过渡层的输入通道和输出通道的比例改变,从而导致模型的硬件使用量下降。因此,对于基于串联的模型,必须采用相应的复合模型缩放方法。当我们缩放一个计算块的深度因子时,还必须计算该块输出通道的变化。然后,将对过渡层进行相同变化量的宽度因子缩放,结果如图3 (c)所示。作者提出的复合缩放方法可以保持模型在初始设计时的属性,并保持最优结构。
尽管 RepConv 在 VGG 上取得了优异的性能,但当作者直接将其应用于 ResNet 和 DensNet 以及其他架构时,其精度显著降低。作者使用梯度流传播路径来分析如何将重参化卷积与不同的网络相结合。作者还相应地设计了重参化卷积。
RepConv 实际上在一个卷积层中结合了3×3卷积、1×1卷积和 identity 连接。在分析了 RepConv 和不同架构的组合和相应性能之后,作者发现 RepConv 中的 identity 连接破坏了 ResNet 中的残差和 DensNet 中的级联,它们为不同的特征映射提供了更多的梯度多样性。
基于上述原因,作者使用无 identity 连接的RepConv(RepConvN)来设计重参化卷积的架构。在作者的思想中,当具有残差或级联的卷积层被重参化的卷积代替时,应该没有 identity 连接。图4显示了作者设计的用于 PlainNet 和 ResNet 的“重参化卷积”。关于基于残差模型和基于级联模型的完整重参化卷积实验,将在消融实验中介绍。
深度监督是一种常用的深度网络训练技术。其主要思想是在网络中间层增加额外的辅助头部,以辅助以损失为指导的浅层网络权重。即使对于 ResNet 和 DenseNet 等通常收敛较好的架构,深度监督仍然可以显著提高模型在许多任务上的性能。图5 (a)和(b)分别显示了“没有”和“有”深度监督的目标检测器架构。在本文中,作者称负责最终输出的头部为引导头(lead head),称辅助训练的头部为辅助头(auxiliary head)。
接下来讨论标签分配的问题。过去,在深度网络的训练中,标签分配通常是直接指向 ground truth,根据给定的规则生成硬标签。但近年来,以目标检测为例,研究人员往往利用网络预测输出的质量和分布,再结合 ground truth考虑,使用一些计算和优化方法生成可靠的软标签。如 YOLO 使用包围盒回归预测 IoU 和 ground truth 作为软标签。在本文中,作者将把网络预测结果和 ground truth 值一起考虑再分配软标签的机制称为“标签分配器”。
软标签分配器相关技术的发展过程中,作者发现了一个新的问题,即“如何将软标签分配给辅助头和引导头”,目前还没有文献对这个问题进行探讨。目前最流行的方法如图5 (c)所示,将辅助头和引导头分开,利用各自的预测结果和 ground truth 执行标签分配。
本文提出的标签分配方法是通过引导头的预测来引导辅助头以及自身。也就是说,以引导头的预测为指导,生成粗到细的层次标签,分别用于辅助头学习和引导头学习。提出的两种深度监督标签分配策略分别如图5 (d)和(e)所示。
Lead head guided label assigner:引导头引导“标签分配器”主要是根据引导头的预测结果和 ground truth 进行计算,通过优化生成软标签。这套软标签将作为辅助头和引导头的目标来训练模型。这样做的原因是引导头具有较强的学习能力,由此产生的软标签应该更能代表源数据与目标数据之间的分布和相关性。此外,可以把这种学习看作一种广义剩余学习。通过让较浅的辅助头直接学习引导头已经学习过的信息,引导头将更能专注于学习尚未学习到的剩余信息。
Coarse-to-fine lead head guided label assigner :Coarse-to-fine引导头利用自身的预测结果和ground truth 生成软标签。但是,在这个过程中,生成了两组不同的软标签,即粗标签和细标签,其中细标签与引导头在标签分配器上生成的软标签相同,粗标签是通过降低正样本分配的约束,允许更多的网格作为正目标来生成的。这是因为辅助头的学习能力不如引导头强,为了避免丢失需要学习的信息,作者将重点放在优化辅助头的召回。对于引导头的输出,可以从查准率中过滤出高精度值的结果作为最终输出。但是,必须注意的是,如果粗标签的附加权重接近细标签的附加权重,则可能会在最终预测时产生错误的先验结果。因此,为了使这些粗略的正样本网格的影响更小,作者在解码器中加入了限制条件,使粗略的正样本网格不能完美地产生软标签。上述机制允许细标签和粗标签的重要性在学习过程中动态调整,使细标签的可优化上界始终高于粗标签。
(1) 在 conv-bn-activation 范式的Batch normalization : 这部分主要是将批归一化层直接连接到卷积层,目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏置和权重中。
(2) YOLOR 中的隐式知识结合卷积特征映射和乘加方式:通过推理阶段的预计算,可以将 YOLOR 中的隐性知识简化为向量,该向量可以与前一层或后一层的偏置和权重相结合。
(3) EMA模型:EMA是在mean teacher中使用的一种技术,作者使用 EMA 模型作为最终推理模型。
作者使用 COCO 数据集进行实验,所有的实验都没有使用预训练的模型。在开发过程中,使用train 2017 进行训练,然后使用 val 2017 进行验证和超参数的选择。
作者设计了针对边缘GPU、普通GPU和云GPU的基本模型,分别称为YOLOv7tiny、YOLOv7和YOLOv7- W6。同时,还利用基础模型对不同的服务需求进行模型缩放,得到不同类型的模型。对于 YOLOv7,作者对 neck 进行了叠加缩放,并使用提出的复合缩放方法对整个模型的深度和宽度进行缩放,从而得到 YOLOv7- x。对于 YOLOv7-W6,作者采用新提出的复合缩放法得到YOLOv7-E6 和 YOLOv7-D6。此外,作者将提出的 E-ELAN 用于 YOLOv7-E6,从而完成YOLOv7-E6E。由于 YOLOv7-tiny 是面向边缘GPU的架构,它将使用 leaky ReLU 作为激活函数。对于其他模型,使用 SiLU 作为激活函数。
作者选择之前版本的 YOLO 和最先进的目标检测器 YOLOR 作为基线。上表显示了作者提出的YOLOv7 模型与那些使用相同设置训练的 baseline 的比较。结果表明,
作者与目前最先进的通用GPU和移动GPU目标检测器进行了比较,结果如下表所示。
由上表的结果可知,本文提出的方法在速度与精度的综合权衡上是最好的:
表3显示了使用不同模型缩放策略进行缩放时的结果。其中,作者提出的复合缩放方法是将计算块的深度放大1.5倍,将过渡块的宽度放大1.25倍。与仅扩大宽度的方法相比,该方法在参数较少、计算量较少的情况下,可使AP提高0.5%。如果将作者的方法与只增加深度的方法进行比较,作者的方法只需要增加2.9%的参数数和1.2%的计算量,可以提高AP的0.2%。从表3的结果可以看出,作者提出的复合缩放策略可以更有效地利用参数和计算。
为了验证所提出的平面再参数化模型的通用性,作者分别将其应用于基于串联的模型和基于残差的模型上进行验证。我们选择的基于级联的模型和基于残差的模型分别是3层的 ELAN 和CSPDarknet。在基于级联的模型实验中,作者将3层叠加 ELAN 中不同位置的3 × 3卷积层替换为RepConv,具体配置如图6所示。从表4所示的结果中,我们看到所有较高的AP值都出现在作者提出的重参化的模型中。
在处理基于残差模型的实验中,由于原始的dark block没有一个3 × 3的卷积符合作者设计策略,作者另外为实验设计了一个反向的黑暗块,其架构如图7所示。由于dark block和反向dark block的CSPDarknet 具有完全相同的参数和操作量,所以比较是公平的。表5所示的实验结果充分证明了所提出的重新参数化模型对基于残差的模型同样有效。RepCSPResNet 的设计也符合作者的设计模式。
在辅助头的辅助损失实验中,作者比较了引导头和辅助头的独立标签分配策略,同时也比较了所提出的引导型标签分配方法,表6显示了所有比较结果。
从表6中可以明显看出,任何增加辅助损失的模型都可以显著提高整体性能。此外,作者提出的引导标签分配策略在AP、AP50和AP75中比一般的独立标签分配策略获得更好的性能。对于作者提出的粗辅助和细引导的标签分配策略,在所有情况下都能得到最好的结果。在图8中,作者展示了在辅助头和引导头用不同的方法预测的目标映射。从图8中作者发现,如果辅助头学习引导的软标签,确实可以帮助引导头从一致的目标中提取残差信息。
表7进一步分析了所提出的 coarse-to-fine 标签分配方法对辅助头解码器的影响。也就是说,作者比较了引入上界约束和不引入上界约束的结果。从表中的数字来看,用距离物体中心的距离来约束物体的上限的方法可以获得更好的性能。
由于提出的 YOLOv7 使用多个金字塔来共同预测目标检测结果,可以直接将辅助头连接到中间层的金字塔进行训练。这种类型的训练可以弥补在下一级金字塔预测中可能丢失的信息。基于上述原因,作者在提出的 E-ELAN 架构中设计了部分辅助头。作者的方法是在 merge cardinality 之前在一组特征映射后连接辅助头,这种连接可以使新生成的特征映射集的权值不被辅助损失直接更新。作者的设计允许每个金字塔的引导头从不同大小的物体中获取信息。表8显示了两种不同方法的结果,即 coarse-to-fine 引导和部分 coarse-to-fine 引导。显然,部分 coarse-to-fine 具有较好的辅助效果。
本文提出了一种新的实时目标检测器体系结构和相应的模型缩放方法。此外,作者发现,目标检测方法的发展过程产生了新的研究课题。在研究过程中,作者发现了重参化模块的替换问题和动态标签分配的分配问题。为了解决这个问题,作者提出了可训练的 bag-of-freebies 来提高目标检测的准确性。在此基础上,作者开发了 YOLOv7 系列目标检测系统,获得了最先进的检测结果。