2022年7月6日将被标记为AI历史的一个里程碑,因为YOLOv7在这一天发布了。自从发布以来,YOLOv7一直是计算机视觉开发者社区中最热门的话题,而且原因充分。YOLOv7已经被视为目标检测行业的里程碑。
在YOLOv7论文发表后不久,它被证明是最快、最准确的实时目标检测模型。但是YOLOv7是如何超越其前身的?YOLOv7在执行计算机视觉任务方面如此高效的原因是什么?
在本文中,我们将尝试分析YOLOv7模型,并试图找到为什么YOLOv7现在成为行业标准的答案。但在回答这个问题之前,我们需要简要回顾一下目标检测的历史。
什么是目标检测?
目标检测是计算机视觉中的一个分支,它可以识别并定位图像或视频文件中的对象。目标检测是许多应用程序的基础,包括自动驾驶汽车、监控监视和机器人技术。
目标检测模型可以分为两个不同的类别,即单次检测器和多次检测器。
实时目标检测
要真正理解YOLOv7的工作原理,我们需要理解YOLOv7的主要目标,“实时目标检测”。实时目标检测是现代计算机视觉的关键组成部分。实时目标检测模型试图实时识别和定位感兴趣的对象。实时目标检测模型使开发者能够在移动帧(如视频或实时监控输入)中跟踪感兴趣的对象变得非常高效。

实时目标检测模型实质上是传统图像检测模型的一步进。前者用于跟踪视频文件中的对象,而后者在静止帧(如图像)中定位和识别对象。
因此,实时目标检测模型非常适用于视频分析、自动驾驶车辆、对象计数、多对象跟踪等应用。
什么是YOLO?
YOLO或“You Only Look Once”是一系列实时目标检测模型。YOLO的概念最早由Joseph Redmon在2016年提出,几乎立即成为热门话题,因为它比现有的目标检测算法更快、更准确。不久之后,YOLO算法成为计算机视觉行业的标准。

YOLO算法提出的基本概念是使用端到端的神经网络,利用边界框和类别概率进行实时预测。YOLO与以前的目标检测模型不同之处在于,它提出了一种不同的方法来执行目标检测,即重新利用分类器。
这种方法的改变使得YOLO很快成为行业标准,因为它与其他实时目标检测算法之间的性能差距显著。与此相比,当时的目标检测算法使用区域建议网络来检测可能的感兴趣区域,然后在每个区域上分别执行识别过程。因此,这些模型经常在同一图像上执行多次迭代,导致准确性不足和执行时间较长。另一方面,YOLO算法使用单个完全连接的层一次性执行预测。
YOLO是如何工作的?
YOLO算法的工作原理可以通过以下三个步骤解释。
将目标检测重新构建为单一回归问题
YOLO算法尝试将目标检测重新定义为一个单一的回归问题,包括图像像素、类别概率和边界框坐标。因此,该算法只需要一次查看图像即可预测和定位图像中的目标对象。
全局推理图像的原因
此外,当YOLO算法进行预测时,它会全局地推理图像。它与基于区域提议和滑动技术不同,因为YOLO算法在训练和测试数据集时可以看到完整的图像,并能够编码关于类别及其出现方式的上下文信息。
在YOLO出现之前,Fast R-CNN是最受欢迎的目标检测算法之一,但由于它将图像中的背景补丁误认为对象,因此无法看到图像的更大背景。与Fast R-CNN算法相比,YOLO在背景错误方面的准确性提高了50%。
对象的泛化表示
最后,YOLO算法还旨在对图像中的对象进行泛化表示。因此,当在自然图像数据集上运行YOLO算法并进行测试时,其性能大大超过现有的R-CNN模型。这是因为YOLO具有高度的泛化能力,即使在意外输入或新领域上实施时,它也很少出现故障。
YOLOv7:有什么新内容?
现在我们对实时目标检测模型以及YOLO算法有了基本的了解,是时候讨论YOLOv7算法了。
优化训练过程
YOLOv7算法不仅试图优化模型架构,还旨在优化训练过程。它旨在使用优化模块和方法来提高目标检测的准确性,增强训练成本,同时保持干扰成本。这些优化模块可以称为“可训练的免费赠品”。
粗到细的引导标签分配
YOLOv7算法计划使用一种新的粗到细的引导标签分配方法,而不是常规的动态标签分配。这是因为使用动态标签分配训练具有多个输出层的模型会导致一些问题,其中最常见的问题是如何为不同分支及其输出分配动态目标。
模型重新参数化
模型重新参数化是目标检测中的一个重要概念,其使用通常在训练过程中遇到一些问题。YOLOv7算法计划使用梯度传播路径的概念来分析网络中不同层适用的模型重新参数化策略。
扩展和复合缩放
YOLOv7算法还引入了扩展和复合缩放方法,以利用和有效使用实时目标检测的参数和计算。

YOLOv7:相关工作
实时目标检测
YOLO目前是行业标准,大多数实时目标检测器都使用YOLO算法和FCOS(全卷积单阶段目标检测)。一流的实时目标检测器通常具有以下特点:
- 更强大和更快的网络架构。
- 有效的特征集成方法。
- 准确的目标检测方法。
- 稳健的损失函数。
- 高效的标签分配方法。
- 高效的训练方法。
YOLOv7算法不使用自监督学习和蒸馏方法,这些方法通常需要大量的数据。相反,YOLOv7算法使用可训练的免费模块方法。
模型重新参数化
模型重新参数化技术被视为一种集成技术,它在干扰阶段合并多个计算模块。该技术可以进一步分为两类,模型级集成和模块级集成。
为了获得最终的干扰模型,模型级重新参数化技术使用两种实践。第一种实践使用不同的训练数据来训练多个相同的模型,然后对训练模型的权重进行平均。或者,另一种实践是在不同迭代期间对模型的权重进行平均。
模块级重新参数化最近变得非常流行,因为它将一个模块分割成不同的模块分支,在训练阶段或干扰期间将这些不同的分支集成到等效模块中。
然而,重新参数化技术并不适用于所有类型的架构。这就是为什么YOLOv7算法使用新的模型重新参数化技术来设计适用于不同架构的相关策略的原因。
模型缩放
模型缩放是将现有模型进行放大或缩小,使其适应不同的计算设备。模型缩放通常使用多种因素,如层数(深度),输入图像的大小(分辨率),特征金字塔的数量(阶段)和通道数(宽度)。这些因素在确保网络参数、干扰速度、计算和模型准确性之间取得平衡起着关键作用。
最常用的缩放方法之一是NAS或网络架构搜索,它可以自动从搜索引擎中搜索适合的缩放因子,而无需复杂的规则。使用NAS的主要缺点是它是一种昂贵的寻找适合的缩放因子的方法。
几乎每个模型重新参数化模型都独立地分析和优化各个缩放因子,因为NAS架构使用的是不相关的缩放因子。
值得注意的是,像VoVNet或DenseNet这样的基于连接的模型在模型的深度缩放时会改变少数层的输入宽度。YOLOv7基于提出的基于连接的架构工作,因此使用了一种复合缩放方法。

上述图示比较了不同模型的扩展高效层聚合网络(E-ELAN)。所提出的E-ELAN方法保持了原始架构的梯度传输路径,但旨在通过组卷积增加添加特征的基数。这个过程可以增强不同地图学到的特征,并且可以进一步使计算和参数的使用更加高效。
YOLOv7架构
YOLOv7模型使用YOLOv4、YOLO-R和Scaled YOLOv4模型作为基础。YOLOv7是对这些模型进行实验以改善结果并使模型更准确的结果。
扩展高效层聚合网络或E-ELAN
E-ELAN是YOLOv7模型的基本构建块,它源自网络效率方面已有的模型,主要是ELAN。
在设计高效架构时的主要考虑因素是参数数量、计算密度和计算量。其他模型还考虑输入/输出通道比的影响、架构网络中的分支、网络干扰速度、卷积网络张量中的元素数量等因素。
CSPVoNet模型不仅考虑了上述参数,还通过启用不同层的权重来分析梯度路径以学习更多样化的特征。该方法使干扰速度更快、更准确。ELAN架构旨在设计一种高效的网络,以控制最短最长的梯度路径,使网络在学习和收敛方面更加有效。
无论计算块的堆叠数量和梯度路径长度如何,ELAN已经达到了稳定阶段。如果无限堆叠计算块,稳定状态可能会被破坏,参数利用率也会降低。提出的E-ELAN架构可以解决这个问题,它使用扩展、洗牌和合并基数来不断增强网络的学习能力,同时保留原始的梯度路径。
此外,当比较E-ELAN与ELAN的架构时,唯一的区别在于计算块,而过渡层的架构保持不变。
E-ELAN提议扩展计算块的基数,并通过使用组卷积扩展通道。然后计算特征图,并根据组参数将其分组洗牌,然后将它们连接在一起。每个组中的通道数与原始架构中保持一致。最后,对特征图组进行加法运算以执行基数。
基于连接的模型的模型缩放
模型缩放有助于调整模型的属性,以满足不同的干扰速度和要求,生成不同规模的模型。

该图描述了不同基于连接的模型的模型缩放。从图(a)和(b)可以看出,随着模型深度缩放的增加,计算块的输出宽度也增加,因此传输层的输入宽度也增加。如果这些方法在基于连接的架构上实施,缩放过程是在深度上进行的,如图(c)所示。
因此可以得出结论,对于基于连接的模型,不可能独立地分析缩放因子,而应该一起考虑或分析。因此,对于基于连接的模型,适合使用相应的复合模型缩放方法。此外,当缩放深度因子时,块的输出通道也必须进行缩放。
可训练的免费组件包
免费组件包是开发人员用来描述一组方法或技术的术语,这些方法或技术可以改变训练策略或成本,以提高模型的准确性。那么YOLOv7中的这些可训练免费组件是什么?让我们来看看。
计划的重新参数化卷积
YOLOv7算法使用梯度流传播路径来确定如何理想地将网络与重新参数化卷积相结合。这种方法是YOLov7为了对抗RepConv算法而采取的措施,虽然RepConv算法在VGG模型上表现良好,但在直接应用于DenseNet和ResNet模型时表现不佳。
为了识别卷积层中的连接,RepConv算法结合了3×3卷积和1×1卷积。如果我们分析算法、性能和架构,我们会发现RepConv破坏了DenseNet中的连接和ResNet中的残差。

上图描述了一个计划中的重新参数化模型。可以看出,YOLov7算法发现网络中具有连接或残差连接的层不应该在RepConv算法中具有身份连接。因此,可以用没有身份连接的RepConvN进行替换。
辅助粗糙和主要细致的损失
深度监督是计算机科学中的一个分支,通常在深度网络的训练过程中使用。深度监督的基本原则是,在网络的中间层添加一个额外的辅助头,以及与浅层网络权重相结合的辅助损失作为指导。YOLOv7算法将负责最终输出的头部称为主头,辅助头部则是辅助训练的头部。
继续进行,YOLOv7使用了一种不同的标签分配方法。传统上,标签分配是通过直接参考真实值并根据一组给定的规则生成标签的。然而,近年来,预测输入的分布和质量对于生成可靠的标签起着重要作用。YOLOv7通过使用边界框和真实值的预测来生成对象的软标签。
此外,YOLOv7算法的新标签分配方法使用主导头的预测来引导主导头和辅助头。标签分配方法提出了两种策略。
主导头引导的标签分配器
该策略基于主导头的预测结果和真实值进行计算,然后使用优化方法生成软标签。这些软标签随后用作主导头和辅助头的训练模型。
该策略的工作假设是,由于主导头具有更强的学习能力,它生成的标签应更具代表性,并在源头和目标之间存在相关性。
粗到细的主导头引导的标签分配器
该策略也基于主导头的预测结果和真实值进行计算,然后使用优化方法生成软标签。然而,这里有一个关键区别。在这个策略中,有两组软标签,粗级别和细级别。
粗标签是通过放松正样本分配过程的约束条件来生成的,该过程将更多的网格视为正目标。这样做是为了避免辅助头学习能力较弱而导致信息丢失的风险。

上图解释了YOLOv7算法中可训练的免费组件的使用。它描述了辅助头的粗标签和主导头的细标签。当我们将带有辅助头(b)的模型与普通模型(a)进行比较时,我们会观察到(b)中的模式具有辅助头,而(a)中没有。
图(c)描述了常见的独立标签分配器,而图(d)和图(e)分别表示了YOLOv7使用的主导引导分配器和粗到细的主导头引导的标签分配器。
其他可训练的免费组件
除了上述提到的组件外,YOLOv7算法还使用了其他一些免费组件,尽管这些组件最初并不是由他们提出的。它们包括:
- 卷积-批归一化-激活技术中的批归一化:该策略用于将卷积层直接连接到批归一化层。
- YOLOR中的隐式知识:YOLOv7将该策略与卷积特征图相结合。
- EMA模型:EMA模型被用作YOLOv7中的最终参考模型,尽管其主要用途是在均值教师方法中使用。
YOLOv7:实验
实验设置
YOLOv7算法使用Microsoft COCO数据集进行训练和验证其目标检测模型,并非所有这些实验都使用预训练模型。开发者使用2017年的训练数据集进行训练,并使用2017年的验证数据集选择超参数。最后,将YOLOv7目标检测结果的性能与目标检测的最新算法进行比较。
开发者为边缘GPU(YOLOv7-tiny)、普通GPU(YOLOv7)和云GPU(YOLOv7-W6)设计了一个基本模型。此外,YOLOv7算法还根据不同的服务需求使用基本模型进行模型缩放,并获得不同的模型。对于YOLOv7算法,堆叠缩放是在颈部进行的,并使用提出的化合物来提高模型的深度和宽度。
基线
YOLOv7算法使用之前的YOLO模型和YOLOR目标检测算法作为其基线。

上图比较了YOLOv7模型的基线与其他目标检测模型的情况,结果非常明显。与YOLOv4算法相比,YOLOv7不仅使用了75%更少的参数,而且计算量减少了15%,准确率提高了0.4%。
与最先进的目标检测模型比较

上图显示了当与移动设备和通用GPU的最先进目标检测模型进行比较时,YOLOv7的结果。可以观察到,YOLOv7算法提出的方法在速度和准确率之间取得了最佳的平衡。
消融研究:提出的复合缩放方法

上图比较了使用不同策略对模型进行缩放的结果。YOLOv7模型中的缩放策略将计算块的深度扩大了1.5倍,宽度扩大了1.25倍。
与仅扩大深度的模型相比,YOLOv7模型在使用更少的参数和计算资源的情况下性能提高了0.5%。与仅扩大深度的模型相比,YOLOv7的准确率提高了0.2%,但参数需要扩大2.9%,计算资源需要扩大1.2%。
提出的计划重新参数化模型
为了验证其提出的重新参数化模型的普适性,YOLOv7算法在基于残差和基于连接的模型上进行了验证。对于验证过程,YOLOv7算法使用了3层堆叠的ELAN来代替基于连接的模型,使用CSPDarknet来代替基于残差的模型。
对于基于连接的模型,算法使用了RepConv替换了3层堆叠的ELAN中的3×3卷积层。下图显示了计划RepConv和3层堆叠的ELAN的详细配置。

此外,处理基于残差的模型时,YOLOv7算法使用了一个反向的dark block,因为原始的dark block没有3×3卷积块。下图显示了反向CSPDarknet的架构,它颠倒了3×3和1×1卷积层的位置。

提出的辅助头部辅助损失
对于辅助头部的辅助损失,YOLOv7模型比较了独立标签分配和主导头部方法。

上图包含了对提出的辅助头部进行研究的结果。可以看到,模型的整体性能随着辅助损失的增加而提高。此外,YOLOv7模型提出的主导引导标签分配策略比独立主导分配策略表现更好。
YOLOv7结果
根据以上实验,以下是与其他目标检测算法进行比较时YOLOv7性能的结果。

上述图片对比了YOLOv7模型与其他目标检测算法,可以明显观察到YOLOv7在平均精度(AP)与批次干扰之间超越了其他目标检测模型。
此外,下图对比了YOLOv7与其他实时目标检测算法的性能。再次,YOLOv7在整体性能、准确性和效率方面胜过其他模型。

以下是从YOLOv7的结果和性能中得出的一些额外观察。
- YOLOv7-Tiny是YOLO系列中最小的模型,拥有超过600万个参数。YOLOv7-Tiny的平均精度为35.2%,并且它在与参数相当的YOLOv4-Tiny模型中表现出色。
- YOLOv7模型拥有超过3700万个参数,并且胜过像YOLOv4这样具有更高参数的模型。
- YOLOv7模型在5到160 FPS范围内具有最高的mAP和FPS速率。
结论
YOLO或者You Only Look Once是现代计算机视觉中最先进的目标检测模型。YOLO算法以其高准确性和高效性而闻名,因此在实时目标检测行业得到广泛应用。自2016年首次引入YOLO算法以来,实验使得开发人员不断改进模型。
YOLOv7模型是YOLO系列的最新成员,也是迄今为止最强大的YOLO算法。在本文中,我们讨论了YOLOv7的基本原理,并试图解释了YOLOv7的高效性。