YOLOv9解读

news2024/12/28 18:39:29

论文地址:https://arxiv.org/abs/2402.13616

Github地址:https://github.com/WongKinYiu/yolov9

一、引言

作者认为当前深度学习方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。本文基于深入研究数据通过深度网络传输时数据丢失的重要问题(即信息瓶颈和可逆函数),提出了可编程梯度信息(PGI)的概念来应对深度网络实现多个目标所需的各种变化。

PGI可以为目标任务计算目标函数提供完整的输入信息,从而获得可靠的梯度信息来更新网络权值。此外,本文还设计了一种基于梯度路径规划的新型轻量级网络架构——通用高效层聚合网络GELAN。GELAN的架构证实了PGI在轻量级模型上取得了优异的结果。

论文在基于 MS COCO 数据集的目标检测上验证了所提出的 GELAN 和 PGI。结果表明,GELAN 仅使用传统的卷积算子即可实现更好的参数利用率。 PGI 可用于从轻型到大型的各种模型。它可以用来获取完整的信息,从而获得更好的效果,比较结果如图1所示:

二、主要贡献

在深度网络中,输入数据在前馈过程中丢失信息的现象俗称信息瓶颈,其示意图如图2所示:

为了解决上述问题,论文提出了一个新的概念,即可编​​程梯度信息(PGI)。其概念是通过辅助可逆分支生成可靠的梯度,使得深层特征仍然能够保持执行目标任务的关键特征。

辅助可逆分支的设计可以避免传统的融合多路径特征的深度监督过程可能造成的语义损失。换句话说,论文在不同语义层面上编程梯度信息传播,从而达到最佳的训练结果。

PGI的可逆架构建立在辅助分支上,因此没有额外的成本。由于PGI可以自由选择适合目标任务的损失函数,因此也克服了掩模建模遇到的问题。所提出的PGI机制可以应用于各种规模的深度神经网络,并且比仅适用于非常深的神经网络的深度监督机制更通用。

在本文中,还基于ELAN设计了广义ELAN(GELAN),GELAN的设计同时考虑了参数数量、计算复杂度、准确性和推理速度。这种设计允许用户针对不同的推理设备任意选择合适的计算块。本文将提出的PGI和GELAN结合起来,然后设计了新一代YOLO系列物体检测系统,称之为YOLOv9。本文使用MS COCO数据集进行实验,实验结果验证了YOLOv9在所有比较中都取得了顶尖的性能。

本文的贡献总结如下:

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

三、核心方法

3.1 可编程梯度信息

为了解决上述问题,论文提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如图3(d)所示。 PGI主要包括三个组成部分:主分支、辅助可逆分支、多级辅助信息。

从图3(d)中我们可以看出,PGI的推理过程仅使用主分支,因此不需要任何额外的推理成本。至于其他两个组件,它们仅用于训练阶段而不在推理阶段,用于解决或减缓深度学习方法中的几个重要问题:

  • 辅助可逆分支:是为了处理神经网络加深带来的问题而设计的。网络加深会造成信息瓶颈,导致损失函数无法生成可靠的梯度。
  • 对于多级辅助信息:旨在处理深度监督带来的误差累积问题,特别是针对多个预测分支的架构和轻量级模型。
3.1.1 辅助可逆分支

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

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

由于论文的目标是使用可逆架构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。鉴于此,论文将可逆分支视为深度监督分支的扩展,然后设计辅助可逆分支,如图3(d)所示。对于由于信息瓶颈而丢失重要信息的主分支深度特征,它们将能够从辅助可逆分支接收可靠的梯度信息。

这些梯度信息将驱动参数学习来协助提取正确且重要的信息,上述动作可以使主分支获得对目标任务更有效的特征。此外,可逆架构在浅层网络上的表现比在一般网络上差,因为复杂的任务需要在更深的网络中进行转换。我们提出的方法并不强迫主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新它。这种设计的优点是所提出的方法也可以应用于较浅的网络。

3.1.2 多级辅助信息

多个预测分支的深度监督架构如图 3 (c) 所示。对于目标检测,不同的特征金字塔可用于执行不同的任务,例如它们一起可以检测不同大小的目标。因此,连接到深度监督分支后,会引导浅层特征学习小物体检测所需的特征,此时系统会将其他尺寸的物体的位置视为背景。然而,上述行为会导致深层特征金字塔丢失大量预测目标对象所需的信息。关于这个问题,我们认为每个特征金字塔都需要接收所有目标对象的信息,以便后续的主分支可以保留完整的信息来学习对各种目标的预测。

多级辅助信息的概念是在辅助监督的特征金字塔层次层和主分支之间插入一个集成网络,然后用它来组合来自不同预测头的返回梯度,如图3(d)所示。多级辅助信息就是将包含所有目标物体的梯度信息聚合起来,传递给主分支,然后更新参数。此时,主分支特征金字塔层次结构的特征将不再受某些特定对象信息的支配。因此,我们的方法可以缓解深度监督中的信息损坏问题。此外,任何综合网络都可以用于多级辅助信息。

3.2 GELAN

通过结合采用梯度路径规划设计的两种神经网络架构CSPNet 和ELAN ,论文设计了兼顾轻量级、推理速度和准确性的广义高效层聚合网络(GELAN)。其整体架构如图 4 所示。论文将最初仅使用卷积层堆叠的 ELAN 的功能推广到可以使用任何计算块的新架构。

四、实验效果

4.1 实验设置

论文使用 MS COCO 数据集验证了所提出的方法。所有实验设置均遵循 YOLOv7 AF,而数据集为 MS COCO 2017。论文提到的所有模型都是从头开始训练的,总训练次数为 500 epoch。在设置学习率时,论文在前三个epoch中使用线性预热,随后的epoch根据模型规模设置相应的衰减方式。至于最后 15 个epoch,论文关闭mosaic数据增强。

4.2 实现细节

论文分别基于 YOLOv7 和 Dynamic YOLOv7 构建了 YOLOv9 的通用版本和扩展版本。在网络架构的设计中,论文使用 CSPNet Blocks 和 RepConv Blocks作为计算块,用 GELAN 替换了 ELAN 。论文还简化了下采样模块并优化了anchor-free预测头。至于PGI的辅助损失部分,论文完全遵循YOLOv7的辅助头设置。

4.3 效果对比

如表1所示,与轻量级和中型模型YOLO MS相比,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与现有方法相比在各方面都有显着改进。

结果如图5所示,论文分别根据参数和计算量进行比较。就参数数量而言,性能最好的大型模型是 RT DETR。从图5中我们可以看到,使用传统卷积的YOLOv9在参数利用率上甚至比使用深度卷积的YOLO MS还要好。至于大型模型的参数利用率,也大大超过了使用ImageNet预训练模型的RT DETR。更棒的是,在深度模型中,YOLOv9展示了使用PGI的巨大优势。通过准确保留和提取将数据映射到目标所需的信息,我们的方法仅需要 66% 的参数,同时保持 RT DETR-X 的精度。

4.4 消融实验

4.4.1 GELAN

对于 GELAN,论文首先对计算模块进行消融研究。我们分别使用Res Block、Res Block 和 CSP Block 进行实验。表2表明,用不同的计算块替换ELAN中的卷积层后,系统可以保持良好的性能。用户确实可以自由更换计算块并在各自的推理设备上使用它们。在不同的计算块替换中,CSP Block 的性能特别好。它们不仅减少了参数量和计算量,而且将 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}}。

4.4.2 可编程梯度信息

对于多级辅助信息,论文使用FPN和PAN进行消融研究,PFH的作用相当于传统的深度监督。所有实验的结果列于表4中。从表4中我们可以看出,PFH仅在深度模型中有效,而我们提出的PGI可以在不同组合下提高精度。尤其是使用ICN时,我们得到了稳定且更好的结果。我们还尝试将YOLOv7中提出的lead-head指导分配应用于PGI的辅助监督,并取得了更好的性能。

我们进一步将PGI和深度监督的概念应用到不同规模的模型上,并比较结果,结果如表5所示。正如一开始分析的那样,深度监督的引入会导致浅层模型精度的损失。

PGI 的概念带来了两个宝贵的贡献。第一个是让辅助监督方法适用于浅层模型,第二个是让深层模型训练过程获得更可靠的梯度。这些梯度使深度模型能够使用更准确的信息来建立数据和目标之间的正确相关性。

表6中显示了从基线 YOLOv7 到 YOLOv9E 逐渐增加组件的结果。我们提出的GELAN和PGI给模型带来了全面的改进。

4.5 可视化

在图6中,论文展示了在不同架构下使用随机初始权重作为前馈获得的特征图的可视化结果。我们可以看到,随着层数的增加,所有架构的原始信息逐渐减少。例如,在PlainNet的第50层,很难看到物体的位置,并且所有可区分的特征将在第100层丢失。对于ResNet,虽然在第50层仍然可以看到物体的位置,但边界信息已经丢失。当深度达到第100层时,整个图像变得模糊。 CSPNet 和提出的 GELAN 都表现得非常好,并且它们都可以保持支持清晰识别对象的特征直到第 200 层。其中GELAN的结果更稳定,边界信息更清晰。

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

至于不使用PGI的GELAN,我们发现它在检测物体边界时存在发散,并且在某些背景区域也产生了意想不到的响应。这个实验证实了PGI确实可以提供更好的梯度来更新参数,并使主分支的前馈阶段能够保留更重要的特征。

五、总结

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

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

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

相关文章

ASP.NET制作试卷(单选+多选)

需求: 1.包含单选题、多选题。 2.所有题做完再提交。 3.提示错误、统计分数(提交后)。 项目结构: 效果展示: 效果展示(视频): ASP.NET练习1效果 index.aspx代码: &l…

如何在 Mac 上打开、编辑、复制、移动或删除存储在 Windows NTFS 格式 USB 驱动器上的文件 Tuxera NTFS for Mac使用教程

当您获得一台新 Mac 时,它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac,您需要一个附加的 NTFS 驱动程序。Tuxera 他可以帮忙实现这一功能! Tuxera可以轻松转换驱动器:无论使用Windows PC还是Mac&…

期货开户要找到适合自己的系统

物有一个生物圈,大鱼吃小鱼,小鱼吃虾。在期货市场这条生物圈里面,大部分人就是期货市场的虾子,是被吃的,所以必须成长起来,往更高一层走,到可以吃虾子的时候,就是挣钱的时候。学习不…

深度学习pytorch——正则化(持续更新)

由于Sigmoid函数在两边存在梯度趋于零的特性,这种特性会使梯度长久得不到更新,造成梯度离散的现象,如何处理这一种现象?压缩数据使数据位于Sigmoid梯度不趋于0区间,即批量正则化(Batch Norm )&a…

钉钉 AI 升级多种功能;智谱AI PC智能助手发布;百度回应与苹果合作

▶ 钉钉 AI 升级上线多种功能 3 月 28 日,钉钉 AI 助理升级。升级后上线了图片理解、文档速读、工作流等产品能力,率先探索多模态、长文本与 RPA 技术在 AI 应用的落地。 基于阿里通义千问大模型,升级后的钉钉 AI 助理可以做到: …

如何撰写研究论文

SEVENTYFOUR/SHUTTERSTOCK 即使对于有经验的作家来说,将数月或数年的研究浓缩到几页纸中也是一项艰巨的任务。作者需要在令人信服地解决他们的科学问题和详细地呈现他们的结果之间找到最佳平衡点,以至于丢失了关键信息。他们必须简明扼要地描述他们的方…

github拉取的项目添加至自己的仓库

想把GitHub的开源项目拉到本地进行二开,研究了一下上传到gitee的步骤: 步骤 gitee新建仓库,仓库名与本地文件夹的名称一致,建好后gitee的页面也会有显示git命令 打开项目目录,右键打开git bash(或者在git…

蓝桥集训之松散子序列

蓝桥集训之松散子序列 核心思想&#xff1a;状态机dp 每个点两种状态 f[i,0] max(f[i-1,0] , f[i-1,1]) f[i,1] f[i-1,0] w; #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 1000010;int f[N][2];int…

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略

LLMs之Mistral&#xff1a;Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;Mistral AI首个7B模型发布于2023年9月&#xff0c;在基准测试中超越Llama 2 13B&#xff0c;一下子声名大振。Mistral 7B v0.2对应的指令调优版本Mistral-7B-Instruct-v0…

MySQL驱动Add Batch优化实现

MySQL 驱动 Add Batch 优化实现 MySQL 驱动会在 JDBC URL 添加 rewriteBatchedStatements 参数时&#xff0c;对 batch 操作进行优化。本文测试各种参数组合的行为&#xff0c;并结合驱动代码简单分析。 batch参数组合行为 useServerPrepStmts 参数 PreparedStatement psmt…

C# wpf 实现底部嵌入HwndHost

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 第四章 底部嵌入HwndHost&#xff08;本章&#xff09; 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现&#xff1f;1、底部创建窗口&#xff08;1&#xff09;、创建透明窗口&…

[flink 实时流基础]源算子和转换算子

文章目录 1. 源算子 Source1. 从集合读2. 从文件读取3. 从 socket 读取4. 从 kafka 读取5. 从数据生成器读取数据 2. 转换算子基本转换算子&#xff08;map/ filter/ flatMap&#xff09; 1. 源算子 Source Flink可以从各种来源获取数据&#xff0c;然后构建DataStream进行转换…

ios应用内支付

用uniapp开发iOS应用内支付 准备前端代码服务器端处理如果iOS支付遇到问题实在解决不了&#xff0c;可以联系我帮忙解决&#xff0c;前端后端都可以解决&#xff08;添加的时候一定要备注咨询iOS支付问题&#xff09; 准备前端代码 获取支付通道 (uni.getProvider) uni.getPr…

怎么更新sd-webui AUTOMATIC1111/stable-diffusion-webui ?

整个工程依靠脚本起来的&#xff1a; 可直接到stable-diffusion-webui子目录执行&#xff1a; git pull更新代码完毕后&#xff0c;删除venv的虚拟环境。 然后再次执行webui.sh&#xff0c;这样会自动重新启动stable-diffusion-webui.

Netty核心原理剖析与RPC实践21-25

Netty核心原理剖析与RPC实践21-25 21 技巧篇&#xff1a;延迟任务处理神器之时间轮 HahedWheelTimer Netty 中有很多场景依赖定时任务实现&#xff0c;比较典型的有客户端连接的超时控制、通信双方连接的心跳检测等场景。在学习 Netty Reactor 线程模型时&#xff0c;我们知道…

卸载原有的cuda,更新cuda

概述&#xff1a;看了一下自己的gpu&#xff0c;发现驱动可能装低了&#xff0c;随即尝试更新驱动&#xff0c;写下此篇 注&#xff1a;我原先是10.2的版本&#xff0c;改了之后是11.2&#xff0c;下面的图都用11.2的&#xff0c;不过不碍事 目录 第一步&#xff1a;查看现在…

SmartChart的部署以及可能遇见的报错解决方案

简介 数据可视化是一种将数据转化为图形的技术&#xff0c;可以帮助人们更好地理解和分析数据。但是&#xff0c;传统的数据可视化开发往往需要编写大量的代码&#xff0c;或者使用复杂的拖拽工具&#xff0c;不仅耗时耗力&#xff0c;而且难以实现个性化的需求。有没有一种更…

深度解析:Elasticsearch检索请求原理

在上一篇文章中&#xff0c;我们学习了 Elasticsearch 的写入流程&#xff0c;今天我们来学习一下 Elasticsearch 的读取流程&#xff0c;当一个检索请求到达 Elasticsearch 之后是如何进行检索的呢&#xff1f; 下面先说一下一个总的检索流程。 1、客户端发送请求到任意一个…

深度思考:雪花算法snowflake分布式id生成原理详解

雪花算法snowflake是一种优秀的分布式ID生成方案&#xff0c;其优点突出&#xff1a;它能生成全局唯一且递增的ID&#xff0c;确保了数据的一致性和准确性&#xff1b;同时&#xff0c;该算法灵活性强&#xff0c;可自定义各部分bit位&#xff0c;满足不同业务场景的需求&#…

13-API风格(下):RPCAPI介绍

RPC在Go项目开发中用得也非常多&#xff0c;需要我们认真掌握。 RPC介绍 根据维基百科的定义&#xff0c;RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用&#xff0c;是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机…