【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路设计 + 全流程优化 + 手把手训练自己数据

news/发布时间2024/6/8 4:05:56

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是在参数效率和检测准确性之间取得了良好平衡的高效检测模型。

 


训练自己数据

英文原文:https://blog.roboflow.com/train-yolov9-model/

  • 中文解读:https://mp.weixin.qq.com/s/_wsJbLaoZqFNiEri5yiW4Q

代码:https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/train-yolov9-object-detection-on-custom-dataset.ipynb?ref=blog.roboflow.com

训练YOLOv9,分为以下部分:

  1. 安装YOLOv9:首先需要从GitHub克隆YOLOv9的代码库,并安装必要的依赖。

  2. 数据准备:下载并准备自定义数据集,例如足球运动员的数据集。数据集需要被格式化为YOLOv9兼容的格式。

  3. 模型训练:使用训练脚本和自定义数据集来训练模型。可以根据需要调整训练参数,如批量大小、训练周期数、图像大小等。

  4. 模型评估:训练完成后,使用生成的图表和混淆矩阵来评估模型的性能。

  5. 推理运行:最后,使用训练好的模型对新的图像或数据进行预测,以检验模型的实际效果。

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

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

相关文章

k8s(5)

目录 使用Kubeadm安装k8s集群: 初始化操作: 每台主从节点: 升级内核: 所有节点安装docker : 所有节点安装kubeadm,kubelet和kubectl: 修改了 kubeadm-config.yaml,将其传输给…

面试redis篇-09redis分布式锁

原理 Redis实现分布式锁主要利用Redis的setnx命令。setnx是SET if not exists(如果不存在,则 SET)的简写 Redis实现分布式锁如何合理的控制锁的有效时长? 根据业务执行时间预估 给锁续期 redisson实现的分布式锁-可重入 利用hash结构记录线程id和重入次数 redisson实现的分…

Linux NFC 子系统剖析

1.总览 linux源码中NFC在net/nfc下,文件结构如下图: hci:Host Controller Interface 主要是针对NFC的主机-控制器接口协议 nci:NFC Controller Interface 主要是NFC的控制器接口协议,用于NFCC(NFC Controller)和DH(…

项目解决方案:街道社区视频监控接入、汇聚和联网设计方案

目 录 一、客户需求 二、网络拓扑图 三、方案描述 四、系统配置 1、服务器配置 2、带宽配置 五、方案优势 1. 平台可堆叠使用 2. 支持主流接入协议 4. 多种终端显示 5. 客户端功能强大 6. 一机一档 一、客户需求 1,一个街道有十个社…

spark 少量key倾斜的join优化

背景 在使用spark join时,我们经常遇到少量key拥有大量的数据而导致的数据倾斜的问题,这导致了task任务数据处理非常不均匀而影响最终时效 少量key数据倾斜的join优化 这里有一个前提,join的另一边的表没有数据倾斜问题,也就是…

vue3(vite)+electron打包踩坑记录(1)

vue3(vite)electron打包踩坑记录 - 打包vue 第一步 编译vue 使用vite构建vue,package.json如下 {"name": "central-manager","private": true,"version": "0.0.0","type": "commonjs",&q…

曝iPhone 16 Pro加入两款全新配色:辨识度拉满

博主Majin Bu透露,苹果为即将推出的iPhone 16 Pro系列提供全新的两款配色,分别为“沙漠钛金”和“钛灰色”两种颜色选择。 该博主表示,“沙漠钛金”类似于2022年iPhone 14 Pro上提供的金色选项,但更深更重。另一方面,“…

数字化运维与AIOps

干掉传统运维的不是devops,不是容器化,而是AI。随着未来基础设施的膨胀和复杂度急剧提升,人类运维能力已经显得力不从心。运维最终的归宿一定是人类决策,AI汇报与执行。 什么是数字化运维 数字化运维是一种基于信息技术手段数字化…

剪辑视频调色怎么让画质变得清晰 视频剪辑调色技巧有哪些方面 剪辑视频免费的软件有哪些 会声会影调色在哪里 会声会影模板素材

视频调色的作用有很多,除了进行风格化剪辑以外,还可以让作品的画质变得清晰。通过调色来增强画面的清晰度,在观感上也会显得十分自然。视频调色的技巧有很多,并且原理大都十分简单。有关剪辑视频调色怎么让画质变得清晰&#xff0…

R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现技术应用

回归分析是科学研究中十分重要的数据分析工具。随着现代统计技术发展,回归分析方法得到了极大改进。混合效应模型(Mixed effect model),即多水平模(Multilevel model)/分层模型(Hierarchical Model)/嵌套模…

C语言—函数

1.编写一个函数&#xff0c;通过输入一个数字字符&#xff0c;返回该数字29. /*1.编写一个函数&#xff0c;通过输入一个数字字符&#xff0c;返回该数字 */#include <stdio.h>//函数定义,返回类型为int int char_num(char c) {if(c > 0 && c < 9) //检查…

《隐私计算简易速速上手小册》第7章:隐私计算与云计算/边缘计算(2024 最新版)

文章目录 7.1 云计算中的隐私保护7.1.1 基础知识7.1.2 主要案例:使用 Python 实现云数据的安全上传和访问7.1.3 拓展案例 1:实现基于角色的访问控制7.1.4 拓展案例 2:使用 Python 保护 API 安全7.2 边缘计算的隐私问题7.2.1 基础知识7.2.2 主要案例:使用 Python 实现边缘设…

【MATLAB】 LMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 LMD分解算法 LMD (Local Mean Decomposition) 分解算法是一种信号分解算法&#xff0c;它可以将一个信号分解成多个局部平滑的成分&#xff0c;并且可以将高频噪声和低频信号有效地分离出来。LMD 分解算…

如何移除禁用WordPress默认小工具(附WordPress默认小工具名称)

WordPress 自带的小工具非常多&#xff0c;但是我们用到的也就那么几种&#xff0c;甚至一种都不会用到&#xff0c;所以很有必要注销&#xff08;去除&#xff09;掉一些不用的小工具。实现的方法也很简单&#xff0c;只需将以下代码&#xff0c;根据自己的情况删除需要用的小…

使用单一ASM-HEMT模型实现从X波段到Ka波段精确的GaN HEMT非线性仿真

来源&#xff1a;Accurate Nonlinear GaN HEMT Simulations from X- to Ka-Band using a Single ASM-HEMT Model 摘要&#xff1a;本文首次研究了ASM-HEMT模型在宽频带范围内的大信号准确性。在10、20和30 GHz的频率下&#xff0c;通过测量和模拟功率扫描进行了比较。在相同的频…

LeetCode76题:最小覆盖子串(python3)

代码思路&#xff1a; 1.增加j使滑动窗口增大&#xff0c;直到窗口包含了t的所有元素&#xff1b; 2.增加i使滑动窗口缩小&#xff0c;将不必要的元素排除在外,直到碰到一个必须包含的元记录此时滑动窗口的长度&#xff0c;并保存最小值&#xff1b; 3.再增加一个位置&#xff…

数据可视化引领智慧工业新时代

在智慧工业的大潮中&#xff0c;数据可视化崭露头角&#xff0c;以其直观、清晰的方式赋能工业生产&#xff0c;为智慧工业的高效运转提供了强有力的支持。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 数据可视化首先在智慧工业的生产监控中大显身手。通过将…

HTML+CSS:动态搜索框

效果演示 这段代码实现了一个简单的搜索栏效果。页面背景为从天蓝色到深蓝色的渐变色&#xff0c;搜索栏包括一个圆形背景的搜索图标和一个输入框。当用户点击搜索图标时&#xff0c;输入框会从搜索图标的位置滑出&#xff0c;显示一个输入框和一个清除按钮。用户可以在输入框中…

通过盲注脚本复习sqllabs第46关 order by 注入

sql-lab-46 order by 注入是指其后面的参数是可控的&#xff0c; order by 不同于我们在 where 后的注入点&#xff0c;不能使用 union 等注入&#xff0c;其后可以跟接 报错注入 或者 时间盲注。 数字型order by注入时,语句order by2 and 12,和order by2 and 11显示的结果一…

HTML5和CSS3提高

一、HTML5的新特性 增加了一些新的标签&#xff0c;新的表单&#xff0c;新的表单属性&#xff0c;IE9以上版本的浏览器才支持 注意&#xff1a; 这些语义化标准主要针对搜索引擎的 新标签可以使用多次 在IE9中需要把这些元素转化为块级元素 新增的多媒体标签 主要包含两个…
推荐文章