YOLO v9 思路复现 + 全流程优化

news2024/10/6 6:41:55

YOLO v9 思路复现 + 全流程优化

    • 提出背景:深层网络的 信息丢失、梯度流偏差
    • YOLO v9 设计逻辑
      • 可编程梯度信息(PGI):使用PGI改善训练过程
      • 广义高效层聚合网络(GELAN):使用GELAN改进架构
    • 对比其他解法
      • 1. 残差网络(ResNet)
      • 2. 密集连接网络(DenseNet)
      • 3. 注意力机制
      • 4. 可逆网络架构
      • 5. 特征金字塔网络(FPN)
    • 效果

 


提出背景:深层网络的 信息丢失、梯度流偏差

论文:https://arxiv.org/pdf/2402.13616.pdf

代码:https://github.com/WongKinYiu/yolov9

  • 问题: 深度网络在前馈过程中数据丢失信息,导致偏差的梯度流和错误的目标与输入关联。
  • 解法: YOLO v9

在实际应用中,例如交通监控系统中的车辆和行人检测,深度网络可能会因为网络层过深而导致在前馈过程中丢失对车辆和行人的关键特征信息。

这种信息丢失会导致梯度流在反向传播过程中带有偏差,使得网络无法准确地学习到车辆和行人的特征,进而影响检测准确性。

针对这个问题,YOLOv9被提出作为一种解决方案。

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

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

例如,如果在交通监控系统中部署了YOLOv9,当监控画面中有车辆通过时,即使在网络较深的层次上,YOLOv9也能有效地保留车辆的关键特征信息,如车辆的轮廓、颜色和标志等。

这使得在整个训练过程中,网络能够学习到更为精确的特征,提高车辆检测的准确率。

与传统的深度网络相比,YOLOv9能够减少因信息丢失导致的错误预测,从而在实时对象检测任务中表现出更高的准确性和效率。

在这里插入图片描述
图展示了在相同输入图像下,不同神经网络架构的特征图对比。

特征图代表了模型初始权重处理后各个网络架构所关注的内容。

这些可视化包括PlainNet、ResNet、CSPNet以及所提出的GELAN(v9采用),以及原始输入图像。

这些地图用来分析在前馈过程中每个网络保留了多少信息。

图中表明,所提出的GELAN架构保留了最完整的信息,并为计算目标函数提供了最可靠的梯度信息,这对模型的准确性至关重要。

在这里插入图片描述
GELAN在添加了PGI的可逆分支后,对目标对象的专注能力得到了提升。

  • GELAN在没有PGI时显示出一些分散的特征激活
  • 而在结合了PGI后,YOLOv9能够更集中地捕捉到目标对象的位置
  • 表明PGI的引入有助于网络在早期训练阶段就能够更准确地学习到目标的关键信息。

 

在MS COCO数据集上实现顶尖性能。

在这里插入图片描述

YOLO v9 设计逻辑

深度网络在处理复杂任务时面临的主要问题——信息丢失和梯度流偏差。

YOLO v9 结合 可编程梯度信息(PGI)和 通用ELAN(GELAN) 设计。

GELAN架构改进是基于ELAN,能够有效降低参数数量,提高计算效率。PGI作为训练改善手段,可以更好地维护传播过程中的关键信息。

PGI 通过一个辅助的可逆分支来维持关键信息,并确保梯度流的准确性。

接着,为了使模型能够在不同的硬件上高效运行,设计了GELAN,它允许模型根据硬件能力选择最合适的计算块。

最后,通过结合这两种技术,开发了YOLOv9,它在保持模型轻量级的同时,大幅提升了对象检测的准确率和速度。

可编程梯度信息(PGI)和广义高效层聚合网络(GELAN)是在深度学习领域为提高神经网络性能而提出的先进概念。以下是对这两个概念的详细解释:

可编程梯度信息(PGI):使用PGI改善训练过程

PGI是一种旨在解决深度网络中的信息瓶颈问题的策略。

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

  • 特征1:辅助可逆分支 - PGI在网络中引入了一个辅助分支,它与主分支并行运行。

    这个辅助分支被设计为可逆的,意味着它可以在不丢失信息的情况下执行数据的正向和反向传播。

    这有助于在训练过程中产生更可靠的梯度信号,因为它保证了即使是深层次的特征也能够保留对目标任务有用的信息。

  • 特征2:避免语义损失 - 在深度监督方法中,通常将额外的监督信号(如分类标签)插入到网络的中间层,以促进更深层的特征学习。

    然而,这种方法可能会引入语义损失,因为中间层的特征可能无法完全代表数据的全部复杂性。

    PGI通过其辅助可逆分支的设计来避免这种情况,使得整个网络能够在各个层次上保持语义信息的完整性。

PGI框架包括三个组件:主分支、辅助可逆分支和多级辅助信息

  • 特征1: 主分支用于推断,保证无额外推断成本。
  • 特征2: 辅助可逆分支产生可靠梯度,防止信息丢失。
  • 特征3: 多级辅助信息整合不同预测头的梯度信息。

PGI通过辅助可逆分支和多级辅助信息两条路径来提供可靠的梯度,并指导主分支学习,形成一个互补和增强的网络结构。

  • 辅助可逆分支作为一个独立模块在训练阶段生成可靠梯度,然后在推断阶段被移除,确保了信息的完整性而不增加推断成本。
  • 多级辅助信息作为一个整合网络,联合不同预测头的梯度,提供全面的信息给主分支。

 


广义高效层聚合网络(GELAN):使用GELAN改进架构

GELAN是一个新型的神经网络架构,它结合了多种网络设计的优点,旨在提供一个既轻量又高效的网络架构。

  • 特征1:综合设计 - GELAN融合了CSPNet和ELAN的设计理念,创建了一个灵活的网络架构,能够根据不同的应用需求和计算资源进行调整。

    CSPNet通过分割和合并特征图来减少冗余计算,而ELAN则使用层聚合来增强特征的表示能力。

  • 特征2:计算块的自由选择 - 与传统的深度网络架构依赖特定类型的计算单元不同,GELAN允许在其框架内使用各种类型的计算块,比如传统的卷积层、深度可分卷积或者其他类型的新颖计算单元。

    这种设计不仅提高了网络的适应性,也使得GELAN能够轻松地部署在不同性能的设备上,从高性能服务器到边缘设备。

在这里插入图片描述
这图是 GELAN(广义高效层聚合网络)的架构,并将其与CSPNet和ELAN两种网络架构进行了对比。

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

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

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

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

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

图中的“transition”表示特征转换层,“split”表示特征分裂操作,“concatenation”表示特征合并操作。

“xn”表示特征的复制或扩展,“module”表示网络中的可选模块,“partition”表示特征的分区。

通过这种方式,GELAN旨在克服以往架构中存在的局限性,如过度依赖卷积层堆叠或者处理复杂任务时的效率问题。

  • 融合 CSPNet 的计算效率 和 ELAN 的层聚合策略。

这种设计不仅减少了模型的参数数量和计算复杂度,还保持了高水平的准确率和推理速度,使其适用于各种推理设备,从高性能服务器到资源受限的边缘设备。

此外,GELAN的灵活性允许开发者根据特定应用场景的需要,自由选择和替换不同的计算块,进一步优化模型性能和效率。
 


对比其他解法

除了YOLOv9采用的PGI(可编程梯度信息)和GELAN(广义高效层聚合网络)外,还有其他几种解法。

在这里插入图片描述
这图是关于不同神经网络架构及方法的可视化对比,特别是在处理信息瓶颈和提供辅助信息方面的不同策略。

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

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

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

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

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

1. 残差网络(ResNet)

  • 解决方案: 通过引入残差连接(Skip Connections)允许信息直接从一层传递到后面的多个层,从而减轻了梯度消失问题并保留了更多的信息。

  • 对比: 残差连接是一种简单有效的方法来维持信息流,但它可能不足以处理所有类型的信息损失,尤其是在非常深的网络或需要高度复杂特征提取的任务中。

    PGI通过辅助可逆分支提供了一种更为动态和可控的方式来保持关键信息,而GELAN则通过灵活的网络结构设计提供了进一步的优化空间。

2. 密集连接网络(DenseNet)

  • 解决方案: 在DenseNet中,每一层都与前面所有层直接相连,这保证了信息在网络中的自由流动,并减少了信息丢失。

  • 对比: DenseNet通过增强特征重用来提高效率和减少参数数量,但这种架构的参数效率和计算效率与GELAN相比可能不那么优秀。

    GELAN允许更灵活的计算块使用,可能在特定任务上提供更好的性能和效率。

3. 注意力机制

  • 解决方案: 注意力机制可以动态地聚焦于输入数据的关键部分,从而提高网络对重要信息的敏感性和保留能力。

  • 对比: 注意力机制为网络提供了一种有效的信息筛选和增强方式,可以与PGI和GELAN结合使用,以进一步优化信息流和提高模型性能。

    它们各自解决信息保留问题的方式不同,可以相互补充。

    在PGI的辅助可逆分支中集成注意力机制,在PGI的辅助可逆分支中引入注意力模块,如自注意力(Self-Attention)或卷积注意力机制。

    帮助模型更加精确地聚焦于输入特征中对目标任务最重要的部分,从而在生成可靠梯度时保留更多关键信息。

    在GELAN网络中应用注意力增强的计算块,将注意力机制融入GELAN网络的计算块中,例如,使用带有注意力机制的卷积层(如注意力增强的ResNet块)作为GELAN的构建模块。

    这样的设计可以使网络在处理特征时自动强调更有用的信息,同时抑制不相关的信息。

    结合PGI和GELAN的特性使用注意力机制进行特征融合,在PGI和GELAN的结合框架中,可以在特征融合阶段引入注意力机制,特别是在合并来自主分支和辅助可逆分支的特征时。

    通过对这些特征进行加权融合,模型可以更好地利用各自的优势,提取出最有价值的信息。

4. 可逆网络架构

  • 解决方案: 一些网络设计允许前馈和反向传播过程可逆,确保了信息的完全保留。

  • 对比: 可逆网络架构直接针对信息丢失问题提供了解决方案,而PGI中的辅助可逆分支也采用了类似的思想,但在一个辅助的分支上实现,以提高梯度的可靠性和信息的保存。

    因为传统的可逆架构虽然能够保留完整的输入信息,但增加了额外的复合层,会导致推断速度变慢。

    GELAN则通过结构上的创新进一步提升了网络的性能。

5. 特征金字塔网络(FPN)

  • 解决方案: FPN通过构建一个多尺度的特征金字塔来维持在不同尺度上的信息,特别适用于需要捕捉多尺度信息的任务,如对象检测。

  • 对比: FPN专注于通过多尺度表示来保留信息,而PGI和GELAN则通过改进梯度流和网络架构的方式来综合解决信息丢失问题,三者可以结合使用,以在不同层面上优化信息保留。

    如选择GELAN作为模型的基础架构,引入FPN进行多尺度特征融合,利用PGI优化梯度流和信息保留。

 


效果

在这里插入图片描述
表格按照不同的性能指标对模型进行了排名,包括模型参数数量、浮点运算次数(FLOPs)、以及不同IoU阈值下的平均精度(AP)。

这些性能指标是衡量对象检测器性能的关键指标。

  • IoU,即交并比,是一个衡量预测边界框与真实边界框重叠度的指标。
  • AP通常用来评估模型在不同IoU阈值下检测准确性的平均表现。
  • 此外,AP的不同变体(如AP50、AP75等)代表了在不同的IoU阈值(0.50、0.75等)下的性能。

以下是表格的详细拆解:

  • #Param. (M): 模型参数的数量,以百万为单位。这反映了模型的复杂度。
  • FLOPs (G): 浮点运算次数,以十亿为单位。这是衡量模型计算复杂度的指标。
  • AP50% - AP75%: 这些列显示在IoU阈值为50%和75%时的平均精度(AP),这是评估模型准确度的常用指标。
  • AP: 这一列通常表示在所有IoU阈值上平均的AP值。
  • APS, APM, APL: 分别代表小尺寸(S)、中尺寸(M)、大尺寸(L)对象的AP值。这说明了模型在不同尺寸对象检测方面的性能。

表格中展示了多个版本的YOLO(包括YOLOv5、v6、v7、v8和v9),以及其他模型如PPYOLOE、DAMO YOLO、Gold YOLO等。

YOLOv9 在多个性能指标上显示出了优越性,特别是在参数较少和计算复杂度较低的情况下,仍然保持了高AP值,显示了其高效率和准确性。

比如其中一列:

  • YOLOv9的AP为55.6%
  • YOLOv8的AP为52.9%
  • YOLOv5的AP为50.0%

结论:

  • YOLOv9 在保持较低参数数量和计算复杂度的同时,实现了与其他高性能模型相当或更好的AP值,尤其是在大尺寸对象检测上(APL)表现出色。
  • YOLOv9的性能优于其他从头训练的模型,在大多数性能指标上都有明显提升。
  • 这表明YOLOv9是在参数效率和检测准确性之间取得了良好平衡的高效检测模型。

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

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

相关文章

01 Linux简介

Linux背景 发展史 linux从哪来的?怎么发展的?得从UNIX说起 1968年,一些来自通用电气公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念1969-1970年&am…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

2-21算法习题总结

由于蓝桥杯的题,我不知道从怎么复制,就只能粘贴图片了 翻硬币 代码 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String start sc.next();char[] starts start.toCharArray();String end sc…

Redis面试题及核心知识点讲解

redis是单线程还是多线程? redis是单线程的,主要是指网络I/O线程。Redis的持久化,集群同步等操作,则由另外的线程来执行。 2 . redis是单线程,为什么处理这么快? Redis的大部分操作都是在内存中完成。单线…

选择VR全景行业,需要了解哪些内容?

近年来,随着虚拟现实、增强现实等技术的持续发展,VR全景消费市场得以稳步扩张。其次,元宇宙行业的高速发展,也在进一步拉动VR全景技术的持续进步,带动VR产业的高质量发展。作为一种战略性的新兴产业,国家和…

一分钟学会MobaXterm当Linux客户端使用

一、介绍 MobaXterm是一款功能强大的远程计算机管理工具,它集成了各种网络工具和远程连接协议,可以帮助用户在Windows系统上轻松管理远程计算机。MobaXterm支持SSH、Telnet、RDP、VNC等多种远程连接协议,同时还集成了X11服务器,可…

react hook使用UEditor引入秀米图文排版

里面坑比较多,细节也比较多 以下使用的是react 18 ice3.0,使用其他react脚手架的配置基本相同,例如umi4 1.下载UEditor 进入UEditor仓库,找到版本v1.4.3.3,点击进去 接着下载ueditor1_4_3_3-utf8-jsp.zip版本 下载好…

iMazing2024Windows和Mac的iOS设备管理软件(可以替代iTunes进行数据备份和管理)

iMazing2024是一款兼容 Windows 和 Mac 的 iOS 设备管理软件,可以替代 iTunes 进行数据备份和管理。以下是一些 iMazing 的主要功能和优点: 数据备份和恢复:iMazing 提供了强大的数据备份和恢复功能,可以备份 iOS 设备上的各种数据…

精品基于jsp+SSM实现的仓储物流管理系统-驿站快递登记取件

《[含文档PPT源码等]精品基于jspSSM实现的仓储物流管理系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 使用技术: 开发语言:Java 框架:ssm 技术:JSP JDK版…

使用 package.json 配置代理解决 React 项目中的跨域请求问题

使用 package.json 配置代理解决 React 项目中的跨域请求问题 当我们在开发前端应用时,经常会遇到跨域请求的问题。为了解决这个问题,我们可以通过配置代理来实现在开发环境中向后端服务器发送请求。 在 React 项目中,我们可以使用 package…

MyBatis-Plus:通用分页实体封装

分页查询实体:PageQuery package com.example.demo.demos.model.query;import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; import org.springframework.util.St…

linux 系统的目录结构

为什么某些执行程序位于/bin、/sbin、/usr/bin或/usr/sbin目录下?例如,less命令位于/usr/bin目录下。为什么不是/bin、/sbin或/usr/sbin?这些目录之间有什么区别呢? 在这篇文章中,让我们主要讲述一下Linux文件系统结构…

css实现梯形

<div class"trapezoid"></div> .trapezoid {width: 200px;height: 0;border-bottom: 100px solid red; /* 定义梯形的底边 */border-left: 50px solid transparent; /* 定义梯形的左边 */border-right: 50px solid transparent; /* 定义梯形的右边 */} …

【测试】----JMeter性能测试工具入门篇

定义&#xff08;主要测试的是接口&#xff09; JMeter是Apache组织使用Java开发的一款测试工具&#xff0c;可以对服务器&#xff0c;网络或者对象模拟巨大的负载情况&#xff1b;通过创建带有断言的脚本来验证程序是否能返回期望的结果 优缺点 优点 开源免费跨平台&#xff0…

Sui基金会与沙迦美国大学宣布合作开设区块链学院

沙迦美国大学&#xff08;American University of Sharjah&#xff0c;AUS&#xff09;作为中东领先的创新中心&#xff0c;与Sui合作推出了一个新的区块链研究中心&#xff0c;进一步提升了其在创新领域的声誉。 该举措是沙迦酋长国旨在将自己定位为教育和研究区域中心的一部…

imazing是什么软件?2024最新版本有哪些功能

iMazing的其他功能包括&#xff1a; iOS信息查询&#xff1a;在iMazing中&#xff0c;用户可以查询到关于iOS设备的所有信息&#xff0c;包括设备型号、系统版本、存储容量、电池状态等&#xff0c;还能将这些设备的信息进行导出&#xff0c;方便用户随时了解自己的设备状态。…

微信小程序uniapp+vue校园任务跑腿接单平台java+python+nodejs+php

对于校园跑腿系统功能所牵扯的数据都是通过用户进行校园跑腿系统等相关的数据信息内容、并且可以进行管理员服务端&#xff1b;首页、个人中心、学生管理、跑腿者管理、系统公告管理、在线下单管理、已完成订单管理、订单评价管理、已接订单管理、系统管理&#xff0c;跑腿者客…

第六篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:深度解读Kaldi库个性化定制语音搜索引擎

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、数据准备示例代码四、特征提取示例代码五、声学模型训练示例代码六、语言模型训练示例代码七、解码示例代码八、评估和调优示例代码九、…

LINUX读取RTC实时时钟时间

linux 读写RTC时间_linux rtc 读写-CSDN博客

Kotlin 中 List 和 MutableList 的区别

List&#xff1a;通用的有序元素集合。此接口中的方法仅支持对列表的只读访问&#xff1b;MutableList&#xff1a;支持添加和删除元素的通用有序元素集合。通过 MultableList 接口支持读/写访问&#xff1b; List 的相关操作&#xff1a; MutableList 的相关操作&#xff1a;…