论文地址:https://arxiv.org/abs/2207.02696
代码地址:https://github.com/WongKinYiu/yolov7
权重: https://pan.baidu.com/s/1eaNUiwZt7XfdMyPrLpplYA 提取码: wjgw
大佬的解读:https://mp.weixin.qq.com/s/qi_5g1A6Pr2ZrY4n9r_UVw
YOLOv7在5 FPS到160 FPS范围内的速度和准确度都超过了所有已知的目标检测器,并且在GPU V100上≥30 FPS的所有已知实时物体检测器中具有最高的准确度 56.8% AP。YOLOv7-E6(56 FPS V100, 55.9% AP)相对于基于transformer 的SWIN-L Cascade-Mask R-CNN(9.2 FPS A100, 53. 9%)提升了509%速度和2%的准确率,相对于基于卷积的ConvNeXt-XL Cascade-Mask R-CNN(8.6 FPS A100, 55.2% AP)提升了551%的速度和0.7%的准确率。并且YOLOv7比YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR、Deformable DETR、DINO-5scale-R50、ViT-Adapter-B和其他许多目标检测器在速度和准确度方面的表现都好。此外,我们只在MS COCO数据集上从头开始训练YOLOv7,不使用任何其他数据集或预训练的权重。
实时目标检测是计算机视觉中一个非常重要的课题,因为它是计算机视觉系统中的一个必要组成部分。例如,多物体跟踪[94, 93]、自动驾驶[40, 18]、机器人[35, 58]、医学图像分析[34, 46]等。执行实时物体检测的计算设备通常是一些移动CPU或GPU,以及由主要制造商开发的各种神经处理单元(NPU)。例如,苹果神经引擎(Apple)、神经计算棒(Intel)、Jetson AI边缘设备(Nvidia)、边缘TPU(Google)、神经处理引擎(Qualcomm)、AI处理单元(MediaTek)和AI SoC(Kneron),都是NPU。上述一些边缘设备专注于加快不同的操作,如vanilla convolution、depth-wise convolution或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]策略来优化架构。本文提出的方法的发展方向与目前主流的实时物体检测器不同。除了架构的优化,我们提出的方法将着重于训练过程的优化。我们的重点将放在一些优化模块和优化方法上,这些方法可以加强训练成本以提高物体检测的准确性,但不增加推理成本。我们把所提出的模块和优化方法称为可训练的免费袋(bag-of-freebies)。
最近,模型的重新参数化[13, 12, 29]和动态标签分配[20, 17, 42]已经成为网络训练和物体检测的重要话题。主要是由于上述新概念的提出,物体检测器的训练出现了许多新问题。在本文中,我们将介绍我们所发现的一些新问题,并设计出有效的方法来解决这些问题。①对于模型的重新参数化,我们用梯度传播路径的概念分析了适用于不同网络中各层的模型重新参数化策略,并提出有计划的重新参数化模型。②此外,当我们发现在动态标签分配技术下,多输出层的模型训练会产生新的问题。那就是。“如何为不同分支的输出分配动态目标?” 针对这个问题,我们提出了一种新的标签分配方法,即从粗到细的引导式标签分配。
本文的贡献:
(1)我们设计了几种可训练的自由袋方法,使实时目标检测可以在不增加推理成本的情况下大大提高检测精度;
(2)对于物体检测方法的进化,我们发现了两个新问题,即重新参数化的模块如何取代原始模块,以及动态标签分配策略如何处理对不同输出层的分配。此外,我们还提出了解决这些问题带来的困难的方法;
(3)我们为实时物体检测器提出了可以有效利用参数和计算的“extend” and “compound scaling”方法;
(4)我们提出的方法可以有效地减少目前最先进的实时目标检测器约40%的参数量和50%的计算量,并且具有更快的推理速度和更高的检测精度。
目前最先进的实时物体检测器主要是基于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)更有效的标签分配-ment方法[99, 20, 17, 82, 42]
(6)更有效的训练方法。
在本文中,我们不打算探索需要额外数据或大型模型的自监督学习或知识提炼方法。相反,我们将针对与上述(4)、(5)和(6)相关的最先进的方法所衍生的问题,设计新的可训练的免费袋方法。
模型重参数化技术[71, 31, 75, 19, 33, 11, 4, 24, 13, 12, 10, 29, 14, 78]在推理阶段将多个计算模块合并为一个。模型重参数化技术可以被看作是一种整合技术,我们可以将其分为两类,即模块级整合和模型级整合。为获得最终的推理模型,模型级的重新参数化有两种常见做法:①一种是用不同的训练数据训练多个相同的模型,然后对多个训练模型的权重进行平均。②另一种是对不同迭代次数的模型的权重进行加权平均。 模块级的重新参数化是最近比较流行的研究问题:这种方法在训练过程中把一个模块分成多个相同或不同的模块分支,在推理过程中把多个分支模块整合成一个完全等价的模块。然而,并不是所有提出的re-parameterized模块都能完美地应用于不同的架构。考虑到这一点,我们开发了新的重参数化模块,并为各种架构设计了相关的应用策略。
模型缩放[72, 60, 74, 73, 15, 16, 2, 51]是一种将已经设计好的模型放大或缩小,使其适合不同的计算设备的方法。模型缩放方法通常使用不同的缩放因子,如resolution(输入图像的大小)、深度(层数)、宽度(通道数)和阶段(特征pyramid的数量),以便对网络参数量、计算、推理速度和ac-curacy进行良好的权衡。网络结构搜索(NAS)是常用的模型扩展方法之一。
NAS可以自动地从搜索空间中寻找合适的缩放因子,而不需要定义太复杂的规则。NAS的缺点是它需要非常昂贵的计算来完成对模型缩放因子的搜索。在[15]中,研究者分析了缩放因子与参数和操作量之间的关系,试图对一些规则进行直接估计,从而获得模型缩放所需的缩放因子。查阅文献,我们发现几乎所有的模型缩放方法都是独立分析单个缩放因子的,甚至复合缩放类的方法也是独立优化缩放因子。其原因是大多数流行的NAS架构处理的缩放因子不是很相关的。我们观察到,所有基于串联的模型,如DenseNet[32]或VoVNet[39],当此类模型的深度被缩放时,会改变一些层的输入宽度。由于提出的架构是基于串联的,我们必须为这个模型设计一个新的复合缩放方法。
在大多数关于设计高效架构的文献中,主要考虑的因素不外乎是参数的数量、计算量和计算密度。① Ma et al. [55]从内存访问成本的特点出发,也分析了输入/输出通道比例、架构的分支数量和元素的操作对网络推理速度的影响。② Doll ́ar et al.[15]在进行模型扩展时额外考虑了激活问题,也就是更多地考虑卷积层输出张量的数量。③ 图2(b)中的CSPVoVNet[79]的设计是VoVNet[39]的一个变体。除了考虑上述基本的设计关注点外,CSPVoVNet[79]的架构还分析了梯度路径,以使不同层的权重能够学习更多不同的特征。上述的梯度分析方法使得推理更快、更准确。④ 图2(c)中的ELAN[1]考虑了以下设计策略–“如何设计一个高效的网络?”。他们得出了一个结论。通过控制最短的最长梯度路径,一个更深的网络可以有效地学习和收敛。
在本文中,我们提出了基于ELAN的Extended-ELAN(E-ELAN),其主要结构如图2(d)所示。
在大规模的ELAN中,无论梯度路径的长度和计算块的堆叠数量如何,它都已经达到了一个稳定状态。如果无限制地堆放更多的计算块,这种稳定状态可能会被破坏,参数的利用率也会下降。所提出的E-ELAN采用expand, shuffle, merge cardinality 的方式,实现了在不破坏原有梯度路径的前提下不断增强网络的学习能力。在结构方面,E-ELAN只改变了计算块的结构,而过渡层的结构则完全没有改变。我们的策略是使用组卷积来扩大计算块的通道和 cardinality。我们将对一个计算层的所有计算块应用相同的group parameter and channel multiplier。然后,每个计算块计算出的特征图将根据设定的group parameter g 被洗成g个组,然后把它们concatenate。这时,每组特征图中的通道数量将与原始结构中的通道数量相同。最后,我们添加g组特征图,以进行合并卡位。除了保持原有的ELAN设计架构外,E-ELAN还可以引导不同的计算块组来学习更多的特征。
模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型以满足不同推理速度的需要。例如,EfficientNet[72]的缩放模型考虑了宽度、深度和分辨率。至于scaled-YOLOv4[79],其缩放模型是调整阶段的数量。在[15]中,Doll ́ar等人分析了在进行宽度和深度缩放时,vanilla卷积和group卷积对参数和计算量的影响,并以此来设计相应的模型缩放方法。
上述方法主要用于PlainNet或ResNet等架构。当这些架构在执行向上扩展或向下扩展时,每一层的in-degree和out-degree不会改变,所以我们可以独立地分析每个扩展因子对参数和计算量的影响。然而,如果将这些方法应用于基于串联的架构,我们会发现,当对深度进行缩放时,紧随基于串联的计算块之后的翻译层的in-degree会减少或增加,如图3(a)和(b)所示。
从上述现象可以推断出,对于基于concatenation的模型,我们不能单独分析不同的缩放因素,而必须一并考虑。以扩展深度为例,这种扩展将导致过渡层的输入通道和输出通道之间的比例变化,这可能导致模型的硬件使用量减少。因此,我们必须为基于concatenation的模型提出相应的复合模型缩放方法。当我们扩展一个计算块的深度因子时,我们也必须计算出该块的输出通道的变化。然后,我们将在过渡层上以相同的变化量进行宽度因子的缩放,结果如图3(c)所示。我们提出的复合缩放方法可以保持模型在初始设计时的特性,并保持最佳结构。
虽然RepConv[13]在VGG[68]上取得了出色的表现,但当我们直接将其应用于ResNet[26]和DenseNet[32]以及其他架构时,其准确性将大大降低。我们使用梯度流传播路径来分析重新参数化卷积应该如何与不同的网络相结合。我们也相应地设计了有计划的重新参数化卷积。
RepConv实际上在一个卷积层中结合了3×3卷积、1×1卷积和 identity连接。在分析了RepConv和不同架构的组合和对应的性能后,我们发现RepConv中的identity连接破坏了ResNet中的残差和DenseNet中的串联,这为不同的特征图提供了更多的梯度多样性。
基于上述原因,我们使用不含身份连接的RepConv(RepConvN) 来设计计划中的再参数化卷积的结构。在我们的想法中,当带有残差或concatenation的卷积层被重新参数化卷积所取代时,不应该有identity连接。图4显示了我们设计的用于PlainNet和ResNet的 "计划中的再参数化卷积 "的例子。至于在基于残差的模型和基于concatenation的模型中 完整的重新参数化卷积实验计划,将在消融研究研究中提出。
深度监督[38]是一种经常被用于训练深度网络的技术。它的主要概念是在网络的中间层增加额外的辅助头,并以助理损失为导向的浅层网络权重。即使是像ResNet[26]和DenseNet[32]这样通常收敛效果很好的架构,深度监督[70, 98, 67, 47, 82, 65, 86, 50]仍然可以显著提高模型在许多任务上的性能。图5(a)和(b)分别显示了 "没有"和 "有"深度监督的物体检测器架构。在本文中,我们把负责最终输出的头称为主导头,而用于辅助训练的头称为辅助头。
接下来我们要讨论的是标签分配的问题。过去,在深度网络的训练中,标签赋值通常是直接参考ground truth,根据给定的规则生成硬标签。然而,近年来,如果我们以物体检测为例,研究人员往往利用网络输出的预测质量和分布,然后与ground truth一起考虑,使用一些计算和优化方法来生成可靠的软标签[61, 8, 36, 99, 91, 44, 43, 90, 20, 17, 42]。例如,YOLO[61]使用边界盒回归预测的IoU和地面真实作为物体的软标签。在本文中,我们把把网络预测结果和地面实况一起考虑,然后分配软标签的机制称为 “标签分配器”。
深度监督需要对目标对象进行训练,而不考虑辅助头或主导头的情况。在开发软标签分配器的过程中,我们意外地发现了一个新的衍生问题,即 “如何给辅助头和主导头分配软标签?” 据我们所知,到目前为止,相关文献还没有探讨过这个问题。目前最流行的方法的结果如图5(c)所示,即把辅助头和引导头分开,然后用它们自己的预测结果和地面实况来执行标签分配。本文提出的方法是一种新的标签分配方法,通过主导头的预测结果来指导辅助头和主导头。 换句话说,我们以主导头的预测为指导,生成从粗到细的分层标签,分别用于辅助头和主导头的学习。图5(d)和(e)中分别显示了两种建议的深度监督标签分配策略。
主引导标签分配器主要根据头部预测结果和地面实况进行计算,并通过优化过程生成软标签。这组软标签将被用作辅助头和主导头的训练模型。这样做的原因是,主导头有相对较强的学习能力,所以由它产生的软标签应该更能代表源数据和目标数据之间的分布和相关性。 此外,我们可以把这种学习看作是一种广义的残差学习。通过让较浅的辅助头直接学习主导头已经学习过的信息,主导头将更能专注于学习尚未学习的残余信息。
从粗到细的导引式标签分配器也使用导引式标签的预测结果和地面真相来生成软标签。然而,在这个过程中, 我们生成了两组不同的软标签,即粗标签和细标签, 其中细标签与主导头引导标签分配器生成的软标签相同,而粗标签是通过放宽正样本分配过程的约束,允许更多的网格被视为正目标而生成的。
这样做的原因是辅助头的学习能力没有主导头强,为了避免丢失需要学习的信息,我们将重点优化辅助头在物体检测任务中的召回。至于主导头的输出,我们可以从高召回率的结果中筛选出高精确度的结果作为最终输出。然而,我们必须注意到,如果粗糙标签的额外权重与精细标签的额外权重接近,它可能在最终预测时产生不好的先验。因此,为了使这些额外的粗正网格的影响更小,我们在解码器中设置了限制,使额外的粗正网格不能完美地产生软标签。 上述机制允许在学习过程中动态调整细标签和粗标签的重要性,并使细标签的可优化的上界总是高于粗标签。
在本节中,我们将列出一些可训练的免费包。这些赠品是我们在训练中使用的一些技巧,但原始概念不是我们提出的。这些赠品的训练细节将在附录中阐述,包括:
(1)Conv-bn-activation拓扑结构中的批量规范化。这一部分主要是将批处理规范化层直接连接到卷积层。这样做的目的是为了在推理阶段将批量归一化的均值和方差整合到卷积层的偏置和权重中。
(2) YOLOR[81]中的隐性知识以加法和乘法方式与卷积特征图相结合。YOLOR中的隐性知识可以通过在推理阶段的预计算简化为一个向量。这个向量可以与前一个或后一个卷积层的偏置和权重相结合。
(3) EMA模型:EMA是一种用于mean teacher 的技术[75],在我们的系统中,我们纯粹使用EMA模型作为最终推理模型。
我们使用Microsoft COCO 数据集来进行实验,并验证我们的目标检测方法。 我们所有的实验都没有使用预训练的模型。也就是说,所有的模型都是从头开始训练的。 在开发过程中,我们使用 2017 训练集进行训练,然后使用2017验证集进行验证和选择超参数。最后,我们在2017测试集上展示了物体检测的性能,并与最先进的物体检测算法进行比较。详细的训练参数设置在附录中描述。
①我们为边缘GPU、普通GPU和云GPU设计了基本模型,它们分别被称为YOLOv7- tiny、YOLOv7和YOLOv7-W6。②同时,我们还利用基本模型为不同的服务需求进行模型扩展,得到不同类型的模型。对于YOLOv7,我们在颈部做了堆叠缩放,并使用所提出的复合缩放方法对整个模型的深度和宽度进行了缩放,并以此获得了YOLOv7-X。③至于YOLOv7-W6,我们使用新提出的复合缩放方法来获得YOLOv7-E6和YOLOv7-D6。此外,我们对YOLOv7-E6使用提议的E-ELAN,从而完成YOLOv7- E6E。 由于YOLOv7-tiny是一个面向边缘GPU的架构,它将使用泄漏的ReLU作为激活函数。至于其他模型,我们使用SiLU作为激活函数。 我们将在附录中详细描述每个模型的缩放系数。
我们选择以前的YOLO版本[YOLOv4, Scaled-YOLOv4]和最先进的物体检测器YOLOR[81]作为我们的基线。表1显示了我们提出的YOLOv7模型与那些在相同设置下训练的基线的比较。
从结果中我们看到,如果与YOLOv4相比,YOLOv7的参数减少了75%,计算量减少了36%,并带来了1.5%的AP。如果与最先进的YOLOR-CSP相比,YOLOv7的参数减少了43%,计算量减少了15%,AP提高了0.4%。 在微小模型的性能方面,与YOLOv4-tiny-31相比,YOLOv7- tiny减少了39%的参数数量和49%的计算量,但保持了相同的AP。在云端GPU模型上,我们的模型在减少19%的参数数量和33%的计算量的同时,仍然可以有更高的AP。
我们将所提出的方法与普通GPU和移动GPU的最先进的物体检测器进行比较,结果见表2。从表2的结果中我们知道,所提出的方法在速度和准确性之间有最好的权衡。如果我们将YOLOv7-tiny-SiLU与YOLOv5-N(r6.1)进行比较,我们的方法要快127fps,在AP上准确度要高10.7%。此外,YOLOv7在161帧的帧率上有51.4%的AP,而相同AP的PPYOLOE-L只有78帧的帧率。在参数使用方面,YOLOv7比PPYOLOE-L少41%。如果我们将推理速度为114帧的YOLOv7-X与推理速度为99帧的YOLOv5-L(r6.1)相比,YOLOv7-X可以将AP提高3.9%。如果将YOLOv7-X与类似规模的YOLOv5-X(r6.1)相比,YOLOv7-X的推理速度要快31fps。此外,在参数和计算量方面,YOLOv7-X与YOLOv5-X(r6.1)相比,减少了22%的参数和8%的计算量,但AP提高了2.2%。
如果用输入分辨率1280来比较YOLOv7和YOLOR,YOLOv7-W6的推理速度比YOLOR-P6快8帧,检测率也提高了1%AP。至于YOLOv7-E6和YOLOv5-X6(r6.1)的比较,前者比后者有0.9%的AP增益,参数减少45%,计算量减少63%,推理速度提高47%。YOLOv7-D6的推理速度与YOLOR-E6接近,但AP提高0.8%。YOLOv7-E6E的推理速度与YOLOR-D6接近,但AP提高了0.3%。
表3显示了使用不同的模型扩展策略进行扩展时得到的结果。其中,我们提出的复合扩展方法是将计算块的深度扩展为1.5倍,将 transition block的宽度扩展为1.25倍。如果我们的方法与只扩大宽度的方法相比,我们的方法可以用更少的参数和计算量提高0.5%的AP。如果我们的方法与只扩大深度的方法相比,我们的方法只需要增加2.9%的参数和1.2%的计算量,就可以提高0.2%的AP。从表3的结果可以看出,我们提出的复合扩展策略可以更有效地利用参数和计算量。
为了验证我们提出的重新参数化计划模型的通用性,我们将其分别用于基于concatenation的模型和基于 residual 的模型进行验证。我们选择的基于连接的模型和基于残差的模型分别是3堆积的ELAN和CSPDarknet,用于验证。
在基于concatenation的模型实验中,我们将3×3卷积层重新放置在3堆叠的ELAN与RepConv的不同位置,详细配置见图6。从表4中显示的结果,我们看到所有较高的AP值都出现在我们提出的计划中的重新参数化模型上。
在处理基于残差的模型的实验中,由于原始 dark block 没有符合我们设计策略的3×3卷积块,我们另外设计了一个反转 dark block 进行实验,其结构如图7所示。由于带 dark block 的CSPDarknet和反转 dark block 的参数和操作量完全相同,所以进行比较是公平的。表5中说明的实验结果充分证实了所提出的重新参数化计划模型对基于残差的模型同样有效。我们发现,RepCSPResNet[85]的设计也符合我们的设计模式。
在辅助头的辅助损失实验中,我们比较了一般的独立标签分配的导引头和辅助头方法,我们还比较了两个提出的导引头标签分配方法。我们在表6中显示了所有的比较结果。从表6中列出的结果可以看出,任何增加辅助损失的模型都能显著提高整体性能。此外,在AP、AP50和AP75中,我们提出的导引标签分配策略比一般的独立标签分配策略收到更好的性能。至于我们提出的粗略的辅助标签分配策略和精细的引导标签分配策略,在所有情况下都能获得最佳效果。在图8中,我们显示了不同方法在辅助头和主导头预测的目标图。从图8中我们发现,如果辅助头学习了引导头的软标签,它确实会帮助引导头从一致的目标中提取剩余的信息。
在表7中,我们进一步分析了所提出的从粗到细的引导标签分配方法对辅助头的解码器的影响。也就是说,我们比较了有/没有引入上限约束的结果。从表中的数字来看,通过与对象中心的距离来限制对象性的上限的方法可以取得更好的性能。
由于提出的YOLOv7使用多个金字塔来共同预测物体检测结果,我们可以直接将辅助头连接到中间层的金字塔上进行训练。这种训练方式可以弥补下一层金字塔预测中可能丢失的信息。基于上述原因,我们在提议的E-ELAN架构中设计了部分辅助头。我们的方法是在合并cardinality之前,在其中一组特征图之后连接辅助头,这种连接可以使新生成的一组特征图的权重不直接被辅助损失更新。我们的设计使每个金字塔形的导引头仍能从不同大小的目标中获得信息。表8显示了使用两种不同方法得到的结果,即粗到细的导引法和部分粗到细的导引法。很明显,部分粗到细的导引方法具有更好的辅助效果。
在本文中,我们提出了一种新的实时物体检测器的结构和相应的模型缩放方法。此外,我们发现物体检测方法的演变过程产生了新的研究热点。在研究过程中,我们发现了重新参数化模块的替换问题和动态标签分配的分配问题。为了解决这个问题,我们提出了可训练的免费包方法来提高物体检测的准确性。在此基础上,我们开发了YOLOv7系列物体检测系统,获得了最先进的成果。