YOLOv9详细解读,改进提升全面分析(附YOLOv9结构图)
🥑 Welcome to Aedream同学 's blog! 🥑
文章目录
- 1. 概要
- 1.1 模型结构上的改动:
- 1.2 训练脚本上的改动:
- 2. 介绍
- 2.1 背景
- 2.2 主要贡献
- 3. 总体框架
- 3.1 可编程梯度信息(PGI)
- 3.1.1 辅助可逆分支
- 3.1.2 多级辅助信息
- 3.2 Generalized ELAN
- 参考
✨✨✨✨立志真正解决大家问题,只写精品博客文章,感谢关注,共同进步✨✨✨✨
1. 概要
论文链接:👿 YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
代码链接:👿 https://github.com/WongKinYiu/yolov9/tree/main
YOLOv9与v4、v7为同作者,所以按照继承性来说,与YOLOv7的联系最紧密,而不是v8。
1.1 模型结构上的改动:
详细介绍PGI与GELAN
-
YOLOv7的辅助训练头Aux->PGI(CBLinear,CBFuse)
-
ELAN->GELAN
-
downsample
class ADown(nn.Module):def __init__(self, c1, c2): # ch_in, ch_out, shortcut, kernels, groups, expandsuper().__init__()self.c = c2 // 2self.cv1 = Conv(c1 // 2, self.c, 3, 2, 1)self.cv2 = Conv(c1 // 2, self.c, 1, 1, 0)def forward(self, x):x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True)x1,x2 = x.chunk(2, 1)x1 = self.cv1(x1)x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1)x2 = self.cv2(x2)return torch.cat((x1, x2), 1)
- 锚框:Anchor Free
- 标签分配策略:TaskAilgnAssigner
- 损失函数:Loss:Ciou+dfl+bce
1.2 训练脚本上的改动:
- Flat Cosine Lr 和 Cos Lr
- Fixed Lr
- EarlyStopping
- close-mosaic
- min-items
- LION Optimizer
2. 介绍
2.1 背景
如今的深度学习方法重点关注如何设计最合适的目标函数,从而使得模型的预测结果能够最接近真实情况。同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。然而,现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。
本文将深入研究数据通过深度网络传输时数据丢失的重要问题,即信息瓶颈和可逆函数。我们提出了 可编程梯度信息(PGI) 的概念,以应对深度网络实现多个目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权重。此外,还设计了一种新的基于梯度路径规划的轻量级网络架构——广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量级模型上取得了卓越的成果。
与基于深度卷积开发的最先进方法相比,GELAN仅使用传统的卷积算子来实现更好的参数利用率。PGI可以用于从轻量级到大型的各种模型。它可以用于获得完整的信息,因此从头开始训练的模型可以获得比使用大型数据集预先训练的现有模型更好的结果。
2.2 主要贡献
-
从可逆函数的角度对现有的深度神经网络架构进行了理论分析,并通过这个过程成功地解释了许多过去难以解释的现象。在此基础上,我们还设计了PGI和辅助可逆分支,并取得了良好的效果。
-
设计的PGI解决了深度监控只能用于极深度神经网络架构的问题,从而使新的轻量级架构能够真正应用于日常生活。
-
设计的GELAN仅使用传统卷积,比基于最先进技术的深度卷积设计实现了更高的参数使用率,同时显示出轻、快、准确的巨大优势。
-
将所提出的PGI和GELAN相结合,YOLOv9在MS COCO数据集上的目标检测性能在各个方面都大大超过了现有的实时目标检测器。
3. 总体框架
训练阶段:全部对应代码中models/detect/yolov9.yaml
推理阶段:下半部分对应代码中models/detect/gelan.yaml
3.1 可编程梯度信息(PGI)
Programmable Gradient Information
为了解决上述问题,我们提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如图3(d)所示。PGI主要包括三个部分,即(1)主分支、(2)辅助可逆分支和(3)多级辅助信息
-
PGI 的推理过程仅使用了主分支,因此不需要额外的推理成本;
-
辅助可逆分支是为了处理神经网络加深带来的问题, 网络加深会造成信息瓶颈,导致损失函数无法生成可靠的梯度;
-
多级辅助信息旨在处理深度监督带来的误差累积问题,特别是多个预测分支的架构和轻量级模型。
3.1.1 辅助可逆分支
Auxiliary Reversible Branch
在PGI中,我们提出了辅助可逆分支来生成可靠的梯度并更新网络参数。通过提供从数据映射到目标的信息,损失函数可以提供指导,并避免从与目标不太相关的不完整前馈特征中发现虚假相关性的可能性。我们提出通过引入可逆结构来维护完整信息,但在可逆结构中添加主分支将消耗大量的推理成本。我们分析了图3(b)的架构,发现当添加从深层到浅层的额外连接时,推理时间将增加20%。当我们反复将输入数据添加到网络的高分辨率计算层(黄色框)时,推理时间甚至超过了时间的两倍。
由于我们的目标是使用可逆结构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。有鉴于此,我们将可逆分支视为深度监管分支的扩展,然后设计辅助可逆分支,如图3(d)所示。至于由于信息瓶颈而丢失重要信息的主要分支深层特征,它们将能够从辅助可逆分支接收可靠的梯度信息。这些梯度信息将驱动参数学习,以帮助提取正确和重要的信息,并且上述动作可以使主分支获得对目标任务更有效的特征。此外,可逆架构在浅层网络上的性能比在一般网络上差,因为复杂的任务需要在更深的网络中进行转换。我们提出的方法并不强迫主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新它。这种设计的优点是,所提出的方法也可以应用于较浅的网络。
最后,由于在推理阶段可以去除辅助可逆分支,因此可以保留原始网络的推理能力。我们也可以选择PGI中的任何可逆结构来发挥辅助可逆分支的作用。
3.1.2 多级辅助信息
Multi-level Auxiliary Information
在本节中,我们将讨论多级辅助信息是如何工作的。包括多个预测分支的深度监管架构如图3(c)所示。对于对象检测,不同的特征金字塔可以用于执行不同的任务,例如,它们可以一起检测不同大小的对象。因此,在连接到深度监督分支后,浅层特征将被引导学习小物体检测所需的特征,此时系统将把其他大小物体的位置作为背景。然而,上述行为将导致深度特征金字塔丢失预测目标对象所需的大量信息。关于这个问题,我们认为每个特征金字塔都需要接收关于所有目标对象的信息,以便后续的主分支能够保留完整的信息来学习对各种目标的预测。
多级辅助信息的概念是在辅助监督的特征金字塔层次层和主分支之间插入一个集成网络,然后使用它来组合来自不同预测头的返回梯度,如图3(d)所示。多级辅助信息是对包含所有目标对象的梯度信息进行聚合,并将其传递给主分支,然后更新参数。此时,主分支的特征金字塔层次结构的特征将不会被某些特定对象的信息所支配。因此,我们的方法可以缓解深度监管中的信息泄露问题。此外,任何集成网络都可以用于多级辅助信息。因此,我们可以规划所需的语义级别,以指导不同规模的网络架构的学习。
3.2 Generalized ELAN
YOLOv9将ELAN的能力进行了泛化,原始ELAN仅使用卷积层的堆叠,而GELAN可以使用任何计算块作为基础Module。
通俗来说:
查看代码可以发现,总体框架类似于把C3嵌入C2f,只是组成的基本模块不同而已。
在本节中,我们将介绍拟议的新网络架构——GELAN。通过结合两种采用梯度路径规划设计的神经网络架构CSPNet和ELAN,我们设计了考虑重量、推理速度和准确性的广义有效层聚合网络(GELAN)。其总体架构如图4所示。我们将最初仅使用卷积层堆叠的ELAN[65]的能力推广到可以使用任何计算块的新架构。
参考
https://cloud.tencent.com/developer/article/2390383
相关文章:

YOLOv9详细解读,改进提升全面分析(附YOLOv9结构图)
🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 1. 概要1.1 模型结构上的改动:1.2 训练脚本上的改动: 2. 介绍2.1 背景2.2 主要贡献 3. 总体框架3.1 可编程梯度信息(PGI)3.1.1 辅助可逆分支3.1.2 多级辅助信息 3.2 Ge…...

html基础操练和进阶修炼宝典
文章目录 1.超链接标签2.跳锚点3.图片标签4.表格5.表格的方向属性6.子窗口7.音视频标签8.表单9.文件上传10.input属性 html修炼必经之路—各种类型标签详解加展示,关注点赞加收藏,防止迷路哦 1.超链接标签 <!DOCTYPE html> <html lang"en…...
从Mysql 数据库删除重复记录只保留其中一条(删除id最小的一条)
准备工作:新建表tb_coupon /*Navicat Premium Data TransferSource Server : rootlocalhostSource Server Type : MySQLSource Server Version : 50527Source Host : localhost:3306Source Schema : leyouTarget Server Type : My…...

从http到websocket
阅读本文之前,你最好已经做过一些websocket的简单应用 从http到websocket HTTP101HTTP 轮询、长轮询和流化其他技术1. 服务器发送事件2. SPDY3. web实时通信 互联网简史web和httpWebsocket协议1. 简介2. 初始握手3. 计算响应健值4. 消息格式5. WebSocket关闭握手 实…...

UE5 C++ Widget练习 Button 和 ProgressBar创建血条
一. 1.C创建一个继承Widget类的子类, 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…...

抖店无货源违规频发,不能入驻?这个是真的吗?
我是电商珠珠 还没有踏入抖店这个电商行业的新手,单从别人的口中,听说了抖店无货源特别容易违规,还会被扣除全部的保证金,得不偿失之类的话。有的还专门劝诫新手不要做抖店,做了就会亏本之类的话,这搞得人…...

HarmonyOS—开发云数据库
您可以在云侧工程下开发云数据库资源,包括创建对象类型、在对象类型中添加数据条目、部署云数据库。 创建对象类型 对象类型(即ObjectType)用于定义存储对象的集合,不同的对象类型对应的不同数据结构。每创建一个对象类型&#…...
mysql查询某个数据库的数量有多少GB
要查询MySQL数据库中某个数据库(或称为“schema”)所占用的磁盘空间大小(以GB为单位),你可以使用information_schema数据库中的TABLES和DATA_LENGTH、INDEX_LENGTH字段来获取每个表的数据和索引的大小,然后…...

table展示子级踩坑
##elemenui中table通过row中是否有children进行判断是否展示子集,通过设置tree-prop的属性进行设置,子级的children的名字可以根据自己的子级名字进行替换,当然同样可以对数据处理成含有chilren的子级list。 问题: 1.如果是根据后…...

xss过waf的小姿势
今天看大佬的视频学到了几个操作 首先是拆分发可以用self将被过滤的函数进行拆分 如下图我用self将alert拆分成两段依然成功执行 然后学习另一种姿势 <svg id"YWxlcnQoIlhTUyIp"><img src1 οnerrοr"window[eval](atob(document.getElementsByTagNa…...

【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;
InnoDB 这是一个MySQL组件,结合了高性能和事务处理能力,以确保可靠性、健壮性和并发访问。它体现了ACID设计哲学。它作为一个存储引擎存在,处理使用ENGINEINNODB子句创建的或修改的表。请参阅第14章“InnoDB存储引擎”以获取有关架构细节和管…...

可移植性(兼容性)测试指南
可移植性是指应用程序能够安装到不同的环境中,在不同的环境中使用,甚至可以移动到不同的环境中。当然,前两者对所有系统都很重要。就PC软件而言,鉴于操作系统、共存和互操作应用程序、硬件、带宽可用性等方面的快速变化࿰…...

软件更新快讯-Obsidian更新-1.5.8 linux Appimage直装
更新内容 1.5.8: 从具有相同属性的文件导航时,固定属性不会显示。 修复了Home和End在导航文档顶部和底部时不总是起作用的问题。 Fixed properties not appearing when navigating from a file that has the same properties.Fixed Home and End not a…...

Android Gradle开发与应用 (二) : Groovy基础语法
1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点,意味着,如果我们完全不懂…...
iptables学习
iptables的4表5链的处理流程 一:业务地址请求服务时,首先经过iptables服务,iptables通过校验规则,通过校验是否同意业务访问,规则从上到下,匹配规则都失败了的话,走默认规则 (1&…...
kafka 集群搭建
kafka集群搭建 1. kafka介绍 Apache Kafka是一个开源的流处理平台,由Scala和Java编写1。它是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统2。Kafka的最大特…...

springboot-基础-eclipse配置+helloword示例
备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 下一篇:springboot-基础-添加model和controller的简单例子常用注解含义 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse,也就是…...
关于HTML标签应用教程
简介 HTML(HyperText Markup Language)是用于创建网页结构的标记语言。在本教程中,我们将介绍一些常用的HTML标签,以及它们的用法和示例。 1. HTML基础结构 <!DOCTYPE html> <html> <head><title>页面…...
3. 台阶问题
数楼梯 题目描述 楼梯有 N N N 阶,上楼可以一步上一阶,也可以一步上二阶。 编一个程序,计算共有多少种不同的走法。 输入格式 一个数字,楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4样例输出 #1 5提示…...

推荐一个 Obsidian 的 ChatGPT 插件
源码地址:https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容,以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT,还提供了优…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...