当前位置: 首页 > news >正文

YOLOV9论文解读

代码:https://github.com/WongKinYiu/yolov9
论文:https://arxiv.org/abs/2402.1361
本文提出可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN),最终铸成YOLOv9目标检测全新工作!性能表现SOTA!在各个方面都大大超过了现有的实时目标检测器,优于RT DETR、YOLOv8等网络,代码刚刚开源

一、性能对比概况

image.png
可以看出在是目前主流目标检测中的SOTA。

二、详细性能数值对比

现有方法中性能最好是用于轻量级模型的YOLO MS-S,用于中等模型的YOLO MS,用于通用模型的YOLOv7 AF,以及用于大型模型的YOLOv8-X 。
与YOLO MS 相比,YOLOv9的参数减少了约10%,计算量减少了约5∼15%,但在AP方面仍提高了0.4∼和0.6%。
与YOLOv7 AF相比,YOLOv9-C的参数少了42%,计算量少了21%,但实现了相同的AP(53%)。
与YOLOv8-X相比,YOLOv9-X的参数减少了15%,计算量减少了25%,AP显著提高了1.7%。
YOLOv9是以上方法中性能SOTA,各方面都有所提升。
image.png
image.png

三、改进点

  1. 分别基于YOLOV7和Dynamic YOLOV7来构建通用版本和扩展版本;
  2. 网络结构:
    1. 训练时,使用PGI网络结构
    2. 在CSPNet块中,GELAN替换了ELAN;
    3. 简化了下采样模块;
    4. 优化了anchor free 预测头;
  3. PGI的 auxiliary loss 按照YOLOv7的auxiliary loss;

四、为什么提出PGI?

目前主流的实时物体探测器是YOLO系列,这些模型大多数使用CSPNet或ELAN及其变体作为主要的计算单元。
在特征集成方面,通常使用改进的PAN或FPN作为模块,然后使用改进的YOLOv3 head 或FCOS head 作为预测头。最近也提出了一些实时目标探测器,如RT DETR,它将其应用于DETR上。
然而,由于DETR系列中没有相应领域预训练模型的对象检测器很难应用于新的领域,目前应用最广泛的实时对象检测器仍然是YOLO系列。
本文选择YOLOv7作为基础,该方法在各种计算机视觉任务和各种场景中都被证明是有效的。我们使用GELAN来改进所提出的PGI的架构和训练过程。上述新方法使所提出的YOLOv9成为新一代的顶级实时对象检测器。

4.1 可逆架构 Reversible Architectures

可逆架构的计算单元必须保持可逆转换的特性,这样才能保证每层计算单元的输出特征图能够保留完整的原始信息。
之前,RevCol 将传统的可逆单元推广到多个层次,这样做可以扩展由不同层单元表示的语义层次。
通过对各种神经网络结构的文献综述,我们发现有许多具有不同程度可逆性的高性能结构。
例如:

  • Res2Net模块以分层的方式将不同的输入分区与下一个分区结合起来,并将所有转换后的分区连接起来。
  • CBNet通过复合主干重新引入原始输入数据,获得完整的原始信息,并通过各种组合方法获得不同层次的多级可逆信息。这些网络架构通常具有良好的参数利用率,但是额外的复合层会导致推理速度较慢。
  • DynamicDet 结合了CBNet和高效实时目标探测器YOLOv7,在速度、参数数量和精度之间实现了很好的权衡。

本文介绍了动态数据网络体系结构作为设计可逆分支的基础。此外,在所提出的PGI中还进一步引入了可逆信息。所提出的新架构在推理过程中不需要额外的连接,因此它可以完全保留速度、参数量和精度等方面的优点。

4.2 辅助监督 Auxiliary Supervision

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

五、可编程梯度信息网络结构 PGI

5.1 PGI进化概述

Programmable Gradient Information,PGI进化对比:
image.png image.png image.png image.png
路径聚合网络(Path Aggregation Network,PAN)结构
可逆列卷积网络,Reversible Columns (RevCol)
conventional deep supervision,深度监督网络
PGI主要由三个部分组成:

  • (1)主要分支:用于推理的架构。
  • (2)辅助可逆分支:生成可靠的梯度为向后传输提供主分支,
  • (3)多级辅助信息分支:控制主分支学习可规划的多级语义信息。

推理过程只使用了主分支,因此不需要任何额外的推理成本。另外两个分支用于解决或减缓深度学习方法中的几个重要问题。
辅助可逆分支:为了处理神经网络深化带来的问题。
多级辅助信息:为了处理由深度监督引起的错误积累问题,特别是针对多个预测分支的体系结构和轻量级模型。

5.2 辅助可逆分支 Auxiliary Reversible Branch

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

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

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

六、GElAN网络结构 Generalized ELAN

在本节中,我们将描述所提出的新的网络架构-GELAN。通过结合采用梯度路径规划设计的CSPNet 和ELAN 两种神经网络架构,设计了考虑轻量级、推理速度和精度的广义高效层聚合网络(GELAN)。它的总体架构如图4所示。我们将ELAN 的能力推广到最初只使用卷积层的堆叠,到可以使用任何计算块的新架构。
image.png
模仿CSPNet,并将ELAN扩展到可以支持任何计算块的GELAN中。

七、研究

7.1 Generalized ELAN

对于GELAN,我们首先对计算块进行替换研究。我们分别使用Res块、Dark块和CSP块进行实验。
image.png
从表中可以看出,不同的计算块替换ELAN中的卷积层后,可以保持良好的性能。用户确实可以自由地替换计算块,并在他们各自的推理设备上使用它们。在不同的计算块替换中,CSP块表现得特别好。它们不仅减少了参数量和计算量,而且使AP提高了0.7%。因此,我们选择CSPELAN作为YOLOv9中GELAN的组成单元。

接下来,我们对不同大小的GELAN进行ELAN块深度和CSP块深度实验,结果如表所示。

image.png

我们可以看到,当ELAN的深度从1增加到2时,精度显著提高。但当深度大于或等于2时,无论是提高ELAN深度还是CSP深度,参数的数量、计算量和精度始终呈线性关系。这意味着GELAN对深度不敏感。
换句话说,用户可以任意组合GELAN中的组件来设计网络体系结构,得到一个没有特殊设计的性能稳定的模型。在表3中,对于YOLOv9-{S,M,C},我们将ELAN深度和CSP深度的配对设置为{{2,3}、{2、1}、{2、1}}。

7.2 Programmable Gradient Information

在PGI方面,我们分别对主干和颈部的辅助可逆分支和多级辅助信息进行了消融研究。
我们设计了辅助可逆分支ICN,利用DHLC链接获取多级可逆信息。在多级辅助信息方面,我们使用FPN和PAN进行消融研究,PFH的作用等同于传统的深度监督。所有实验结果见表。
image.png
从表4中可以看出,PFH仅在深度模型中有效,而我们提出的PGI在不同组合下可以提高精度。特别是在使用ICN时,我们得到了稳定和更好的结果。我们还尝试将YOLOv7 中提出的铅头引导分配应用于PGI的辅助监督中,取得了更好的性能。

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

最后,我们在表中展示了从基线YOLOv7到YOLOv9- E逐渐增加的组件的结果。我们提出的GELAN和PGI给模型带来了全面的改进。
image.png

7.3 特征图信息传递可视化研究

本节将探讨信息传递瓶颈问题,并将其可视化。
image.png
在图6中,展示了在不同架构下使用随机初始权值作为feedforward,所获得的特征图的可视化结果。
我们可以看到,随着层数的增加,所有架构的原始信息都会逐渐减少。
例如:

  • PlainNet第50层,很难看到物体的位置,所有可区分的特征都将在第100层丢失。
  • ResNet,在第50层仍然可以看到物体的位置,但边界信息已经丢失。当深度达到第100层时,整个图像就变得模糊了。
  • CSPNet和GELAN都表现得很好,都可以保持清晰识别对象的特性;直到第200层,GELAN的结果更稳定,边界信息更清晰。

图7用于显示PGI是否可以在训练过程中提供更可靠的梯度,从而使用于更新的参数能够有效地捕获输入数据与目标之间的关系。
image.png
图7显示了GELAN和YOLOv9(GELAN + PGI)的PAN特征图偏置预热中1个迭代后的可视化结果。
从图7(b)和©的比较中,我们可以清楚地看到,PGI准确而简洁地捕获了包含目标的区域。

相关文章:

YOLOV9论文解读

代码:https://github.com/WongKinYiu/yolov9论文:https://arxiv.org/abs/2402.1361本文提出可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN),最终铸成YOLOv9目标检测全新工作!性能表现SOTA!在各个方…...

【Spring】21 通过@Primary注解优化注解驱动的自动装配

文章目录 Primary注解简介优势和适用场景小结 Spring 框架提供了强大的依赖注入机制,其中 Autowired 注解是一种常用的方式。然而,当存在多个候选 bean 时,通过类型自动装配可能导致选择困难。为了更好地控制这一过程,Spring 引入…...

【HTML】HTML基础7.3(自定义列表)

目录 标签 效果 代码 注意 标签 <dl> <dt>自定义标题</dt><dd>内容1</dd><dd>内容2</dd><dd>内容3</dd> 。。。。。。 </dl> 效果 代码 <dl><dt>蜘蛛侠系列</dt><dd>蜘蛛侠1</dd…...

java设计模式课后作业(待批改)

此文章仅记录学习&#xff0c;欢迎各位大佬探讨 实验&#xff08;一&#xff09; 面向对象设计 实验目的 ①使用类来封装对象的属性和功能&#xff1b; ②掌握类变量与实例变量&#xff0c;以及类方法与实例方法的区别&#xff1b; 知识回顾 详情见OOP课件 实验内容…...

qt 语音引擎 QTextToSpeech Microsoft SAPI

QT中语音播报的代码 在QT中实现语音播报可以使用QTextToSpeech类&#xff0c;具体代码如下&#xff1a; #include <QCoreApplication> #include <QTextToSpeech> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 创…...

react hook: useimperativeHandle

通过 useImperativeHandle&#xff0c;子组件可以选择性地暴露给父组件某些属性或方法&#xff0c;而不是将所有属性和方法暴露出去。 父组件 获得自组件的 ref&#xff0c;就能通过该 ref 来调用 focus来聚焦等功能 在 forwardRef 包装的组件中&#xff0c;ref 固定地是第二个…...

30天自制操作系统(第28天)

28.1 alloca __alloca 会在下述情况下被 C 语言的程序调用&#xff08;采用 near-CALL 的方式&#xff09;。 1、要执行的操作从栈中分配 EAX 个字节的内存空间&#xff08; ESP - EAX; &#xff09; 2、要遵守的规则不能改变 ECX 、 EDX 、 EBX 、 EBP 、 ESI 、 EDI的值&am…...

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker&#xff0c;下一步拉取Nginx最新的Docker镜像&#xff1a; docker pull nginx:latest查看拉取下来的镜像&#xff1a; docker images二、启动服务 创建Docker容器&#xff1a; docker run --name {projectname} -p 80…...

coqui-ai/TTS 案例model文件

GitHub - coqui-ai/TTS: &#x1f438;&#x1f4ac; - a deep learning toolkit for Text-to-Speech, battle-tested in research and production Coqui AI的TTS是一款开源深度学习文本转语音工具&#xff0c;以高质量、多语言合成著称。它提供超过1100种语言的预训练模型库&…...

如何利用API接口进行高效的商品变体管理?

要利用API接口进行高效的商品变体管理&#xff0c;您需要执行一系列策略和技术步骤来确保数据的准确性和实时性。以下是详细的指南&#xff1a; 1. 确定变体管理需求 分析产品&#xff1a;识别具有变体的产品&#xff0c;并明确这些变体的属性&#xff08;如尺寸、颜色、材质…...

扼杀网络中的环路:STP、RSTP、MSTP

目录 前言&#xff1a; 一、STP&#xff08;Spanning Tree Protocol&#xff09; 1.1 STP功能 1.2 STP应用 二、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff09; 2.1 RSTP功能 2.2 RSTP应用 三、MSTP&#xff08;Multiple Spanning Tree Protocol&#xff0…...

青少年如何从零开始学习Python编程?有它就够了!

文章目录 写在前面青少年为什么要学习编程 推荐图书图书特色内容简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家带来一本非常适合青少年学习编程的图书&#xff0c;快来看看吧~ 青少年为什么要学习编程 青少年学习编程&#xff0c;就好比在他们年轻时就开始掌握一种…...

触发HTTP preflight预检及跨域的处理方法

最近在做需求的过程中&#xff0c;遇到了很多跨域和HTTP预检的问题。下面对我所遇到过的HTTP preflight和跨域的相关问题进行总结&#xff1a; 哪些情况会触发HTTP preflight preflight属于cors规范的一部分&#xff0c;在有跨域的时候&#xff0c;在一定情况下会触发preflig…...

【算法可视化】搜索算法专题

运行平台 Algorithm Visualizer 选数 [NOIP2002 普及组] 选数 // 导入可视化库 { const { Tracer, Array1DTracer, LogTracer, Layout, VerticalLayout } require(algorithm-visualizer); // }const N 4, K 3; //从包含4个元素的集合中选出3个数 let ans 0 //方案数 co…...

编写dockerfile挂载卷、数据容器卷

编写dockerfile挂载卷 编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq dock…...

理解OAuth 2.0

OAuth是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;在全世界得到广泛应用&#xff0c;目前的版本是2.0版。 本文对OAuth 2.0的设计思路和运行流程&#xff0c;做一个简明通俗的解释&#xff0c;主要参考材料为RFC 6749。 一、应用场景 为了…...

8. Go实现Gin服务优雅关机与重启

文章目录 优雅关机优雅重启 无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号&#xff0c;然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。 优雅关机 优雅关机就是服务端关机命令发出后不是立即关机&#xff0c;而是等待当前还在…...

SQL 注入攻击 - cookie base64编码注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Base64编码介绍 原理 Base64编码的原理是将三个字节的二进制数据(共24位)转换成四个ASCII字符。由于每个ASCII字符可以表示64种状态(2^6),刚好可以用来表示24位二进制数…...

Outlook邮箱后缀如何修改?怎么添加后缀?

Outlook邮箱后缀是什么&#xff1f;Outlook邮箱后缀可以改吗&#xff1f; Outlook邮箱广泛应用于企业和个人用户之间。在使用过程中&#xff0c;有时我们可能会因为某些原因需要修改Outlook邮箱后缀。那么&#xff0c;Outlook邮箱后缀如何修改呢&#xff1f;下面&#xff0c;A…...

[LeetBook]【学习日记】图书整理 II——用两个栈实现队列

题目 图书整理 II 读者来到图书馆排队借还书&#xff0c;图书管理员使用两个书车来完成整理借还书的任务。书车中的书从下往上叠加存放&#xff0c;图书管理员每次只能拿取书车顶部的书。排队的读者会有两种操作&#xff1a; push(bookID)&#xff1a;把借阅的书籍还到图书馆。…...

5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型

5G智能制造食品工厂数字孪生可视化平台&#xff0c;推进食品行业数字化转型。随着科技的飞速发展&#xff0c;食品工业正迎来一场前所未有的数字化转型。在这场转型中&#xff0c;5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。它不仅提高了生产效率&#xff0c;降低…...

一个系列很多样式的wordpress外贸建站模板

菌菇干货wordpress跨境电商模板 食用菌、羊肚菌、牛肝菌、香菇、干黄花菜、梅干菜、松茸wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3946 餐饮调味wordpress跨境电商模板 豆制品、蛋黄糖、烘焙、咖啡、调料、调味酱、餐饮调味wordpress跨境电商模板。 http…...

Wireshark_labs TCP

在本实验中&#xff0c;我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的“爱丽丝梦游仙境”文本)&#xff0c; 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用&#xff0c;以提供…...

Linux程序崩溃调试

一、简单点的 编译时主动带-g&#xff0c;生成的程序带调试信息&#xff0c;而且开启生成dump文件&#xff0c;这时候可以使用core dump来调试程序&#xff0c;定位问题。可以参考&#xff1a;linux 程序crash 调试、原因分析及问题定位-CSDN博客 二、稍微复杂点 假设生成的可执…...

Day37 socket、TCP、UDP

socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务&#xff0c;数据无差错、无重复的发送且按发送顺序接收。内设置流量控制&#xff0c;避免数据流淹没慢的接收方。数据被看作是字节流&#xff0c;无长度限制。 数据报套接字(SOCK_DGRAM) UD…...

从 Language Model 到 Chat Application:对话接口的设计与实现

作者&#xff1a;网隐 RTP-LLM 是阿里巴巴大模型预测团队开发的大模型推理加速引擎&#xff0c;作为一个高性能的大模型推理解决方案&#xff0c;它已被广泛应用于阿里内部。本文从对话接口的设计出发&#xff0c;介绍了业界常见方案&#xff0c;并分享了 RTP-LLM 团队在此场景…...

无人机|LQR控制算法及其无人机控制中的应用仿真

前言 LQR全称Linear Quadratic Regulator&#xff08;线性二次调节器&#xff09;&#xff0c;顾名思义用于解决形如 x ˙ A x B u y C x D u \begin{aligned}\dot{x}&AxBu\\y&CxDu\end{aligned} x˙y​AxBuCxDu​ 线性时不变系统的一种线性控制方法&#xff0c;…...

ubuntu环境下docker容器详细安装使用

文章目录 一、简介二、ubuntu安装docker1.删除旧版本2.安装方法一3. 安装方法二&#xff08;推荐使用&#xff09;4.运行Docker容器5. 配置docker加速器 三、Docker镜像操作1. 拉取镜像2. 查看本地镜像3. 删除镜像4. 镜像打标签5. Dockerfile生成镜像 四、Docker容器操作1. 获取…...

vue2源码分析-vue入口文件global-api分析

文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…...

Javascript原型 ,原型链如何理解使用 ?有什么特点?

文章目录 图解原型原型链总结有需要的请私信博主&#xff0c;还请麻烦给个关注&#xff0c;博主不定期更新&#xff0c;或许能够有所帮助&#xff01;&#xff01;请关注公众号 图解 原型 常被描述为 — 种基于原型的语言–每个对象拥有一个原型对象 当试图访问 一个对象的属性…...