目标检测——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.mfbz.cn/a/622898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes集群svc的代理模式-iptables修改为ipvs

一、概述\ 我们都知道,k8s集群的外部网络分发,借助kube-proxy组件来完成; 问题:我们为什么要将代理模式修改为ipvs而不继续使用iptables呐? 1,iptables底层使用四表五链完成网络代理,效率比较低…

HackCar – 汽车系统的攻击和防御游乐场

现代汽车配备的微控制器使用控制器局域网 (CAN) 来执行安全和豪华功能。 然而,由于CAN网络缺乏速度控制等线控系统的安全性,因此可能会通过消息注入攻击来 劫持车辆,从而造成生命危险。 尽管研究人员努力提出入侵检测、加密和身份验证等解…

研究幽灵漏洞及其变种(包括但不限于V1-V5)的攻击原理和基于Github的尝试

一、研究幽灵漏洞及其变种(包括但不限于V1-V5)的攻击原理 1.1 基本漏洞原理(V1) 幽灵漏洞的基本原理是由于glibc库中的gethostbyname()函数在处理域名解析时,调用了__nss_hostname_digits_dots()函数存在缓冲区溢出漏洞。 具体来说,__nss_hostname_digits_dots()使用一个固定…

牛客网刷题 | BC82 乘法表

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 输出九九乘法表&am…

[GWCTF 2019]re3

int mprotect(void *addr, size_t len, int prot);实现内存区域的动态权限控制: addr:要修改保护权限的内存区域的起始地址。len:要修改保护权限的内存区域的长度(以字节为单位)。prot:要设置的新的保护权限&#xff…

宠物管理系统带万字文档

文章目录 宠物管理系统一、项目演示二、项目介绍三、19000字论文参考四、部分功能截图五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 宠物管理系统 一、项目演示 宠物管理系统 二、项目介绍 基于springbootvue的前后端分离…

CentOs搭建Kubernetes集群

kubeadm minikube 还是太“迷你”了,方便的同时也隐藏了很多细节,离真正生产环境里的计算集群有一些差距,毕竟许多需求、任务只有在多节点的大集群里才能够遇到,相比起来,minikube 真的只能算是一个“玩具”。 Kuber…

如何利用甘特图来提高资源的是使用效率?

在项目管理中,甘特图是一种常用的工具,用于规划和跟踪项目进度。它通过条形图的形式展示项目的时间表和任务依赖关系,帮助项目经理和团队成员清晰地了解项目的时间线和进度。通过合理利用甘特图,可以显著提高资源的使用效率&#…

【C++】学习笔记——继承_1

文章目录 十一、模板进阶5. 模板的优缺点 十二、继承1. 继承的概念及定义2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数 未完待续 十一、模板进阶 5. 模板的优缺点 优点: 模板复用了代码,节省资源,更快的迭代开发&a…

网络安全快速入门(十二) linux的目录结构

我们前面已经了解了基础命令,今天我们来讲讲linux中的目录结构,我们在了解linux的目录结构之前,我们先与Windows做一个对比 12.1linux和windows的目录结构对比 在之前认识liunx的章节中,我们已经简单说明了linux和window的目录结构…

一文入门DNS

概述 DNS是一个缩写,可以代表Domain Name System,域名系统,是互联网的一项基础服务。也可以代表Domain Name Server,域名服务器,是进行域名和与之相对应的IP地址相互转换的服务器。DNS协议则是用来将域名转换为IP地址…

blender cell fracture制作破碎效果,将一个模型破碎成多个模型

效果: 1.打开编辑-》偏好设置。搜索cell,勾选上如下图所示的,然后点击左下角菜单里的保存设置。 2.选中需要破碎的物体,按快捷键f3(快速搜索插件),搜索cell fracture。 3.调整自己需要的参数配置…

机器学习之sklearn基础教程:新手入门指南

引言 在机器学习领域,sklearn(Scikit-learn)是一个广受欢迎的开源库,它为各种常见的机器学习算法提供了高效的实现。对于初学者来说,sklearn 提供了一个简单且易于上手的工具,可以用来实现分类、回归、聚类…

git使用及github

文章目录 操作命令基本组成框架在开发中git分支的重要性 github的使用将本地仓库关联到远程仓库将远程仓库关联到本地和拉取指定分支、切换远程分支提交本地仓库到远程仓库修改分支名称 保存当前工作切换分支将别的分支修改转移到自己的分支远程删除分支后本地git branch -a依然…

MongoDB事务的理解和思考

3.2版本开始引入Read Concern,解决了脏读,支持Read Commit 3.6版本引入Session,支持多个请求共享上下文,为后续的事务支持做准备 4.0支持多行事务,但4.0的事务只是个过渡的版本 4.2开始支持多文档事务 1. Mongo的架…

具备教学意义的实操(用栈实现队列)

具备教学意义的实操(用队列实现栈)-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/138729955 具备教学意义的实操(用栈实现队列) 题目 232. 用栈实现队列 - 力扣(LeetCode) ​ 逻辑​​…

一、VIsual Studio下的Qt环境配置(Visual Studio 2022 + Qt 5.12.10)

一、下载编译器Visual Studio2022和Qt 5.12.10 Visual Studio 2022 社区版就够学习使用了 Qt5.12.10 安装教程网上搜,一大堆 也很简单,配置直接选默认,路径留意一下即可 二、配置环境 Ⅰ,配置Qt环境变量 系统变量下的Path&a…

C++的数据结构(五):树和存储结构及示例

在计算机科学中,树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。这种数据结构以一系列连接的节点来形成树形结构。在C中,树的概念和存储结构是实现各种复杂算法和…

Golang | Leetcode Golang题解之第87题扰乱字符串

题目: 题解: func isScramble(s1, s2 string) bool {n : len(s1)dp : make([][][]int8, n)for i : range dp {dp[i] make([][]int8, n)for j : range dp[i] {dp[i][j] make([]int8, n1)for k : range dp[i][j] {dp[i][j][k] -1}}}// 第一个字符串从 …

61、内蒙古工业大学、内蒙科学技术研究院:CBAM-CNN用于SSVEP - BCI的分类方法[脑机二区还是好发的]

前言: 之前写过一篇对CBAM模型改进的博客,在CBAM中引入了ECANet结构,对CBAM中的CAM、SAM模块逐一改进,并提出ECA-CBAM单链双链结构,我的这个小的想法已经被一些同学实现了,并进行了有效的验证,…