yolov9文献阅读记录

news/2024/7/11 0:01:11 标签: 深度学习, pytorch, 人工智能, YOLO, python

本文记录了yolov9文献的阅读过程,对主要内容进行摘选翻译,帮助理解原理和应用,包括摘要、主要贡献、网络结构、主要模块,问题描述和试验对比等内容。

    • 文献
    • 摘要
    • 前言摘选
    • 主要贡献
    • 相关工作
      • 可逆性结构
      • 辅助监督
    • 问题描述
      • 信息瓶颈原理
      • 可逆函数
    • 网络结构
      • 可编程梯度信息
        • 辅助可逆支路
        • 多层次的辅助信息
      • 广义ELAN(GELAN)
    • 试验
      • 对比实验
      • 消融实验
      • 可视化
    • 结论

文献

在这里插入图片描述

摘要

在这里插入图片描述

现在的深度学习方法主要集中在如何设计最合适的目标函数,使得模型的预测结果能够最接近地面真值。同时,一个合适的架构,可以方便地获取足够的信息预测的设计。现有的方法忽略了一个事实,即当输入数据进行逐层特征提取和空间变换时,会丢失大量的信息。本文将深入研究数据在深度网络中传输时造成数据丢失的重要原因,即信息瓶颈和可逆函数。我们提出了可编程梯度信息(PGI)的概念,以应对深度网络实现多目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权值。此外,设计了一种新的轻量级网络结构–基于梯度路径规划的广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量化模型上取得了卓越的成果。我们验证了所提出的GELAN和PGI在MSCOCO数据集上的基于对象的目标探测。结果表明**,Gelan只使用传统的卷积算子来获得比基于深度卷积的最新方法更好的仪器利用率**。PGI可用于从轻量级到大型的各种型号它可以用来获取完整的信息,这样从零开始训练的模型比使用大型数据集预先训练过的最先进的模型能够获得更好的结果,比较结果如图1所示。源代码在 代码。
在这里插入图片描述
图一。MS COCO数据集上实时目标检测器的比较。GELAN和基于PGI的对象检测方法超过了所有以前的训练从头开始的对象检测性能的方法。在精度方面,新方法优于RT DETR[43]使用大型数据集进行预训练,并且优于基于深度卷积的设计 YOLO MS[7]参数利用率方面

前言摘选

在这里插入图片描述

在深度网络中,输入数据在前馈过程中丢失信息的现象通常被称为信息瓶颈。[59],其示意图如图2所示。目前,缓解这一现象的主要方法有以下几种:(1)可逆结构的使用【3,16,19】:这种方法主要使用重复输入数据,并以显式的方式维护输入数据的信息;(2)掩蔽建模【1,6,9,27,7173】的使用:它主要使用重构损失,并采用隐式的方式最大化提取的特征并保留输入信息;(3)深度监控概念的引入【28,51,54,68】:它使用没有丢失太多重要信息的浅层特征,预先建立从特征到目标的映射,以确保重要信息可以传输到更深的层。然而,上述方法在训练过程和推理过程中都存在着不同的弊端。例如,一个可逆的架构需要附加层结合重复输入数据,这将显着增加的推断成本。此外,由于输入数据层到输出层不能有一个太深的路径,这种限制将使它难以在训练过程中建模高阶语义信息领先”之义塞斯对于屏蔽建模,其重建损失有时与目标损失相冲突。此外**,大多数掩码机制也会产生与数据不正确的关联**。对于深层监督机制,会产生误差积累,如果浅层监督在训练过程中丢失信息,后续层将无法检索到所需信息。上述现象在困难的任务和小模型上会更加显著
在这里插入图片描述
如图2所示。不同网络结构随机初始权值输出特征映射的可视化结果:(a)输入图像,(b)PlainNet、©ResNet(d)CSPNet和(e)拟议的GELAN。从图中我们可以看到,在不同的结构中,提供给目标函数计算损失的信息都有不同程度的丢失,而我们的结构可以保留最完整的信息,并为目标函数的计算提供最可靠的梯度信息

在这里插入图片描述

在这里插入图片描述

为了解决上述问题,我们提出了一个新的概念,这是可编程梯度信息(PGI)。其概念是通过辅助可逆分支生成可靠的梯度,使深层特征仍能保持执行目标任务的关键特征。辅助可逆支路的设计避免了传统深度监控过程中集成多径特性可能带来的信号损失。换句话说,我们在不同的语义层上编程梯度信息传播,从而达到最佳的训练效果。PGI的可逆结构是建在辅助分支上,所以没有额外的费用。由于PGI可以自由选择适合目标任务的损失函数,它也克服了掩模建模所遇到的问题。提出的PGI机制可以应用于各种规模的深度神经网络比只适用于非常深的神经网络的深度监督机制更通用

主要贡献

在这里插入图片描述
在本文中,我们还设计了基于ELAN的广义ELAN(GELAN),同时考虑了参数个数、计算复杂度、精度和推理速度。这种设计允许用户为不同的推理设备任意选择适当的计算块。我们将提出的PGI和GELAN相结合,设计了新一代的YOLO系列目标检测系统,我们称之为YOLOv9。我们使用MSCoco数据集进行实验,实验结果验证了我们提出的YOLOv9在所有的比较中实现了最高的性能。
在这里插入图片描述

我们将本文的贡献总结如下:
1.我们从可逆功能的角度对现有的深度神经网络架构进行了理论分析成功地解释了许多过去难以解释的现象。在此基础上设计了PGI和辅助可逆转分支,取得了良好的效果。
2.我们设计的PGI解决了深度监控只能用于深度神经网络架构的问题,从而使新的轻量级架构真正应用到日常生活中
3.我们设计的GELAN仅使用传统的卷积实现了比基于最先进技术的深度卷积设计更高的参数利用率,同时显示出轻便、快速、准确的巨大优势
4.结合提出的PGI和GELAN,对象检测性能的YOLOv9在MSCOCO数据集大大超过现有的实时对象检测器在各个方面。

相关工作

在这里插入图片描述

本文选择YOLOv7[63],已经在各种计算机视觉任务和各种场景中被证明是有效的,以此为基础来开发所提出的方法。我们使用GELAN改进的架构和训练过程与建议的PGI。上述新方法使YOLOv9成为新一代的顶级实时目标检测器。

可逆性结构

在这里插入图片描述

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

辅助监督

在这里插入图片描述

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

问题描述

在这里插入图片描述

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

信息瓶颈原理

在这里插入图片描述

根据信息瓶颈原理,我们知道数据X在进行转换时可能会造成信息丢失,如式。

在深度神经网络中,f(·)和g(·)分别代表了两个连续层的操作。由式1可以预测随着网络层数的增加,原始数据将更容易丢失。然而,深度神经网络的参数是基于网络的输出以及给定的目标,然后通过计算损失函数生成新的梯度后更新网络。正如人们可以想象的那样,更深层次的神经网络的输出不太能够保留有关预测目标的完整信息。这将有可能在网络训练过程中使用不完整的信息,从而导致不可靠的梯度和较差的收敛

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

可逆函数

在这里插入图片描述

当一个函数r有一个反变换函数v时,我们称这个函数为可逆函数,如式2所示。

数据X通过可逆函数转换而不丢失信息,如式所示。3.

当网络的变换函数由可逆函数组成时,可以得到更可靠的梯度来修正模型。当今几乎所有受欢迎的深度学习方法是符合可逆特性的体系结构,如式4。
在这里插入图片描述

其中l表示PreAct ResNet的第L层,f是第l层的变换函数。PreAct 加粗样式ResNet[22]以显式的方式重复地将原始数据X传递到后续层。虽然这样的设计可以让一千层以上的深度神经网络收敛得非常好但是破坏了我们需要深度神经网络的一个重要原因。也就是说,对于困难的问题,我们很难直接找到简单的映射函数将数据映射到目标。这也解释了为什么当层数较少时PreAct ResNet的性能不如ResNet。21]。

在这里插入图片描述

此外,我们尝试使用屏蔽建模,允许转换器模型实现显著的突破。我们使用近似的方法,如公式5,试图找到r的逆变换u,使变换后的特征可以保留足够的信息,使用稀疏的功能,方程式的形式。如公式5所示:
在这里插入图片描述

其中M是一个动态二进制掩码。其他常用的方法是扩散模型和变分自编码器,它们都具有求反函数的功能。然而,当我们将上述方法应用于一个轻量级模型时,就会出现缺陷,因为轻量级模型对于大量的原始数据会参数化不足。由于上述原因,将数据X映射到目标Y的重要信息(Y,X)也将面临同样的问题。对于这个问题,我们将探讨它使用信息瓶颈的概念[59],信息瓶颈的计算公式如下:
在这里插入图片描述
在这里插入图片描述
一般来说,I(Y,X)只会占据I(X,X)中很小的一部分。然而,它是关键的目标任务。因此,即使在前馈阶段丢失的信息量并不显著,只要I(Y,X)被覆盖,训练效果就会受到很大影响。由于轻量化模型本身处于欠参数化状态,在前馈阶段很容易丢失很多重要信息。因此,我们对于轻量级模型的目标是如何从I(X,X)中准确地过滤|(Y,X)。至于完全保存X的信息,那是很难做到的。基于以上分析,我们希望提出一种新的深度神经网络训练方法**,既能生成可靠的梯度来更新模型,又能适用于浅层和轻量级的神经网络**。

网络结构

在这里插入图片描述
图3所示。PGI和相关网络体系结构和方法。(a)路径聚合网络[37],(b)可逆色谱柱(RevCol)[3],©传统的深部监督,和(d)我们提出的可编程梯度信息(PGI)。PGI主要由三部分组成:(1)主枝:用于推理的体系结构;(2)**辅助可逆枝:**生成可靠的梯度,为主枝提供向后传输;(3)多级辅助信息:控制主分支学习可规划的多层次语义信息

可编程梯度信息

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

辅助可逆支路

在这里插入图片描述

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

最后,由于在推理阶段可以去除辅助可逆支路,因此可以保持原网络的推理能力。我们也可以选择PGI中任意的可逆结构来起到辅助可逆分支的作用

多层次的辅助信息

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

广义ELAN(GELAN)

在这里插入图片描述
图4所示。GELAN的体系结构:(a)CSPNet[64],(b)环境法网络[65],以及©提议的Gelan。我们模仿CSPNet和ELAN扩展到可
以支持任何计算块。
在这里插入图片描述

在本节中,我们将介绍所提出的新的网络体系结构-GELAN。通过结合两种神经网络架构,CSPNet[64]和ELAN[651,在梯度路径规划的基础上,**设计了具有轻量化、推理速度快、精度高的广义高效层聚合网络(GELAN)。**其总体架构如图4所示。我们将ELAN的性能进行了遗传化。[65],最初只使用卷积层的堆叠,到一个可以使用任何计算块的新架构。

试验

对比实验

在这里插入图片描述

消融实验

在这里插入图片描述
在这里插入图片描述

可视化

在这里插入图片描述
GELAN随机初始权值输出的特征图(可视化结果)经过100层后,ResNet开始图6所示。不同深度Plain Net、ResNet、CSpNet、产生前馈输出,该输出足以模糊对象信息。我们提出的Gelan仍然可以保留相当完整的信息,直到第150层,并且仍然有很好的区分直到第200层

结论

在这里插入图片描述

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


http://www.niftyadmin.cn/n/5468812.html

相关文章

配置vite配置文件更改项目端口、使用@别名

一、配置vite配置文件更改项目端口 vite官方文档地址:开发服务器选项 | Vite 官方中文文档 (vitejs.dev) 使用: 二、使用别名 1. 安装 types/node types/node 包允许您在TypeScript项目中使用Node.js的核心模块和API,并提供了对它们的类型…

Amdroid Studio 下载及安装(保姆级)

下载 下载地址:官方下载地址https://developer.android.google.cn/studio/archive 拉到最下面 安装 路径自己改 官方下载地址 配置SDK并下载 等待下载完成 创建一个空白项目 名字路径自己改,语言选Java 构建配置语言:我没改选的默认的…

IP知识详解

IP基本认识 IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。 网络层与数据链路层有什么关系呢? IP 的作用是主机之间通信…

为什么索引的底层结构是B+树

B树 1.数据库与数据交互的单位是page,而B树的每个节点都是一个page,访问一个节点,就相当于进行了一次I/O操作。所以访问的节点越少,查找效率越大。而B树是矮胖的,查找深度也不会太大。 2.B树中的节点是有序存储的,对于范围查询、排…

django-hexo-admin(一个基于django的hexo博客平台)

django-hexo-admin 一个过分简单的前后端分离的基于django、vue3的hexo博客平台后台管理系统 1. 项目介绍 一个异常简单的但理论上能够完全保留hexo生态的博客后台管理系统。仅仅对hexo的source以及输出路径public做出了一定的硬性调整,所以如果你很熟悉hexo,那么你将非常轻…

Flink SQL系列之:基于Flink SQL查询Topic中序列化的Debezium数据格式字段

Flink SQL系列之:基于Flink SQL查询Topic中序列化的Debezium数据格式字段 一、表结构二、查询Topic中表的数据三、反序列化字段一、表结构 CREATE TABLE IF NOT EXISTS record_rt (id decimal(20,0) COMMENT "主键",follow_entity_type <

Rust语言之属性宏(Attribute Macro)derive

文章目录 Rust语言之属性宏&#xff08;Attribute Macro&#xff09;derive Rust语言之属性宏&#xff08;Attribute Macro&#xff09;derive 属性宏是一种基于属性的宏&#xff0c;用于修改、扩展或注解 Rust 代码。它们通常用于为函数、结构体、枚举、模块等添加元数据或自…

Linux下docker运行python

前言 本机开发环境众多&#xff0c;python版本都好多个&#xff0c;虽然可以通过conda管理多个虚拟环境&#xff0c;但还是不能像容器那样进行进程间的隔离。于是打算试下docker下运行python&#xff0c;而且生产环境很多时候也是用容器来跑应用&#xff0c;环境统一、方便扩容…