YOLOv9:一个关注信息丢失问题的目标检测

news2024/11/13 20:28:44

本文来自公众号“AI大道理”

当前的深度学习方法关注的是如何设计最合适的目标函数,使模型的预测结果最接近地面的真实情况。同时,必须设计一个适当的体系结构,以方便获取足够的预测信息。

现有方法忽略了一个事实,即输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。

YOLOv9给出了解决方案。

YOLOv9前身是YOLOv7,这是同一个团队。

1、YOLOv9的改进

在反向传播中深层特征层由于更加靠近标签,所以参数更容易更新,而浅层(离输入图片近的对方)由于山高皇帝远比较难以更新。

怎么办?YOLOv9左右开弓,建立辅助头。

右边是熟悉的类似yolov8一样的结构,是标准的neck+head结构。

左边则新建一个backbone,乱七八糟一堆neck,加上head作为辅助头。

有什么用?

backbone一般来说需要从右边的检测头经过neck再慢慢回传,现在YOLOv9有了左边的分支,左边的backbone离检测头要近很多,从这里回传又快损失又少。这个backbone和主路的backbone一模一样,共享参数。

当然这么做只是在训练的时候更好的训练,一旦到了推理和测试阶段,辅助头果断抛弃,只留下标准的右边的结构即可。

这个思想之前在检测头部分已经有了,只不过那时候是为了更好的训练检测头,现在是为了更好的训练浅层部分。

(这个思想怎么这么熟悉,和resnet有异曲同工之妙)

核心改进两点:

  • PGI(可编程梯度信息)

  • GLEAN(广义高效层聚合网络)

2、PGI(可编程梯度信息)

在深度网络的训练过程中,由于层与层之间的复杂映射,有用的信息可能会逐渐丢失,这会导致梯度信号变弱,最终影响网络的学习效率和预测准确性。

PGI是一种旨在解决深度网络中的信息瓶颈问题的策略,它可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权值。

YOLOv9的PGI技术包括辅助可逆分支和多级辅助信息,这些设计有助于在网络的深层中保留更多的信息,生成更可靠的梯度,从而在训练过程中确保了更准确的目标与输入之间的关联。

(可编程梯度信息的解释:一个高大上的名字,无非就是想说你可以随意回传到哪一层,你可以自己决定,即可编程,主要还是在于这个思想)

PAN (Path Aggregation Network): 这种结构通过聚合不同路径的信息来缓解信息瓶颈问题,但仍然存在信息丢失的问题。

RevCol (Reversible Columns): 这种结构旨在保持信息流的完整性,通过可逆列来避免信息的损失,但代价是计算成本较高。

深度监督 (Deep Supervision): 这个方法通过在网络的不同深度层添加预测头来实现辅助监督,这可以帮助网络学习到多层次的辅助信息,但可能导致信息损坏。

可编程梯度信息 (PGI): 这是论文提出的新方法,它通过辅助可逆分支产生可靠的梯度,以供主分支使用,从而控制主分支在多个语义层次上的学习,这有助于更好地保留语义信息并优化梯度流。

图中的蓝色块代表神经网络中的层,灰色块代表预测头或辅助分支,虚线框高亮了每种方法的关键特征。

3、GLEAN(广义高效层聚合网络)

广义高效层聚合网络(GELAN)是一种新颖的架构,它结合了 CSPNet 和 ELAN 原理来进行梯度路径规划。它优先考虑轻量级设计、快速推理和准确性。GELAN 通过允许任何计算块来扩展 ELAN 的层聚合,从而确保灵活性。

该架构旨在实现高效的特征聚合,同时在速度和准确性方面保持有竞争力的性能。GELAN的整体设计融合了CSPNet的跨级部分连接和ELAN的高效层聚合,以实现有效的梯度传播和特征聚合。

GELAN是将CSPNet和ELAN的特点结合在一起,并扩展以支持任何计算块的新型网络架构。

CSPNet: 这种架构包括一个分裂-合并的过程,它通过在网络的不同层之间分裂和合并特征来提高性能和效率。

ELAN: 这是一种更进一步的架构,它在CSPNet的基础上增加了多个卷积层(conv)的堆叠,每个卷积层都会进行特征转换,之后再进行合并。

GELAN: 提出的GELAN架构不仅模仿了CSPNet的分裂-合并机制,还扩展了ELAN的设计,使其可以使用任何类型的计算块,而不仅限于卷积层。

这种设计增加了网络的灵活性,使其能够根据不同的应用需求选择最合适的计算块。

4、其他

backbone:主要就是多了一条backhone,backbone中使用了RepNCSPELAN4 模块。

neck/head:主要是增加了辅助头。

loss function:loss为DFL Loss + CIoU Loss

正负样本匹配策略:为TaskAlign样本匹配

5、总结

YOLOv9结合了PGI(可编程梯度信息)和GELAN(广义高效层聚合网络)技术来克服信息瓶颈和深度监督在轻量级网络中的不适用性问题。

YOLOv9的PGI技术包括辅助可逆分支和多级辅助信息,这些设计有助于在网络的深层中保留更多的信息,生成更可靠的梯度,从而在训练过程中确保了更准确的目标与输入之间的关联。

(左边的辅助头可以千变万化,又是一个魔改的方向,目测要yolov1000000......)

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

  

—————————————————————

投稿吧   | 留言吧

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

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

相关文章

理解JS与多线程

理解JS与多线程 什么是四核四线程? 一个CPU有几个核它就可以跑多少个线程,四核四线程就说明这个CPU同一时间最多能够运行四个线程,四核八线程是使用了超线程技术,使得单个核像有两个核一样,速度比四核四线程有多提升。…

el-scrollbar实现自动滚动到底部(AI聊天)

目录 项目背景 实现步骤 实现代码 完整示例代码 项目背景 chatGPT聊天消息展示滚动面板,每次用户输入提问内容或者ai进行流式回答时需要不断的滚动到底部确保展示最新的消息。 实现步骤 采用element ui 的el-scrollbar作为聊天消息展示组件。 通过操作dom来实…

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…

挑战全网最清晰解决文本文件乱码方案

标题 文本文件出现乱码之全网最清晰解决方案乱码出现的原因解决方案第一步:获取文件的原始编码格式。第二步,获取当前系统的格式第三步,将文件的内容以当前系统编码格式进行译码并且输出到新的文件中第四步,删除原文件&#xff0c…

韦东山嵌入式linux系列-LED驱动程序

之前学习STM32F103C8T6的时候,学习过对应GPIO的输出: 操作STM32的GPIO需要3个步骤: 使用RCC开启GPIO的时钟、使用GPIO_Init函数初始化GPIO、使用输入/输出函数控制GPIO口。 【STM32】GPIO输出-CSDN博客 这里再看看STM32MP157的GPIO引脚使用…

【智能算法改进】多策略改进的蜣螂优化算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜣螂优化算法(DBO)原理及实现 2.改进点 混沌反向学习初始化 采用 Pwlcm 分段混沌映射,由于 Pwlcm 在其定义区间上具有均匀的密度函数,在特定的…

windows电脑桌面便签在哪里找?

在忙碌的工作中,我们经常会有很多事情需要记住。这时,电脑桌面便签就成为了我们的好帮手。那么,在Windows电脑上,我们该如何找到桌面便签呢?下面,就让我来为大家详细介绍一下。 其实,Windows电…

Android多开应用软件系统设计

设计一个支持Android多开应用的软件系统,主要涉及到以下几个关键技术点和设计考虑: 1. 虚拟化技术 容器技术:与传统的虚拟机不同,可以采用更轻量级的容器技术,为每个应用实例创建独立的运行环境。这包括分配独立的用…

【CUDA】shuffle算法的一个优化

最近,笔者在阅读这篇文章时很好奇,为什么使用看起来高大上的shuffle算法之后,并没有造成优化反而有了负优化,想到了一个可以优化的地方:在最后针对一个warp进行处理时,当前block中不在第一个warp中的线程会…

【Linux】进程间通信——匿名管道

为什么要进行进程间通信? 1.数据传输:一个进程需要将它的数据发送给另一个进程,比如我们有两个进程,一个负责获取数据,另一个负责处理数据,这时第一个进程就要将获取到的数据交给第二个进程 2.资源共享&…

职业理念教育观

职业道德理念——教育观 教育是什么、干什么、为了什么,教育心该培养什么样的人、如何培养人等。 教育观 素质教育内涵 教学观 素质教育内涵 新课程改革的教学观

4.Python4:requests

1.requests爬虫原理 (1)requests是一个python的第三方库,主要用于发送http请求 2.正则表达式 #正则表达式 import re,requests str1aceace #A(.*?)B,匹配A和B之间的值 print(re.findall(a(.*?)e,str1))import re,requests str2hello com…

背包问题转换

如何转换成背包问题呢&#xff0c;我们可以把每个质数当成一个重量 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;#define int long long int record[1005]; void fun() {//record[2] 1;for (int i 2; i < 1000; i) {if (!record[…

微信视频号及直播回放下载工具

最近需要下载微信视频号中的视频&#xff0c;找一圈&#xff0c;终于找到了&#xff0c;&#xff0c;免费&#xff0c;没广告 软件叫做&#xff1a;爱享素材下载器。 是一款开源的、完全免费的工具。 第1步&#xff1a;下载安装包 下载地址&#xff1a; https://github.com/p…

jmeter+ant+jenkins搭建 接口自动化测试平台

平台搭建 &#xff08;1&#xff09;录制jmeter脚本 &#xff08;2&#xff09;将jmeter的安装目录下的G:\jmeter\apache-jmeter-5.1.1\extras中&#xff0c;将 ”ant-jmeter-1.1.1.jar”文件放到 ant的lib目录下 &#xff08;3&#xff09;配置jmeter的xml配置文件&#xf…

python对象

类 我们目前所学习的对象都是Python内置的对象但是内置对象并不能满足所有的需求&#xff0c;所以我们在开发中经常需要自定义一些对象类&#xff0c;简单理解它就相当于一个图纸。在程序中我们需要根据类来创建对象类就是对象的图纸&#xff01;我们也称对象是类的实例&#…

【第22章】MyBatis-PlusSQL分析与打印

文章目录 前言一、p6spy简介二、示例工程1. 依赖引入2. 配置 三、Spring Boot集成1. 依赖2. 配置3. 注意事项 四、实战1. 依赖2. 配置(spy.properties)3. 配置类4. 测试类5. 结果 总结 前言 MyBatis-Plus提供了SQL分析与打印的功能&#xff0c;通过集成p6spy组件&#xff0c;可…

电脑找回彻底删除文件?四个实测效果的方法【一键找回】

电脑数据删除了还能恢复吗&#xff1f;可以的&#xff0c;只要我们及时撤销上一步删除操作&#xff0c;还是有几率找回彻底删除文件。 当我们的电脑文件被彻底删除后&#xff0c;尽管恢复的成功率可能受到多种因素的影响&#xff0c;但仍有几种方法可以尝试找回这些文件。本文整…

白帽工具箱:DVWA中CSRF攻击与防御的入门指南

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…