目标检测——YOLOv9算法解读

论文:YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (2024.2.21)
作者:Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao
链接:https://arxiv.org/abs/2402.13616
代码:https://github.com/WongKinYiu/yolov9


YOLO系列算法解读:
YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算法解读、YOLOv7算法解读、YOLOv8算法解读、YOLOv9算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读、PP-YOLOv2算法解读、PP-PicoDet算法解读、PP-YOLOE算法解读、PP-YOLOE-R算法解读


文章目录

  • 1、算法概述
  • 2、YOLOv9细节
    • 2.1 Programmable Gradient Information
    • 2.2 Generalized ELAN
  • 3、实验


1、算法概述

YOLOv9和YOLOv7的一作是同一个人,所以均采用同一个检测框架;文章出发点可归因于论文的这句话:
在这里插入图片描述
作者先表明现如今检测算法主要集中在设计目标函数及有效的框架,但却忽略了输入数据逐层进行特征提取和空间变换时,会丢失大量的信息,这些丢失的信息会造成梯度偏差影响模型参数的更新。如下图所示是各个网络的特征图细节展示;
在这里插入图片描述
目前,可以缓解这一现象的主要方法如下:
1.使用可逆架构:这种方法主要使用重复的输入数据,并以显式的方式维护输入数据的信息;缺点是需要额外的层来组合重复馈送的输入数据,增加推理成本,且受限不能有太深的路径,网络很难捕获高阶语义信息进行建模;

2.Mask建模:主要利用重建损失,采用隐式方法最大化提取的特征,保留输入信息;缺点是重建损失有时与目标损失相冲突或者与输入数据产生不正确的关联;

3.引入深度监督概念:它使用没有丢失太多重要信息的浅层特征来预先建立从特征到目标的映射,以确保重要信息可以转移到更深的层;缺点是若在浅层丢失信息,后续层无法检索到所需信息,容易造成错误积累。

本文将深入研究数据在深度网络中传输时的重要数据丢失问题,即信息瓶颈和可逆函数。为此,作者提出了可编程梯度信息(programmable gradient information, PGI)应对深度神经网络中多目标的各种变化,PGI可针对目标任务提供完整的输入信息,因此网络可以根据完整的梯度信息更新网络权重。此外,作者还基于梯度路径规划在ELAN结构的基础上设计了一个轻量高效的网络结构GELAN(Generalized Efficient Layer Aggregation Network),而YOLOv9正是利用GELAN结构来设计的。它们在COCO数据集上的表现如下图:
在这里插入图片描述


2、YOLOv9细节

YOLOv9网络结构如下
在这里插入图片描述

2.1 Programmable Gradient Information

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

辅助可逆分支(Auxiliary Reversible Branch)
在PGI结构中,作者提出了辅助可逆分支来生成可靠的梯度。但是作者通过实验得到在网络主分支中增加可逆结构(如上图(b)黄色虚线框部分)会带来推理时间的急剧上升,增加上图(b)黄色框部分,推理时间能增加一倍。
作者意识到,我们要的目标是使用可逆结构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。作者将可逆分支视为深度监督分支的扩展部分,设计了辅助可逆分支,如上图(d)蓝色虚线框部分。这样一来,深层主分支中可能因信息瓶颈而丢失的重要信息,可以通过辅助可逆分支获得补充的梯度信息,这些信息有助于网络学习到更准确、更关键的特征,以更有效地完成目标任务。作者进一步指出,由于复杂的任务需要在深层网络中进行转换,因此可逆结构在浅层网络中的表现比一般网络差。因此提出的方法不追求在主分支上保留完整原始信息,而是通过辅助监督机制提供有用的梯度更新。

多级辅助信息(Multi-level Auxiliary Information)
包含深度监督信息的多级预测分支结构如上图©所示。对于目标检测任务而言,可以使用不同的特征金字塔来检测不同大小的目标。因此,在连接到深度监督分支后,将引导浅层特征学习小物体检测所需的特征,此时模型将其他大小目标的位置作为背景。然而,上述行为会导致深层特征金字塔丢失大量预测目标物体所需的信息。在这里,作者认为每个特征金字塔都需要接收到所有目标物体的信息,以便后续的主干分支能够保留完整的信息来学习对各种目标的预测。因此,作者引入了一种多级辅助信息架构,通过在辅助监督特征金字塔层和主分支之间加入集成网络,如上图(d)粉色虚线框部分所示。这个集成网络的角色是整合来自不同预测分支的梯度信息,并将这一聚合的信息传递给主分支,以促进参数的更新。

2.2 Generalized ELAN

通过结合CSPNet和ELAN这两种采用梯度路径规划设计的神经网络架构,作者设计了一种考虑轻量级、推理速度和准确性的通用高效层聚合网络(GELAN)。它的整体架构如下图所示,ELAN是卷积层的堆叠结构,而GELAN适用范围更广,是任何block的堆叠。
在这里插入图片描述


3、实验

实验设置:实验都用COCO2017训练集训练,用其验证集选择最佳模型,用COCO2017测试集评估模型性能。作者在YOLOv7的基础上把v7中的ELAN替换成了GELAN,其中GELAN的block用的是CSPNet blocks和planned RepConv。并简化了下采样模块以及优化了Anchor-Free预测头。对于PGI的辅助损失部分,作者完全采用了YOLOv7的辅助头设置。
与现如今其他检测算法对比
在这里插入图片描述
模型参数量和计算量flops方面的比较
在这里插入图片描述
消融实验:略

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

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

相关文章

【微信小程序开发】深入探索事件绑定、事件冒泡、页面跳转的逻辑实现

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

每日一题11:Pandas:数据重塑-透视

一、每日一题 解答: import pandas as pddef pivotTable(weather: pd.DataFrame) -> pd.DataFrame:df_pivot weather.pivot(indexmonth, columnscity, valuestemperature)return df_pivot 题源:力扣 二、总结 Pandas 是一个强大的 Python 数据分析…

数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

Rpcx (二):传输

一、Transport 传输 rpcx 可以通过 TCP、HTTP、UnixDomain、QUIC和KCP通信。你也可以使用http客户端通过网关或者http调用来访问rpcx服务。 TCP 这是最常用的通信方式。高性能易上手。可以使用TLS加密TCP流量。 Example: 101basic 服务端使用 tcp 做为网络名并且在注册中心…

C++之map和set 的封装

通过红黑树的学习(C之红黑树-CSDN博客)让我了解到map和set的底层如何实现,这一次我们来对map和set进行封装。 目录 1.map和set底层原理 2.map和set的定义 3.map和set的仿函数 4.map和set的插入 5.map和set的迭代器 5.1迭代器的构造 5.2…

Maven修改本地仓库的默认路径

前言 忽然发现当时下载Maven时候的默认路径没有与Maven放到同一个文件夹内,强迫症的我就想着修改一下Maven的路径!也方便后续我的jar包管理,放到C盘下可能会导致占用C盘空间等等问题吧。以下是我的操作过程: 一、创建一个本地仓库…

QX---mini51单片机学习---(6)独立键盘

目录 1键盘简绍 2按键的工作原理 3键盘类型 4独立键盘与矩阵键盘的特点 5本节相关原理图 6按键特性 7实践 1键盘简绍 2按键的工作原理 内部使用轻触按键,常态按下按键触点才闭合 3键盘类型 编码键盘与非编码键盘 4独立键盘与矩阵键盘的特点 5本节相关原理…

GStreamer中如何自定义配置线程优先级

1.引言 如果看了gstreamer官方教程配置多线程出现编译不过的问题了,不妨进来看看这篇文章或许能解决一些编译问题。 GStreamer 本质上是多线程的,并且是完全线程安全的。大多数线程内部对应用程序是隐藏的,这应该使应用程序开发更容易。但是&…

RabbitMQ--死信队列

目录 一、死信队列介绍 1.死信 2.死信的来源 2.1 TTL 2.2 死信的来源 3.死信队列 4.死信队列的用途 二、死信队列的实现 1.导入依赖 pom.xml 2.application.properties 3.配置类 4.生产者 5.业务消费者(正常消费者) 6.死信队列消费者 一、…

【前端性能优化】深入解析重绘和回流,构建高性能Web界面

🔥 个人主页:空白诗 文章目录 🎯 引言:探索Web性能的基石🏗️ 基础概念:什么是重绘和回流?📌 回流(Reflow)📌 重绘(Repaint&#xff0…

使用Flask部署Web应用:从入门到精通

文章目录 第一部分:准备工作第二部分:部署Flask应用到AWS部署到AWS Lambda 第三部分:部署Flask应用到腾讯云服务器部署到腾讯云服务器 第四部分:优化和扩展结论 在现代软件开发中,Web应用的部署是一个至关重要的环节。…

使用Flask-SocketIO构建实时Web应用

文章目录 准备工作编写代码编写HTML模板运行应用 随着互联网的发展,实时性成为了许多Web应用的重要需求之一。传统的HTTP协议虽然可以实现实时通信,但是其长轮询等机制效率低下,无法满足高并发、低延迟的需求。为了解决这一问题,诞…

计算机发展史故事【14】

大象踢踏舞 如果要把电脑50 年的历史划分为两个不同的阶段,那么,1981 年无疑是个分界线。就在那一年,IBM 公司推出个人电脑PC 机,使人类社会大步跨进个人电脑新时代。今天,全世界正在使用的PC 机已达到2 亿台&#xf…

视频拼接融合产品的产品与架构设计(三)内存和显存单元数据迁移

上一篇文章 视频拼接融合产品的产品与架构设计(二) 这一篇沉下先来,彻底放弃了界面,界面最终的体现是最后要做的,现在要做的是产品的架构,使用链式架构方式迁移数据。同时增加插件口,方便编程序。 插件架构 为了视频…

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展,小程序作为一种轻量级、易传播的应用形态,逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式,与小程序结合后,不仅为观众提供了更为便捷的观看体验,…

Linux线程(三)死锁与线程同步

目录 一、什么是死锁 死锁的四个必要条件 如何避免死锁 避免死锁算法 二、Linux线程同步 三 、条件变量 1、条件变量基本原理 2、条件变量的使用 3、条件变量使用示例 为什么 pthread_cond_wait 需要互斥量? 一、什么是死锁 死锁是计算机科学中的一个概念,…

Python-VBA函数之旅-type函数

目录 一、type函数的常见应用场景 二、type函数使用注意事项 三、如何用好type函数? 1、type函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、type函…

设计一个游戏的基本博弈框架

设计一个游戏的基本博弈框架,玩家通过操作改变某个数值,这个数值的变动会引发一系列实时变化,并且当这些数值累计到特定阈值时,会导致游戏中出现其他变化,可以分为以下几个步骤: 1. 确定游戏类型和主题 首…

UE4_照亮环境_不同雾效的动态切换

一、问题及思路: 我们在一个地图上,经常切换不同的区域,不同的区域可能需要不同的色调,例如暖色调的野外或者幽暗的山洞,这两种环境上,雾效的选用肯定不一样,夕阳西下的户外用的就是偏暖的色调&…