目标检测 | yolov9 原理和介绍

news2024/9/23 9:31:27

相关系列:
目标检测 | yolov1 原理和介绍
目标检测 | yolov2/yolo9000 原理和介绍
目标检测 | yolov3 原理和介绍
目标检测 | yolov4 原理和介绍
目标检测 | yolov5 原理和介绍
目标检测 | yolov6 原理和介绍
目标检测 | yolov7 原理和介绍
目标检测 | yolov8 原理和介绍
目标检测 | yolov9 原理和介绍
目标检测 | yolov10 原理和介绍
论文:https://arxiv.org/pdf/2402.13616
代码:https://github.com/WongKinYiu/yolov9

1. 简介

 今天的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果可以最接近基本事实。同时,必须设计能够促进获取足够信息进行预测的适当架构。现有方法忽略了输入数据经过逐层特征提取和空间变换时的事实,会丢失大量信息。当数据通过深度网络传输时,本文将深入研究数据丢失的重要问题,即信息瓶颈和可逆函数。我们提出了可编程梯度信息 (PGI) 的概念来应对深度网络实现多个目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权重。此外,设计了一种基于梯度路径规划的广义高效层聚合网络(GELAN)。GELAN 的架构证实 PGI 在轻量级模型上获得了更好的结果。我们在基于 MS COCO 数据集的对象检测上验证了所提出的 GELAN 和 PGI。结果表明,GELAN 仅使用传统的卷积算子来实现比基于深度卷积开发的最先进方法更好的参数利用率。PGI 可用于从轻量级到大型的各种模型。它可用于获取完整的信息,以便从头开始训练模型比使用大型数据集预训练的最先进模型获得更好的结果,比较结果如图 1 所示。
在这里插入图片描述

YOLOv9相较于之前的YOLO版本,引入了以下主要改进:
1.PGI(Programmable Gradient Information):提出了可编程梯度信息的概念,通过辅助的可逆分支生成可靠的梯度信息,解决了深层网络训练中的信息瓶颈问题,允许网络更有效地更新权重。
2.GELAN(Generalized Efficient Layer Aggregation Network):设计了一种新的轻量级网络架构,基于梯度路径规划,考虑了参数数量、计算复杂性、准确性和推理速度,使其适应不同的推理设备。
3.信息瓶颈问题的解决:YOLOv9通过PGI解决了信息瓶颈问题,即在数据通过深层网络时信息丢失的问题,这有助于提高模型训练的效率和准确性。
4.多尺度特征融合:GELAN架构支持多尺度特征融合,提高了模型对不同尺寸目标的检测能力。
5.参数和计算量的优化:YOLOv9在减少参数数量和计算量方面进行了优化,与之前的YOLO版本相比,在保持或提高准确性的同时减少了模型大小和计算需求。
6.改进的检测性能:在MS COCO数据集上的实验结果表明,YOLOv9在对象检测性能上超越了之前版本的YOLO,包括YOLOv8。
7.训练策略的改进:YOLOv9采用了新的训练策略,包括学习率调度、数据增强技术等,进一步提高了模型的训练效果。
8.适用性:YOLOv9的设计使其适用于从轻量级到大型的多种模型,提高了模型的通用性和实用性。
9.辅助监督机制的改进:PGI的设计允许轻量级模型也能从辅助监督机制中受益,这在以前的深度监督机制中是做不到的。
10.开源代码:YOLOv9的代码已经开源,提供了实现细节和训练配置,方便研究者和开发者使用和进一步研究。

 基于深度学习的模型在计算机视觉、语言处理和语音识别等各个领域都表现出比过去的人工智能系统更好的性能。近年来,深度学习领域的研究人员主要关注如何开发更强大的系统架构和学习方法,如cnn [21 - 23,42,55,71,72], Transformers [8,9,40,41,60,69,70], percepvers[26,26,32,52,56,81,81]和Mambas[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所示。
在这里插入图片描述

图 2. 不同网络架构的随机初始权重输出特征图的可视化结果:(a)输入图像,(b)PlainNet,(c)ResNet,(d)CSPNet,(e)提议的 GELAN。从图中我们可以看出,在不同的架构中,提供给目标函数来计算损失的信息会不同程度的损失,我们的架构可以保留最完整的信息,并提供最可靠的梯度信息来计算目标函数。

 目前,缓解这一现象的主要方法如下:(1)可逆体系结构的使用[3,16,19]:该方法主要使用重复输入数据,以显式的方式维护输入数据的信息;(2)掩码建模[1,6,9,27,71,73]的使用:它主要使用重构损失,采用隐式方法最大化提取的特征并保留输入信息;(3)深度监督概念的引入[28,51,54,68]:它使用丢失太多重要信息的浅层特征来预先建立从特征到目标的映射,以确保重要信息可以转移到更深的层。然而,上述方法在训练过程中和推理过程存在不同的缺点。例如,可逆架构需要额外的层来组合重复输入的输入数据,这将显着增加推理成本。此外,由于输出层的输入数据层不能具有太深的路径,这种限制使得在训练过程中难以对高阶语义信息进行建模。至于掩码建模,它的重建损失有时会与目标损失相冲突。此外,大多数掩码机制也会产生与数据不正确的关联。对于深度监督机制,它将产生错误累积,如果浅层监督在训练过程中丢失信息,后续层将无法检索所需的信息。上述现象在困难的任务和小模型上会更显着。
 为了解决上述问题,我们提出了一个新的概念,即可编程梯度信息 (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. Related work 相关工作

2.1. Real-time Object Detectors 实时对象检测器

 目前主流的实时目标检测器是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]作为预测头。最近还提出了一些实时目标检测器,如RT DETR[43],它将其资金放在DETR[4]上。然而,由于 DETR 系列对象检测器在没有相应域预训练模型的情况下应用于新领域非常困难,目前使用最广泛的实时对象检测器仍然是 YOLO 系列。本文选择YOLOv7[63],它已被证明在各种计算机视觉任务和各种场景中都是有效的,作为开发所提出的方法的基础。我们使用 GELAN 使用所提出的 PGI 改进架构和训练过程。上述新方法使所提出的 YOLOv9 是新一代的顶部实时目标检测器。

2.2. Reversible Architectures 可逆架构

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

2.3. Auxiliary Supervision 辅助监督

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

3. Problem Statement 问题陈述

 通常,由于梯度消失或梯度饱和等因素,人们将深度神经网络收敛问题的难度归因于传统深度神经网络确实存在这些现象。然而,现代深度神经网络通过设计各种归一化和激活函数从根本上解决了上述问题。然而,深度神经网络仍然存在收敛速度慢或收敛差的问题。
 在本文中,我们进一步探讨了上述问题的性质。通过对信息瓶颈的深入分析,我们推断该问题的根本原因是,最初来自非常深的网络的初始梯度在传输目标后立即丢失了大量信息。为了确认这种推理,我们前馈了具有不同架构的深度网络,具有初始权重,然后在图 2 中可视化和说明它们。显然,PlainNet 丢失了深层目标检测所需的大量重要信息。至于 ResNet、CSPNet 和 GELAN 可以保留的重要信息的比例,确实与训练后可以获得的准确度呈正相关。我们进一步设计了可逆基于网络的方法来解决上述问题的原因。在本节中,我们将详细阐述我们对信息瓶颈原理和可逆函数的分析。

3.1. Information Bottleneck Principle 信息瓶颈原理

 根据信息瓶颈原理,我们知道数据 X X X在经过变换时可能会导致信息丢失,如式1所示:
I ( X , X ) ≥ I ( X , f θ ( X ) ) ≥ I ( X , g φ ( f θ ( X ) ) ) , (1) I(X,X)\geq I(X,f_\theta(X)) \geq I(X, g_\varphi (f_\theta(X))),\tag{1} I(X,X)I(X,fθ(X))I(X,gφ(fθ(X))),(1)
其中 I I I 表示互信息, f f f g g g 是变换函数, θ θ θ φ φ φ 分别是 f f f g g g 的参数。
 在深度神经网络中, f θ ( ⋅ ) f_θ(·) fθ() g φ ( ⋅ ) g_φ(·) gφ()分别表示深度神经网络中两个连续层的操作。从方程式1,我们可以预测随着网络层数量的增加,原始数据将更有可能丢失。然而,深度神经网络的参数是基于网络的输出和给定的目标,然后通过计算损失函数生成新的梯度来更新网络。可以想象,更深层次的神经网络的输出不太能够保留有关预测目标的完整信息。这将使网络训练过程中使用不完整的信息成为可能,导致梯度不可靠,收敛差。
 解决上述问题的一种方法是直接增加模型的大小。当我们使用大量参数来构建模型时,它能够对数据进行更完整的转换。上述方法即使在数据前馈过程中会丢失信息,仍然有机会保留足够的信息来执行到目标的映射。上述现象解释了为什么在大多数现代模型中宽度比深度更重要。然而,上述结论不能从根本上解决非常深的神经网络中梯度不可靠的问题。下面,我们将介绍如何使用可逆函数来解决问题并进行相对分析。

3.2. Reversible Functions 可逆函数

 当函数 r r r 具有逆变换函数 v v v 时,我们将此函数称为可逆函数,如公式 2 所示。
X = v ζ ( r ψ ( X ) ) , (2) X = vζ (r_ψ (X)),\tag{2} X=vζ(rψ(X)),(2)
 其中 ψ ψ ψ ζ ζ ζ 分别是 r r r v v v 的参数。Data X X X通过可逆函数转换而不丢失信息,如式3所示。
I ( X , X ) = I ( X , r ψ ( X ) ) = I ( X , v ζ ( r ψ ( X ) ) ) . (3) I(X, X) = I(X, r_ψ (X)) = I(X, v_ζ (r_ψ (X))).\tag{3} I(X,X)=I(X,rψ(X))=I(X,vζ(rψ(X))).(3)
 当网络的变换函数由可逆函数组成时,可以得到更可靠的梯度来更新模型。当今几乎所有流行的深度学习方法都是符合可逆属性的架构,例如方程式 4.
X l + 1 = X l + f θ l + 1 ( X l ) , (4) X^{l+1} = X^l + f^{ l+1}_θ (X^l),\tag{4} Xl+1=Xl+fθl+1(Xl),(4)
 其中 l l l 表示 PreAct ResNet 的第 l l l 层, f f f 是第 l l l 层的变换函数。PreAct ResNet [22] 以显式的方式将原始数据 X 重复传递到后续层。尽管这样的设计可以使具有超过几千层的深度神经网络收敛得非常好,但它破坏了我们需要深度神经网络的一个重要原因。也就是说,对于困难的问题,我们很难找到简单的映射函数来将数据映射到目标。这也解释了为什么当层数较小时,PreAct ResNet 的性能比 ResNet [21] 差。
 此外,我们尝试使用掩码建模,允许 Transformer 模型取得重大突破。我们使用近似方法,例如等式5,试图找到 r r r 的逆变换 v v v,以便转换后的特征可以使用稀疏特征保留足够的信息。等式的公式5 如下:
X = v ζ ( r ψ ( X ) ⋅ M ) , (5) X = v_ζ (r_ψ (X) · M ), \tag{5} X=vζ(rψ(X)M),(5)
 其中 M M M 是一个动态二进制掩码。通常用于执行上述任务的其他方法是扩散模型和变分自动编码器,它们都具有寻找逆函数的函数。然而,当我们将上述方法应用于轻量级模型时,会出现缺陷,因为轻量级模型将被参数化到大量原始数据中。由于上述原因,将数据 X X X 映射到目标 Y Y Y 的重要信息 I ( Y , X ) I(Y, X) I(Y,X) 也将面临相同的问题。对于这个问题,我们将使用信息瓶颈的概念[59]来探索它。信息瓶颈公式如下:
I ( X , X ) ≥ I ( Y , X ) ≥ I ( Y , f θ ( X ) ) ≥ . . . ≥ I ( Y , Y ^ ) . (6) I(X, X) ≥ I(Y, X) ≥ I(Y, f_θ (X)) ≥ ... ≥ I(Y, \hat{Y} ). \tag{6} I(X,X)I(Y,X)I(Y,fθ(X))...I(Y,Y^).(6)
 一般来说, 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. Methodology 方法

4.1. Programmable Gradient Information 可编程梯度信息

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

图 3. PGI 和相关的网络架构和方法。( a ) 路径聚合网络 (PAN)) [37], ( b ) 可逆列 (RevCol) [3],( c ) 传统的深度监督,以及 ( d ) 我们提出的可编程梯度信息 (PGI)。PGI主要由三个部分组成:(1)主分支:用于推理的体系结构,(2)辅助可逆分支:生成可靠的梯度,为后向传输提供主分支;(3)多级辅助信息:控制主分支学习可规划的语义信息多层次。

4.1.1 Auxiliary Reversible Branch 辅助可逆分支

 在 PGI 中,我们提出了辅助可逆分支来生成可靠的梯度并更新网络参数。通过提供从数据映射到目标的信息,损失函数可以提供指导并避免从与目标不太相关的不完整前馈特征中找到错误相关性的可能性。我们建议通过引入可逆架构来维护完整信息,但向可逆架构添加主分支会消耗大量的推理成本。我们分析了图 3 (b) 的架构,发现当添加了从深层到浅层的额外连接时,推理时间将增加 20%。当我们将输入数据重复添加到网络的高分辨率计算层(黄色框)时,推理时间甚至超过两倍的时间。
 由于我们的目标是使用可逆架构来获得可靠的梯度,因此“可逆”不是推理阶段唯一必要的条件。鉴于此,我们将可逆分支视为深度监督分支的扩展,然后设计辅助可逆分支,如图 3 (d) 所示。至于由于信息瓶颈而丢失重要信息的主要分支深度特征,它们将能够从辅助可逆分支接收可靠的梯度信息。这些梯度信息将驱动参数学习来辅助提取正确和重要的信息,上述动作可以使主分支获得对目标任务更有效的特征。此外,可逆架构在浅层网络上的表现比一般网络差,因为复杂任务需要在更深的网络中转换。我们提出的方法不强制主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新它。这种设计的优点是所提出的方法也可以应用于较浅的网络。
 最后,由于在推理阶段可以消除辅助可逆分支,因此可以保留原始网络的推理能力。我们还可以选择 PGI 中的任何可逆架构来发挥辅助可逆分支的作用。

4.1.2 Multi-level Auxiliary Information 多级辅助信息

 在本节中,我们将讨论多级辅助信息是如何工作的。包括多个预测分支的深度监督架构如图 3 © 所示。对于目标检测,可以使用不同的特征金字塔来执行不同的任务,例如它们一起可以检测不同大小的对象。因此,在连接到深度监督分支后,将引导浅层特征学习小目标检测所需的特征,此时系统将其他大小对象的位置视为背景。然而,上述行为将导致深度特征金字塔丢失预测目标对象所需的大量信息。关于这个问题,我们认为每个特征金字塔都需要接收所有目标对象的信息,以便后续的主分支可以保留完整的信息来学习各种目标的预测。
 多级辅助信息的概念是在辅助监督的特征金字塔层次层和主分支之间插入一个集成网络,然后使用它来组合来自不同预测头的返回梯度,如图 3 (d) 所示。然后多级辅助信息聚合包含所有目标对象的梯度信息,并将其传递给主分支,然后更新参数。此时,主分支特征金字塔层次结构的特征不会由某些特定对象的信息主导。因此,我们的方法可以缓解深度监督中的破碎信息问题。此外,任何集成网络都可以用于多级辅助信息。因此,我们可以规划所需的语义级别来指导不同大小的网络架构的学习。

4.2. Generalized ELAN 广义ELAN

 在本节中,我们描述了提议的新网络架构——GELAN。通过结合两种神经网络体系结构CSPNet[64]和ELAN[65],这些体系结构是用梯度路径规划设计的,我们设计了广义高效的层聚合网络(GELAN),该网络考虑了权重、推理速度和准确性。它的整体架构如图 4 所示。我们将 ELAN [65] 的能力(最初仅使用卷积层的堆叠)推广到可以使用任何计算块的新架构。
在这里插入图片描述

图4。GELAN的体系结构:(a) CSPNet[64], (b) ELAN[65], ©提出了GELAN。我们模仿 CSPNet 并将 ELAN 扩展到可以支持任何计算块的 GELAN。

5. Experiments 实验

5.1. Experimental Setup 实验装置

 我们使用 MS COCO 数据集验证所提出的方法。所有实验设置都遵循 YOLOv7 AF [63],而数据集是 MS COCO 2017 拆分。我们提到的所有模型都是使用从头开始训练策略进行训练的,训练时间总数为 500 个 epoch。在设置学习率时,我们在前三个 epoch 中使用线性预热,随后的 epoch 根据模型尺度设置相应的衰减方式。对于最后 15 个 epoch,我们关闭马赛克数据增强。有关更多设置,请参阅附录。

5.2. Implimentation Details 放大细节

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

5.3. Comparison with state-of-the-arts 与最先进技术的比较

在这里插入图片描述

表1。最先进的实时目标检测器的比较。

 表 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的准确性。
在这里插入图片描述

图 5. 最先进的实时目标检测器的比较。参与比较的方法都使用 ImageNet 作为预训练的权重,包括 RT DETR [43]、RTMDet [44] 和 PP-YOLOE [74] 等。使用从头开始训练方法的 YOLOv9 明显优于其他方法的性能。

 至于计算量,从最小到最大的最佳模型是 YOLO MS [7]、PP YOLOE [74] 和 RT DETR [43]。从图 5 可以看出,YOLOv9 在计算复杂度方面远远优于从头开始训练方法。此外,与基于深度卷积和基于 ImageNet 的预训练模型相比,YOLOv9 也非常具有竞争力。

5.4. Ablation Studies 消融研究

5.4.1 Generalized ELAN 广义ELAN

 对于 GELAN,我们首先对计算块进行消融研究。我们使用Res块[21]、Dark块[49]和CSP块[64]分别进行实验。表 2 显示,在用不同的计算块替换 ELAN 中的卷积层后,系统可以保持良好的性能。用户确实可以自由地替换计算块并在它们各自的推理设备上使用它们。在不同的计算块替换中,CSP块的性能特别好。它们不仅减少了参数和计算量,而且将 AP 提高了 0.7%。因此,我们选择CSPELAN作为YOLOv9中GELAN的组成部分单元。
在这里插入图片描述

表 2. 各种计算块的消融研究。

 接下来,我们对不同大小的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}}。
在这里插入图片描述

表 3. ELAN 和 CSP 深度的消融研究。

5.4.2 Programmable Gradient Information 可编程梯度信息

 在 PGI 方面,我们分别对主干颈部和颈部的辅助可逆分支和多级辅助信息进行了消融研究。我们设计了辅助可逆分支ICN来使用DHLC[34]链接来获得多级可逆信息。对于多级辅助信息,我们使用 FPN 和 PAN 进行消融研究,PFH 的作用相当于传统的深度监督。所有实验的结果如表 4 所示。从表 4 可以看出,PFH 仅在深度模型中有效,而我们提出的 PGI 可以提高不同组合下的准确性。尤其是在使用 ICN 时,我们得到了稳定和更好的结果。我们还尝试将 YOLOv7 [63] 中提出的引导分配应用于 PGI 的辅助监督,并取得了更好的性能。
在这里插入图片描述

表4。骨干颈部PGI的消融研究。

 我们进一步实现了 PGI 和深度监督在不同尺寸的模型上的概念,并将结果进行了比较,结果如表 5 所示。正如一开始分析的那样,深度监督的引入将导致浅层模型的准确性损失。至于通用模型,引入深度监督会导致性能不稳定,深度监督的设计概念只能带来极深模型的收益。所提出的 PGI 可以有效地处理信息瓶颈和信息破坏等问题,并可以全面提高不同大小的模型的准确性。PGI的概念带来了两个有价值的贡献。第一个是使辅助监督方法适用于浅层模型,第二个是使深度模型训练过程获得更可靠的梯度。这些梯度使深度模型能够使用更准确的信息来建立数据和目标之间的正确相关性。
在这里插入图片描述

表5。PGI的消融研究。

 最后,我们在表中显示了从基线 YOLOv7 到 YOLOv9-E 逐渐增加组件的结果。我们提出的 GELAN 和 PGI 给模型带来了全方位的改进。
在这里插入图片描述

表6。GELAN和PGI的消融研究。

5.5. Visualization 可视化

 本节将探索信息瓶颈问题并将它们可视化。此外,我们还将可视化所提出的 PGI 如何使用可靠的梯度来找到数据和目标之间的正确相关性。在图 6 中,我们展示了在不同架构下使用随机初始权重作为前馈获得的特征图的可视化结果。我们可以看到,随着层数的增加,所有架构的原始信息逐渐减小。例如,在 PlainNet 的第 50 层,很难看到对象的位置,所有可区分的特征将在第 100 层丢失。至于 ResNet,虽然对象的位置仍然可以在第 50 层看到,但边界信息会丢失。当深度达到第 100 层时,整个图像变得模糊。CSPNet 和提议的 GELAN 都表现得非常好,它们都可以保持支持明确识别对象的特征,直到第 200 层。在比较中,GELAN 具有更稳定的结果和更清晰的边界信息。
在这里插入图片描述

图6所示。不同深度的PlainNet、ResNet、CSPNet和GELAN的随机初始权值输出的特征映射(可视化结果)。经过 100 层后,ResNet 开始产生足以混淆对象信息的前馈输出。我们提出的 GELAN 仍然可以保留多达 150 层的完整信息,并且仍然足够区分到第 200 层。

 图 7 用于显示 PGI 是否可以在训练过程中提供更可靠的梯度,以便用于更新的参数可以有效地捕获输入数据和目标之间的关系。图 7 显示了 GELAN 和 YOLOv9 (GELAN + PGI) 在 PAN 偏差预热中的特征图的可视化结果。从图 7(b) 和 ( c ) 的比较中,我们可以清楚地看到 PGI 准确而简洁地捕获了包含对象的区域。至于不使用 PGI 的 GELAN,我们发现它在检测对象边界时存在分歧,并且还在一些背景区域产生了意想不到的响应。该实验证实 PGI 确实可以为更新参数提供更好的梯度,并使主分支的前馈阶段能够保留更重要的特征。
在这里插入图片描述

图 7. GELAN 和 YOLOv9 (GELAN + PGI) 在偏差热身的一个时期之后的 PAN 特征图(可视化结果)。GELAN 最初有一些分歧,但在添加 PGI 的可逆分支后,它更有能力专注于目标对象。

6. Conclusions 结论

 在本文中,我们建议使用 PGI 来解决信息瓶颈问题,深度监督机制不适合轻量级神经网络的问题。我们设计了 GELAN,这是一种高效且轻量级的神经网络。在目标检测方面,GELAN 在不同的计算块和深度设置下具有强大且稳定的性能。它确实可以广泛扩展为适合各种推理设备的模型。对于上述两个问题,PGI 的引入允许轻量级模型和深度模型实现高精度的显着改进。结合 PGI 和 GELAN 设计的 YOLOv9 显示出很强的竞争力。它出色的设计允许深度模型将参数数量减少 49%,与 YOLOv8 相比计算量减少了 43%,但在 MS COCO 数据集上仍提高了 0.6% AP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode每日一题】——301.删除无效的括号

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 广度优先搜索 二【题目难度】 困难 三【题目编号】 301.删除无效的括号 四【题目描述】 给…

C++ 内存布局 - Part4: 多继承与this指针调整

1. 多继承代码 #include <iostream> #include <cstdio> using namespace std;class Base1 { public:virtual void fooA() { cout << "Base1::fooA" << endl; }virtual void fooB() { cout << "Base1::fooB" << endl;…

叉车ai行人防撞预警系统,前后盲区防撞报警,让行车更安全!

标准配件&#xff1a;主机前/后/内置3个镜头喇叭电源线保险丝摄像头固定支架&#xff08;含螺丝&#xff09;天线主机固定胶条 九盾叉车ai行人防撞预警系统功能主要透过三颗独立摄像头&#xff0c;结合深度学习算法以完成机器视觉的识别工作。其中两颗具备补光设计的超广角摄像…

文本匹配任务(上)

文本匹配任务 1.文本匹配介绍1.1文本匹配定义1.1.1狭义定义1.1.2广义定义 1.2文本匹配应用1.2.1问答对话1.2.1信息检索 2.文本匹配--智能问答2.1基本思路2.2技术路线分类2.2.1按基础资源划分2.2.2 答案生成方式2.2.3 NLP技术 2.3智能问答-Faq知识库问答2.3.1运行逻辑2.3.2核心关…

DC-DC FB分压电阻计算 (MP1584 SY8205为例)

【本文发布于https://blog.csdn.net/Stack_/article/details/141371702&#xff0c;未经许可不得转载&#xff0c;转载须注明出处】 获取文件 【MP1584 MP2451 SY8205 SY8201 FB分压电阻计算】 一般DC-DC芯片对输出电压的调节&#xff0c;是以FB引脚达到0.6V或者0.8V为止的&…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第六篇 嵌入式GUI开发篇-第八十五章 Qt控制硬件

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Java 数据结构】排序

排序 排序排序是什么排序相关概念稳定性比较排序非比较排序内部排序外部排序 常见比较排序冒泡排序基本思想代码实现 选择排序基本思想代码实现 插入排序基本思想代码实现 希尔排序基本思想代码实现 堆排序基本思想代码实现 快速排序基本思想代码实现优化其他实现寻找基准非递归…

如何使⽤组将⼀个文件拆分成多个文件 (LINQ)(C#)

文章目录 一、背景二、实现步骤三、完整示例四、总结 在日常开发过程中&#xff0c;我们可能会遇到需要将一个大型文件拆分成多个小文件的需求。例如&#xff0c;为了便于传输、处理或备份&#xff0c;我们可以将一个大的日志文件拆分成多个小文件。在C#中&#xff0c;我们可以…

Spring模块详解Ⅱ

目录 Spring Beans模块详解1. 什么是 Bean?2. Spring Bean的配置方式2.1 基于 XML 配置例子&#xff1a; 2.2 基于注解配置例子&#xff1a; 2.3 基于 Java 配置&#xff08;JavaConfig&#xff09;例子&#xff1a; 3. Bean 的生命周期生命周期回调的例子&#xff1a; 4. Bea…

数据采集-->kafka-->hdfs

数据采集到kafka flume: a1.sources r1 a1.channels c1a1.sources.r1.type TAILDIR a1.sources.r1.filegroups f1 a1.sources.r1.filegroups.f1 /opt/installs/flume1.9/job/a.log a1.sources.r1.positionFile /opt/installs/flume1.9/job/taildir-kafka.jsona1.channe…

react antd TreeSelect实现自定义标签

<ProFormTreeSelectlabel"接收对象"name"receiverObjects"colProps{{ span: 16 }}labelCol{{span: 6,}}wrapperCol{{span: 18,}}rules{[{ required: true }]}fieldProps{{showSearch: true,multiple: true,// autoClearSearchValue: true,filterTreeNod…

《通义千问AI落地—中》:前端实现

一、前言 本文源自微博客且已获授权,请尊重版权. 书接上文&#xff0c;上文中&#xff0c;我们介绍了通义千问AI落地的后端接口。那么&#xff0c;接下来我们将继续介绍前端如何调用接口以及最后的效果&#xff1b;首先看效果&#xff1a; 上述就是落地到本微博客以后的页面效果…

三角形最小路径和[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个三角形triangle&#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果…

代码随想录 day 49 单调栈

第十章 单调栈part02 42. 接雨水 接雨水这道题目是 面试中特别高频的一道题&#xff0c;也是单调栈 应用的题目&#xff0c;大家好好做做。 建议是掌握 双指针 和单调栈&#xff0c;因为在面试中 写出单调栈可能 有点难度&#xff0c;但双指针思路更直接一些。 在时间紧张的情…

深入探讨 Nginx:安装、配置及优化指南

一、Nginx 概述及编译安装 1、概述 Nginx是一个高性能的开源HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3邮件代理服务器。它最初由Igor Sysoev于2002年开发&#xff0c;并于2004年首次发布。Nginx以其高并发性、低资源消耗和灵活的配置能力而受到广泛关注&#x…

卡码网KamaCoder 105. 有向图的完全可达性

题目来源&#xff1a;105. 有向图的完全可达性 C题解1&#xff1a; #include <iostream> #include <vector> #include <algorithm>using namespace std;int main(){int N, K;cin>>N>>K;// 如果边的数量不够&#xff0c;则一定不能到达所有点if…

使用Harbor搭建Docker私有仓库

一、harbor&#xff1a;开源的企业级的docker仓库软件&#xff0c;仓库就是保持镜像的。 1.仓库分两种&#xff1a;私有仓库&#xff1a;运维用的最多 公有仓库 2.harbor是有图形化的&#xff0c;页面UI展示的一个工具&#xff0c;操作直观 3.注意点&#xff1a;harbor都是由…

拖拽式报表设计器优点好 实现流程化办公就靠它!

当前&#xff0c;实现流程化办公是很多企业都想要实现的目标。利用低代码技术平台、拖拽式报表设计器的优势特点&#xff0c;可以为企业降低开发成本、提升办公效率、创造更多市场价值。那么&#xff0c;您知道拖拽式报表设计器的优点是什么吗&#xff1f;通过本文一起了解拖拽…

疫情期间我面试了13家企业软件测试岗位,一些面试题整理

项目的测试流程 拿到需求文档后&#xff0c;写测试用例 审核测试用例 等待开发包 部署测试环境 冒烟测试&#xff08;网页架构图&#xff09; 页面初始化测试&#xff08;查看数据库中的数据内容和页面展示的内容是否一致&#xff0c;并且是否按照某些顺序排列&#xff09…

JavaScript_9_练习:随机点名

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>练习&#xff1a;随机点名</title&g…