【论文#目标检测】YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

Author: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao
Subjects: Computer Vision and Pattern Recognition (cs.CV)
Cite as: arXiv:2402.13616 [cs.CV] (or arXiv:2402.13616v2 [cs.CV] for this version)
https://doi.org/10.48550/arXiv.2402.13616

摘要

当今的深度学习方法主要关注如何设计最合适的损失函数,以便模型的预测结果尽可能接近真实值。同时,还需要设计合适的网络架构,以便能够获取足够的信息来进行预测。然而,现有的方法忽视了一个事实,即当输入数据经过逐层的特征提取和空间变换时,会丢失大量的信息。本文深入探讨了数据在通过深度网络传输时的信息丢失问题,即信息瓶颈和可逆函数问题。我们提出了可编程梯度信息(Programmable Gradient Information, PGI)的概念,以应对深度网络为实现多目标所需的多种变化。PGI 可以为目标任务提供完整的输入信息来计算损失函数,从而获得可靠的梯度信息以更新网络权重。此外,我们还设计了一种基于梯度路径规划的新型轻量级网络架构——泛化高效层聚合网络(Generalized Efficient Layer Aggregation Network, GELAN)。GELAN 的架构证明了 PGI 在轻量级模型上取得了优越的结果。我们在基于 MS COCO 数据集的目标检测任务上验证了所提出的 GELAN 和 PGI。结果表明,GELAN 仅使用传统的卷积算子,就比基于深度可分离卷积开发的最先进的方法实现了更好的参数利用。PGI 可以应用于从轻量级到大型的各种模型。它可以用来获取完整的信息,从而使从头开始训练的模型能够比使用大型数据集预训练的最先进的模型取得更好的结果,比较结果如图 1 所示。源代码见:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
在这里插入图片描述

1.引言

基于深度学习的模型在各个领域(如计算机视觉、语言处理和语音识别)中展现出远超以往人工智能系统的性能。近年来,深度学习领域的研究人员主要致力于开发更强大的系统架构和学习方法,例如卷积神经网络(CNNs)[21–23, 42, 55, 71, 72]、Transformer [8, 9, 40, 41, 60, 69, 70]、Perceiver [26, 26, 32, 52, 56, 81, 81] 和 Mamba [17, 38, 80]。此外,一些研究人员尝试开发更通用的目标函数,例如损失函数 [5, 45, 46, 50, 77, 78]、标签分配 [10, 12, 33, 67, 79] 和辅助监督 [18, 20, 24, 28, 29, 51, 54, 68, 76]。上述研究都试图精确地找到输入与目标任务之间的映射关系。然而,大多数以往的方法忽视了输入数据在前馈过程中可能会有相当数量的信息丢失。这种信息丢失可能导致产生有偏差的梯度流,进而用于更新模型。上述问题可能导致深度网络在目标和输入之间建立错误的关联,从而使训练好的模型产生错误的预测。
在这里插入图片描述
在深度网络中,输入数据在前馈过程中丢失信息的现象通常被称为信息瓶颈 [59],其示意图如图 2 所示。目前,能够缓解这一现象的主要方法如下:(1)使用可逆架构 [3, 16, 19]:这种方法主要通过重复输入数据,并以显式的方式保持输入数据的信息;(2)使用掩码建模 [1, 6, 9, 27, 71, 73]:它主要利用重建损失,并采用隐式的方式最大化提取的特征并保留输入信息;(3)引入深度监督概念 [28, 51, 54, 68]:它使用尚未丢失太多重要信息的浅层特征来预先建立从特征到目标的映射,以确保重要信息能够传递到更深的层。然而,上述方法在训练过程和推理过程中各有不同的缺点。例如,可逆架构需要额外的层来组合反复输入的数据,这将显著增加推理成本。此外,由于输入层到输出层不能有太深的路径,这种限制使得在训练过程中难以建模高阶语义信息。至于掩码建模,其重建损失有时会与目标损失发生冲突。此外,大多数掩码机制也会与数据产生错误的关联。对于深度监督机制,它会产生错误累积,如果浅层监督在训练过程中丢失了信息,后续层将无法检索到所需的信息。在困难的任务和小模型上,上述现象将更加显著。

为了解决上述问题,我们提出了一个新的概念,即可编程梯度信息(Programmable Gradient Information, PGI)。这个概念是通过辅助可逆分支生成可靠的梯度,从而使深层特征仍然能够保持执行目标任务的关键特征。辅助可逆分支的设计可以避免传统深度监督过程(该过程整合多路径特征)可能造成的语义丢失。换句话说,我们正在不同语义层面上编程梯度信息的传播,从而实现最佳的训练效果。PGI 的可逆架构是建立在辅助分支上的,因此没有额外的成本。由于 PGI 可以自由选择适合目标任务的损失函数,它也克服了掩码建模所遇到的问题。所提出的 PGI 机制可以应用于各种大小的深度神经网络,并且比仅适用于非常深的神经网络的深度监督机制更为通用。

在本文中,我们还基于 ELAN [65] 设计了泛化的 ELAN(GELAN)。GELAN 的设计同时考虑了参数数量、计算复杂度、精度和推理速度。这种设计允许用户根据不同的推理设备任意选择合适的计算模块。我们将提出的 PGI(可编程梯度信息)和 GELAN 结合起来,设计了新一代的 YOLO 系列目标检测系统,我们将其称为 YOLOv9。我们使用 MS COCO 数据集进行了实验,实验结果验证了我们提出的 YOLOv9 在所有比较中均实现了顶尖性能。

我们将本文的贡献总结如下:
(1)我们从可逆函数的角度对现有的深度神经网络架构进行了理论分析,并通过这一过程成功解释了许多过去难以解释的现象。我们还基于这一分析设计了PGI(可编程梯度信息)和辅助可逆分支,并取得了出色的结果。
(2)我们设计的PGI解决了深度监督只能用于极其深度神经网络架构的问题,从而使新的轻量级架构能够真正应用于日常生活。
(3)我们设计的GELAN仅使用传统卷积,就比基于最先进技术的深度可分离卷积设计实现了更高的参数利用率,同时展现出轻量、快速、准确的巨大优势。
(4)将我们提出的PGI和GELAN相结合,YOLOv9在MS COCO数据集上的目标检测性能在各个方面都大大超过了现有的实时目标检测器。

2.相关工作

2.1 实时目标检测

目前主流的实时目标检测器是 YOLO 系列 [2, 7, 13–15, 25, 30, 31, 47–49, 61–63, 74, 75],这些模型大多使用 CSPNet [64] 或 ELAN [65] 及其变体作为主要计算单元。在特征融合方面,通常使用改进的 PAN [37] 或 FPN [35] 作为工具,然后使用改进的 YOLOv3 头 [49] 或 FCOS 头 [57, 58] 作为预测头。最近,一些实时目标检测器,例如基于 DETR [4] 的 RT DETR [43],也被提出。然而,由于 DETR 系列目标检测器在没有相应领域预训练模型的情况下极难应用于新领域,目前最广泛使用的实时目标检测器仍然是 YOLO 系列。本文选择已被证明在多种计算机视觉任务和各种场景中有效的 YOLOv7 [63] 作为基础来开发所提出的方法。我们使用 GELAN 来改进架构,并使用所提出的 PGI 来改进训练过程。上述新方法使所提出的 YOLOv9 成为新一代顶级的实时目标检测器。

2.2 可逆架构

可逆架构 [3, 16, 19] 的运算单元必须保持可逆转换的特性,从而确保每个运算单元层的输出特征图能够保留完整的原始信息。之前,RevCol [3] 将传统的可逆单元推广到多级,从而能够扩展不同层单元所表达的语义级别。通过对各种神经网络架构的文献综述,我们发现有许多具有不同程度可逆特性的高性能架构。例如,Res2Net 模块 [11] 以层次化的方式将不同的输入分区与下一个分区组合,并在向后传递之前将所有转换后的分区进行拼接。CBNet [34, 39] 通过复合主干重新引入原始输入数据以获取完整的原始信息,并通过各种组合方法获得不同层次的多级可逆信息。这些网络架构通常具有出色的参数利用率,但额外的复合层会导致推理速度变慢。DynamicDet [36] 将 CBNet [34] 与高效的实时目标检测器 YOLOv7 [63] 结合起来,在速度、参数数量和精度之间实现了非常好的权衡。本文以 DynamicDet 架构为基础设计可逆分支。此外,可逆信息还进一步引入到所提出的 PGI 中。所提出的新型架构在推理过程中不需要额外的连接,因此可以充分保留速度、参数数量和精度的优势。

2.3 辅助监督

深度监督 [28, 54, 68] 是最常见的辅助监督方法,它通过在中间层插入额外的预测层来进行训练。特别是在基于 Transformer 的方法中引入的多层解码器的应用是最常见的。另一种常见的辅助监督方法是利用相关的元信息来指导中间层产生的特征图,并使它们具有目标任务所需的属性 [18, 20, 24, 29, 76]。这种类型的例子包括使用分割损失或深度损失来提高目标检测器的准确性。最近,文献 [53, 67, 82] 中有许多报道使用不同的标签分配方法来生成不同的辅助监督机制,以加快模型的收敛速度并同时提高鲁棒性。然而,辅助监督机制通常只适用于大型模型,因此当应用于轻量级模型时,很容易导致参数不足现象,从而使性能变得更差。我们提出的 PGI 设计了一种重新编程多级语义信息的方法,这种设计使得轻量级模型也能够从辅助监督机制中受益。

3.问题描述

通常,人们将深度神经网络收敛问题的困难归因于梯度消失或梯度饱和等因素,这些现象确实存在于传统的深度神经网络中。然而,现代深度神经网络已经通过设计各种归一化和激活函数从根本上解决了上述问题。尽管如此,深度神经网络仍然存在收敛速度慢或收敛结果不佳的问题。

在本文中,我们进一步探讨了上述问题的本质。通过对信息瓶颈的深入分析,我们推断出这个问题的根本原因是:最初来自非常深的网络的梯度在传输后不久就丢失了实现目标所需的大量信息。为了验证这一推断,我们使用初始权重对不同架构的深度网络进行前馈,并在图 2 中对它们进行可视化和说明。显然,PlainNet 在深层丢失了大量用于目标检测的重要信息。至于 ResNet、CSPNet 和 GELAN 能够保留的重要信息的比例,它确实与训练后可以获得的精度呈正相关。我们进一步设计了基于可逆网络的方法来解决上述问题的原因。在本节中,我们将详细阐述我们对信息瓶颈原理和可逆函数的分析。

3.1 信息瓶颈原理

根据信息瓶颈原理,我们知道数据 X X X 在经过变换时可能会丢失信息,如下式(1)所示:
在这里插入图片描述

其中, I I I 表示互信息, f f f g g g 是变换函数,而 θ \theta θ ϕ \phi ϕ 分别是 f f f g g g 的参数。在深度神经网络中, f θ ( ⋅ ) f_{\theta}(\cdot) fθ() g ϕ ( ⋅ ) g_{\phi}(\cdot) gϕ() 分别表示深度神经网络中两个连续层的操作。从式(1)可以看出,随着网络层数的加深,原始数据丢失的可能性会更大。然而,深度神经网络的参数是基于网络的输出以及给定的目标,然后通过计算损失函数生成新的梯度来更新网络。可以想象,较深的神经网络的输出不太能够保留关于预测目标的完整信息。这将导致在训练网络时使用不完整的信息,从而产生不可靠的梯度和较差的收敛性。

解决上述问题的一种方法是直接增加模型的大小。当我们使用大量参数来构建模型时,它更有能力对数据进行更完整的变换。上述方法允许即使在数据前馈过程中丢失了信息,仍然有可能保留足够的信息来执行到目标的映射。上述现象解释了为什么在大多数现代模型中宽度比深度更重要。然而,上述结论不能从根本上解决非常深的神经网络中不可靠梯度的问题。下面,我们将介绍如何使用可逆函数来解决问题并进行相关分析。

3.2 可逆函数

当一个函数 r r r 存在一个逆变换函数 v v v 时,我们称这个函数为可逆函数,如下式(2)所示:
在这里插入图片描述
其中, ψ \psi ψ ζ \zeta ζ 分别是函数 r r r v v v 的参数。数据 X X X 通过可逆函数进行转换时不会丢失信息,如下式(3)所示:
在这里插入图片描述
当网络的变换函数由可逆函数组成时,可以获取更可靠的梯度来更新模型。如今,几乎所有流行的深度学习方法都是符合可逆特性的架构,例如式(4)所示。
在这里插入图片描述
其中, l l l 表示 PreAct ResNet 的第 l l l 层, f f f 是第 l l l 层的变换函数。PreAct ResNet [22] 以显式的方式反复将原始数据 X X X 传递到后续层。尽管这种设计可以使超过一千层的深度神经网络收敛得非常好,但它破坏了我们需要深度神经网络的一个重要原因。也就是说,对于困难的问题,我们很难直接找到简单的映射函数将数据映射到目标。这也解释了为什么当层数较少时,PreAct ResNet 的性能比 ResNet [21] 差。

此外,我们尝试使用掩码建模,这种方法使得 Transformer 模型取得了显著的突破。我们使用近似方法,例如式(5),来尝试找到变换 r r r 的逆变换 v v v,以便利用稀疏特征使变换后的特征能够保留足够的信息。式(5)的形式如下:
在这里插入图片描述
其中, M M M 是一个动态二进制掩码。用于执行上述任务的其他常用方法包括扩散模型和变分自编码器,它们都具有寻找逆函数的功能。然而,当我们把上述方法应用到轻量级模型时,会出现缺陷,因为轻量级模型会对大量原始数据欠参数化。由于上述原因,将数据 X X X 映射到目标 Y Y Y 的重要信息 I ( Y , X ) I(Y, X) I(Y,X) 也会面临同样的问题。对于这个问题,我们将使用信息瓶颈 [59] 的概念来探讨。信息瓶颈的公式如下:
在这里插入图片描述
一般来说, I ( Y , X ) I(Y, X) I(Y,X) 只会占据 I ( X , X ) I(X, X) I(X,X) 的很小一部分。然而,它对目标任务至关重要。因此,即使在前馈阶段丢失的信息量并不显著,只要覆盖了 I ( Y , X ) I(Y, X) I(Y,X),训练效果就会受到严重影响。轻量级模型本身处于欠参数化状态,因此在前馈阶段很容易丢失大量重要信息。因此,我们对轻量级模型的目标是如何从 I ( X , X ) I(X, X) I(X,X) 中准确地筛选出 I ( Y , X ) I(Y, X) I(Y,X)。至于完全保留 X X X 的信息,那是很难实现的。基于上述分析,我们希望能够提出一种新的深度神经网络训练方法,它不仅可以生成可靠的梯度来更新模型,而且也适用于浅层和轻量级神经网络。

4.方法

4.1 可编程梯度信息

为了解决上述问题,我们提出了一个新的辅助监督框架,称为可编程梯度信息(Programmable Gradient Information, PGI),如图 3(d)所示。PGI 主要包括三个组成部分,分别是(1)主分支,(2)辅助可逆分支,以及(3)多级辅助信息。从图 3(d)可以看出,PGI 的推理过程仅使用主分支,因此不需要任何额外的推理成本。至于其他两个组成部分,它们被用来解决或缓解深度学习方法中的几个重要问题。其中,辅助可逆分支旨在处理由神经网络加深引起的问题。网络加深会导致信息瓶颈,这会使损失函数无法生成可靠的梯度。至于多级辅助信息,它旨在处理由深度监督引起的错误累积问题,特别是对于具有多个预测分支的架构和轻量级模型。接下来,我们将逐步介绍这两个组成部分。
在这里插入图片描述

4.1.1 辅助可逆分支

在 PGI 中,我们提出了辅助可逆分支来生成可靠的梯度并更新网络参数。通过提供从数据到目标的映射信息,损失函数可以提供指导,并避免从与目标相关性较小的不完整前馈特征中找到错误相关性的可能性。我们提出了通过引入可逆架构来维护完整信息,但将主分支添加到可逆架构中会消耗大量的推理成本。

我们分析了图 3(b)的架构,发现当从深层到浅层添加额外的连接时,推理时间会增加 20%。当我们反复将输入数据添加到网络的高分辨率计算层(黄色框)时,推理时间甚至会超过两倍。

由于我们的目标是使用可逆架构来获得可靠的梯度,“可逆” 并不是推理阶段的唯一必要条件。鉴于此,我们将可逆分支视为深度监督分支的扩展,然后设计了辅助可逆分支,如图 3(d)所示。对于因信息瓶颈而可能丢失重要信息的主分支深层特征,它们将能够从辅助可逆分支接收到可靠的梯度信息。这些梯度信息将驱动参数学习,以协助提取正确和重要的信息,上述操作可以使主分支获得对目标任务更有效的特征。此外,可逆架构在浅层网络上的表现不如在一般网络上好,因为复杂任务需要在更深的网络中进行转换。我们提出的方法不是强迫主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新它。这种设计的优点是,所提出的方法也可以应用于较浅的网络。

最后,由于辅助可逆分支可以在推理阶段移除,因此可以保留原始网络的推理能力。我们还可以在 PGI 中选择任何可逆架构来充当辅助可逆分支。

4.1.2 多级辅助信息

在本节中,我们将讨论多级辅助信息的工作原理。包含多个预测分支的深度监督架构如图 3(c)所示。对于目标检测,不同的特征金字塔可以用于执行不同的任务,例如它们可以共同检测不同大小的目标。因此,在连接到深度监督分支后,浅层特征将被引导学习用于小目标检测所需的特征,此时系统会将其他大小目标的位置视为背景。然而,上述行为会导致深层特征金字塔丢失大量用于预测目标对象所需的信息。

针对这一问题,我们认为每个特征金字塔都需要接收有关所有目标对象的信息,以便后续的主分支能够保留完整的信息来学习对各种目标的预测。

多级辅助信息的概念是在辅助监督的特征金字塔层次与主分支之间插入一个集成网络,然后利用它来合并来自不同预测头返回的梯度,如图 3(d)所示。多级辅助信息随后聚合包含所有目标对象的梯度信息,并将其传递给主分支以更新参数。此时,主分支的特征金字塔层次的特性不会被某些特定对象的信息所主导。因此,我们的方法可以缓解深度监督中的信息断裂问题。此外,任何集成网络都可以用于多级辅助信息。因此,我们可以规划所需的语义层次来指导不同大小网络架构的学习。
注解
(1)模型参数配置示例yolov9.yaml,文中提到的可编程的梯度信息,其实现的方式是加入辅助可逆分支和多级辅助信息,通过设计合理的辅助可逆分支和多级辅助信息,来调整网络的训练。从配置示例上看,第26层到第37层属于辅助可逆分支,第16层到第22层属于多级辅助信息分支。
在这里插入图片描述

(2)辅助可逆分支,看上去与主干网络比较相似,通过提取特征(文中的意思是可靠梯度),再与主干提取的不同层级特征相结合,之后进一步提取特征,最终输入到检测头中。根据文中的描述,在推理时,不会使用辅助可逆分支,这与重参数化比较相似,区别在于这里是使用另一条分支从头开始进行特征提取,重参数化会从主干中前面一些步骤中提取特征。另外,重参数化会将另一条分支的参数融合到主干中,不过本文似乎没有提到如何去掉,可能只是单纯的去掉分支,这里可能会有训练参数丢失的潜在风险。
(3)多级辅助信息,根据文中的描述,是一个集成网络,接收返回的梯度,传递给主分支,但同时避免主分支的金字塔信息被特定对象所主导,相当于是一个缓冲器。

4.2 泛化高效层聚合网络(GELAN)

在本节中,我们描述了所提出的新型网络架构——泛化高效层聚合网络(Generalized Efficient Layer Aggregation Network, GELAN)。通过结合两种设计了梯度路径规划的神经网络架构,即 CSPNet [64] 和 ELAN [65],我们设计了 GELAN,它兼顾了轻量级、推理速度和精度。其整体架构如图 4 所示。我们将 ELAN [65] 的能力进行了泛化,它最初仅使用卷积层的堆叠,扩展为一种可以使用任何计算模块的新架构。
在这里插入图片描述
注解
(1)网络中使用了RepNCSPELAN4的架构
在这里插入图片描述

class RepNCSPELAN4(nn.Module):
    # csp-elan
    # c1: 输入特征通道
    # c2: 输出特征通道
    # c3: 中间特征通道
    # c4: shortcut
    def __init__(self, c1, c2, c3, c4, c5=1):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        self.c = c3//2
        # 将输入特征通道从c1转换为c3
        self.cv1 = Conv(c1, c3, 1, 1)
        # 序列模块,先经过RepNCSP,再经过Conv
        self.cv2 = nn.Sequential(RepNCSP(c3//2, c4, c5), Conv(c4, c4, 3, 1))
        # 类似cv2,输入和输出通道均为c4
        self.cv3 = nn.Sequential(RepNCSP(c4, c4, c5), Conv(c4, c4, 3, 1))
        # 结合所有分支特征,输出通道数为c2
        self.cv4 = Conv(c3+(2*c4), c2, 1, 1)

    def forward(self, x):
    	# 输入x经过卷积层cv1,得到通道数为c3的特征,再沿通道维度分成2部分,每部分通道数为c3//2
        y = list(self.cv1(x).chunk(2, 1))
        # 将上一步得到的2部分特征分别通过cv2和cv3模块提取特征,将结果追加到列表y中
        y.extend((m(y[-1])) for m in [self.cv2, self.cv3])
        # 将所有分支的特征图拼接,再经过最终卷积层cv4,得到输出
        return self.cv4(torch.cat(y, 1))

    def forward_split(self, x):
        y = list(self.cv1(x).split((self.c, self.c), 1))
        y.extend(m(y[-1]) for m in [self.cv2, self.cv3])
        return self.cv4(torch.cat(y, 1))

上面用到了RepNCSP结构

class RepNCSP(nn.Module):
    # CSP Bottleneck with 3 convolutions
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        self.cv3 = Conv(2 * c_, c2, 1)  # optional act=FReLU(c2)
        self.m = nn.Sequential(*(RepNBottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))

    def forward(self, x):
    	# 输入x经过cv1获得feature1,再经过RepNBottleneck进行特征提取
    	# 输入x经过cv2获得feature2
    	# torch.cat()将两个分支的特征图拼接起来,随后经过第3个卷积层,得到最终的输出特征图
        return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))

RepNBoottleneck是可重复的bottleneck

class RepNBottleneck(nn.Module):
    # Standard bottleneck
    def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5):  # ch_in, ch_out, shortcut, kernels, groups, expand
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = RepConvN(c1, c_, k[0], 1)
        self.cv2 = Conv(c_, c2, k[1], 1, g=g)
        self.add = shortcut and c1 == c2

    def forward(self, x):
    	# 输入x通过cv1,得到隐层
    	# 隐层通过cv2,得到输出特征图
    	# 如果self.add为True,将输入特征图x与输出特征图相加,实现shortccut
    	# 如果self.add为False,则直接返回输出特征图
        return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))

5. 实验

5.1 实验设置

我们使用 MS COCO 数据集来验证所提出的方法。所有实验设置均遵循 YOLOv7 AF [63],数据集采用 MS COCO 2017 分割。我们提到的所有模型均采用从头开始训练(train-from-scratch)的策略,总训练次数为 500 个周期。在设置学习率时,我们在前三个周期内采用线性预热,在后续周期内根据模型规模设置相应的衰减方式。至于最后 15 个周期,我们关闭了mosaic数据增强。更多设置,请参阅附录。

5.2 实现细节

我们分别基于 YOLOv7 [63] 和动态 YOLOv7 [36] 构建了 YOLOv9 的通用版本和扩展版本。在设计网络架构时,我们将 ELAN [65] 替换为使用 CSPNet 块 [64] 的 GELAN,并以规划好的 RepConv [63] 作为计算模块。我们还简化了下采样模块,并优化了无锚点预测头。至于 PGI 的辅助损失部分,我们完全遵循 YOLOv7 的辅助头设置。更多详情,请参阅附录。

5.3 与最新技术的比较

表1列出了我们提出的YOLOv9与其他从头开始训练的实时目标检测器的比较。总体而言,现有方法中表现最好的分别是:轻量级模型的YOLO MS-S [7],中等模型的YOLO MS [7],通用模型的YOLOv7 AF [63],以及大型模型的YOLOv8-X [15]。与轻量级和中等模型YOLO MS [7]相比,YOLOv9的参数减少了约10%,计算量减少了5~15%,但AP值仍有0.4~0.6%的提升。与YOLOv7 AF相比,YOLOv9-C的参数减少了42%,计算量减少了22%,但实现了相同的AP值(53%)。与YOLOv8-X相比,YOLOv9-E的参数减少了16%,计算量减少了27%,AP值显著提升了1.7%。上述比较结果表明,我们提出的YOLOv9在各个方面与现有方法相比都有显著的改进。
在这里插入图片描述
另一方面,我们还将基于ImageNet预训练的模型纳入比较,结果如图5所示。我们分别根据参数数量和计算量进行比较。在参数数量方面,表现最好的大型模型是RT DETR [43]。从图5可以看出,使用传统卷积的YOLOv9在参数利用方面甚至比使用深度可分离卷积的YOLO MS表现更好。至于大型模型的参数利用,它也大大超过了使用基于ImageNet预训练模型的RT DETR。更令人印象深刻的是,在深度模型中,YOLOv9展现了使用PGI的巨大优势。通过准确保留和提取将数据映射到目标所需的信息,我们的方法仅需66%的参数,同时保持与RT DETR-X相同的精度。
在这里插入图片描述
在计算量方面,从最小到最大的现有最佳模型分别是YOLO MS [7]、PP YOLOE [74]和RT DETR [43]。从图5可以看出,YOLOv9在计算复杂度方面远远优于从头开始训练的方法。此外,与基于深度可分离卷积和基于ImageNet的预训练模型相比,YOLOv9也非常具有竞争力。

5.4 消融研究

5.4.1 泛化高效层聚合网络(GELAN)

对于 GELAN,我们首先对计算模块进行了消融研究。我们分别使用了 Res 模块 [21]、Dark 模块 [49] 和 CSP 模块 [64] 进行实验。表 2 显示,在将 ELAN 中的卷积层替换为不同的计算模块后,系统能够保持良好的性能。用户确实可以自由替换计算模块,并将其应用于各自的推理设备。在不同的计算模块替换中,CSP 模块表现尤为出色。它们不仅减少了参数数量和计算量,还将 AP 值提高了 0.7%。因此,我们选择 CSP-ELAN 作为 YOLOv9 中 GELAN 的组件单元。
在这里插入图片描述
接下来,我们在不同尺寸的 GELAN 上进行了 ELAN 块深度和 CSP 块深度的实验,并将结果展示在表 3 中。我们可以看到,当 ELAN 的深度从 1 增加到 2 时,准确度显著提高。但当深度大于或等于 2 时,无论是增加 ELAN 的深度还是 CSP 的深度,参数数量、计算量和准确度始终呈现出线性关系。这意味着 GELAN 对深度并不敏感。换句话说,用户可以随意组合 GELAN 中的组件来设计网络架构,并且无需特别设计就能获得性能稳定的模型。在表 3 中,对于 YOLOv9-{S,M,C},我们将 ELAN 深度和 CSP 深度的配对设置为 {{2, 3}, {2, 1}, {2, 1}}。
在这里插入图片描述

5.4.2 可编程梯度信息(PGI)

在 PGI 方面,我们分别在主干和颈部对辅助可逆分支和多级辅助信息进行了消融研究。我们设计了使用 DHLC [34] 连接来获取多级可逆信息的辅助可逆分支 ICN。至于多级辅助信息,我们使用 FPN 和 PAN 进行了消融研究,PFH 的作用相当于传统的深度监督。所有实验的结果都列在表 4 中。从表 4 可以看出,PFH 仅在深度模型中有效,而我们提出的 PGI 可以在不同的组合下提高准确率。特别是当使用 ICN 时,我们得到了稳定且更好的结果。我们还尝试将 YOLOv7 [63] 中提出的引导分配应用于 PGI 的辅助监督,并取得了更好的性能。
在这里插入图片描述
我们进一步在不同大小的模型上实现了 PGI 和深度监督的概念,并对结果进行了比较,这些结果展示在表 5 中。正如一开始所分析的,引入深度监督会导致浅层模型的准确率下降。对于通用模型,引入深度监督会导致性能不稳定,而深度监督的设计理念仅能在极其深度的模型中带来收益。我们提出的 PGI 能够有效处理诸如信息瓶颈和信息断裂等问题,并能全面提高不同大小模型的准确率。PGI 的概念带来了两个宝贵的贡献。第一个是使辅助监督方法适用于浅层模型,而第二个是使深度模型的训练过程获得更可靠的梯度。这些梯度使深度模型能够使用更准确的信息来建立数据与目标之间的正确关联。
在这里插入图片描述
最后,我们在表格中展示了从基础版 YOLOv7 逐步增加组件到 YOLOv9-E 的结果。我们提出的 GELAN 和 PGI 为模型带来了全方位的提升。
在这里插入图片描述

5.5 可视化

本节将探讨信息瓶颈问题并对其进行可视化。此外,我们还将可视化所提出的 PGI 如何利用可靠的梯度来寻找数据与目标之间的正确关联。在图 6 中,我们展示了使用随机初始权重作为前馈在不同架构下获得的特征图的可视化结果。我们可以看到,随着层数的增加,所有架构的原始信息逐渐减少。例如,在 PlainNet 的第 50 层,很难看到物体的位置,而在第 100 层,所有可区分的特征都将丢失。至于 ResNet,尽管在第 50 层仍然可以看到物体的位置,但边界信息已经丢失。当深度达到第 100 层时,整个图像变得模糊。CSPNet 和我们提出的 GELAN 表现都非常出色,它们都能在直到第 200 层时保持支持清晰识别物体的特征。在这些比较中,GELAN 的结果更加稳定,边界信息也更加清晰。
在这里插入图片描述
图 7 用于展示 PGI 是否能够在训练过程中提供更可靠的梯度,以便用于更新的参数能够有效地捕捉输入数据与目标之间的关系。图 7 展示了在 PAN 偏置预热期间 GELAN 和 YOLOv9(GELAN + PGI)的特征图的可视化结果。从图 7(b)和(c)的比较中,我们可以清楚地看到 PGI 准确且简洁地捕捉到了包含物体的区域。对于没有使用 PGI 的 GELAN,我们发现它在检测物体边界时出现了发散,并且在某些背景区域产生了意外的响应。这个实验确认了 PGI 确实能够提供更好的梯度来更新参数,并使主分支的前馈阶段保留更多重要的特征。
在这里插入图片描述

6.结论

在本文中,我们提出使用 PGI(可编程梯度信息)来解决信息瓶颈问题以及深度监督机制不适用于轻量级神经网络的问题。我们设计了一个高效且轻量级的神经网络——GELAN。在目标检测方面,GELAN 在不同的计算模块和深度设置下展现出强大且稳定的性能,确实可以广泛扩展为适合各种推理设备的模型。对于上述两个问题,PGI 的引入使得轻量级模型和深度模型在准确率方面都取得了显著提升。结合 PGI 和 GELAN 设计的 YOLOv9 展现出了强大的竞争力。其出色的设计使得深度模型相较于 YOLOv8,参数数量减少了 49%,计算量减少了 43%,但在 MS COCO 数据集上仍然实现了 0.6% 的 AP 提升。

7. 致谢

作者谨向国家高性能计算中心(NCHC)表示感谢,感谢其提供计算和存储资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值