一文搞懂 YOLOv9 训练推理全流程 | YOLOv9你绝对不知道的细节!


在这里插入图片描述
在这里插入图片描述

文章地址:https://arxiv.org/pdf/2402.13616.pdf
代码地址:https://github.com/WongKinYiu/yolov9


前言

在这篇博客中,我们来聊聊 YOLOv9。首先,值得注意的一点是,YOLOv9的变化相对较小,它仍然基于YOLOv5的代码架构。这就意味着YOLOv5YOLOv7YOLOv9实际上是“同一个框架”。如果你已经熟悉其中一个,那么你将能够轻松掌握另外两个。

这也间接回答了大家长期存在的一个疑问:改进YOLOv5YOLOv7是否已经过时了?

YOLOv9仍然采用 v5 的框架,显然从框架的角度讲,没有“过时”!也不存在"过时"这个说法,即便用 v3 的框架依然可以做出 v10

在此,我也想和各位导师们说几句,不要用所谓的版本为难同学们了,特别是当你们可能对当前的YOLO发展并不完全了解时。虽然以数字命名的 YOLO版本已经发展到了v9,但这并不意味着它在所有方面都超越了v5。并且不只是以数字命名的YOLO才叫YOLO,除了这几个以数字命名的版本,还有很多很多优秀的 YOLO工作,很多数据集的表现上并不比数字版本差!

如果你们不信,可以尝试将YOLOv9与古老的VGG16在多个数据集上进行对比实验。我敢肯定,你会发现在某些数据集上,YOLOv9并不比VGG16表现得更好。

还有一点,各位同学们,你们做的是新的YOLO算法,你可以叫 xx-YOLO 或者 YOLO-xx,不必非得写成基于YOLOv5xx 改进,然后你的对比实验对比一下新的 v8 v9,这样老师们也没办法“找出问题”。


原理解析

YOLOv9来了! 使用可编程梯度信息学习你想学的内容, v7作者新作!【文献速读】

下面就来带大家跑一下 YOLOv9 , 先简单说下原理,主要就是两点,一个是可编程梯度信息(PGI),另一个是通用高效层聚合网络(GELAN),这里我不过多的解析,简单看下:

  • 可编程梯度信息(PGI):假设通过引入PGI,可以在深度学习模型中保留更多的输入信息,从而解决信息丢失问题。PGI允许模型在计算目标函数时使用完整的输入信息,提供可靠的梯度信息用于网络权重的更新,这对于提高模型在复杂任务上的性能至关重要。
  • 通用高效层聚合网络(GELAN):GELAN这种新型轻量级网络架构可以实现高效的信息流动和优化的参数利用,从而在保持甚至提高检测精度的同时,减少计算资源的需求。GELAN的设计旨在通过梯度路径规划优化网络结构,使之能够在不同的硬件设备上高效运行,同时提高模型的泛化能力。

在这里插入图片描述
图2. 不同网络架构随机初始化权重输出特征图的可视化结果:(a) 输入图像,(b) PlainNet,(.c) ResNet,(d) CSPNet,以及(e) 提出的GELAN。从图中我们可以看出,在不同的架构中,提供给目标函数以计算损失的信息不同程度地丢失了,而我们的架构能够保留最完整的信息,并为计算目标函数提供最可靠的梯度信息。

在这里插入图片描述
图3. PGI及相关网络架构和方法。(a) 路径聚合网络(PAN),(b) 可逆列(RevCol),(.c) 传统的深度监督,以及(d) 我们提出的可编程梯度信息(PGI)。PGI主要由三个组成部分构成:(1) 主分支(main branch):用于推断的架构,(2) 辅助可逆分支(auxiliary reversible branch):生成可靠的梯度以供主分支向后传输,以及(3) 多级辅助信息(multi-level auxiliary information):控制主分支学习可计划的多级语义信息。


代码实操

readmd解析

代码Github地址在这里:https://github.com/WongKinYiu/yolov9

我们先一起看看项目的 readmereadme 一般都包含了项目最核心的一些信息,一般可以通过这个发掘出一些"有趣的东西" ;

Performance 上看到模型有 5 个版本,但是截止到 2024/3/25 ,作者只开源了 YOLOv9-CYOLOv9-EYOLOv9-T YOLOv9-S YOLOv9-M 还没开放,按照作者的一贯性格,我认为小尺寸的模型不会是简单的尺度缩放,肯定会有特殊的设计。

在这里插入图片描述
Evaluation 这里看到了 6 个 权重链接,并且有的叫做 converted ,这让我首先想到了"结构重参数化",后来看了一眼还真是,v9还真给"结构重参数化"方法玩明白了,佩服👍,这里的几个权重什么关系我下文说。

在这里插入图片描述
下面就是一些 训练和推理的参考了,并且还给了"重参数化"用的脚本!
在这里插入图片描述


模型训练

终于来到了关键的点,这几天我也刷到了一些给我推送的文章,大家有些地方可能没注意到,并不是代码写错了,是大家用错了,

这个v9的训练脚本有三个,和我们之前v5 v7 看的都不一样的,

在这里插入图片描述
并且 yaml 结构文件也给了6个(7的yaml这里忽略),分别是 v9cegelance

在这里插入图片描述
重点来了!train.pytran_dual.pytrain_triple.py 三个都没错,都能用,但是你得对应起来!

  • train.py:常规的训练,没有辅助分支的
  • train_dual:一个辅助分支 + 一个主分支
  • triple_branch:两个辅助分支 + 一个主分支

所以当我们训练 YOLOv9-c 或者 YOLOv9-e 就用 train_dual:

python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15

你想训练没有辅助分支的 gelan 结构,你就用 train.py:

python train.py --workers 8 --device 0 --batch 32 --data data/coco.yaml --img 640 --cfg models/detect/gelan-c.yaml --weights '' --name gelan-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15

这里还涉及到一个问题,辅助分支是干啥的,顾名思义,就是辅助训练的,用"重参数化"思想来解释就是:
训练的时候带着这个辅助分支训练,训练完将这个分支"拿掉",理论上,推理的精度是"几乎不变"的。

这部分怎么做呢?用作者给的重参数化脚本:https://github.com/WongKinYiu/yolov9/blob/main/tools/reparameterization.ipynb

在这里插入图片描述

在这里插入图片描述
转换后,模型的权重大小基本掉了一半,就和上面Performance 上看到的尺寸对应上了,这就是YOLOv9最核心的东西!

模型推理

同样的,训练分了多个脚本,推理脚本也是分开的,

如果你想推理你刚才用脚本转换后的权重,你就用这个指令:

python detect.py --source './data/images/horses.jpg' --img 640 --device 0 --weights './yolov9-c-converted.pt' --name yolov9_c_c_640_detect

如果你想推理v9没转换的权重,也就是你刚训练出来的best.pt,你就用这个指令:

python detect_dual.py --source './data/images/horses.jpg' --img 640 --device 0 --weights './yolov9-c.pt' --name yolov9_c_640_detect

如果你想推理常见的gelan结构的权重,你就用这个指令:

python detect.py --source './data/images/horses.jpg' --img 640 --device 0 --weights './gelan-c.pt' --name gelan_c_c_640_detect

在这里插入图片描述

模型验证

同理,val也是分开的,

如果你想验证你刚才用脚本转换后的权重,你就用这个指令:

python val.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.7 --device 0 --weights './yolov9-c-converted.pt' --save-json --name yolov9_c_c_640_val

如果你想验证v9没转换的权重,也就是你刚训练出来的best.pt,你就用这个指令:

python val_dual.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.7 --device 0 --weights './yolov9-c.pt' --save-json --name yolov9_c_640_val

如果你想推理常见的gelan结构的权重,你就用这个指令:

python val.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.7 --device 0 --weights './gelan-c.pt' --save-json --name gelan_c_640_val

引用

@article{wang2024yolov9,title={{YOLOv9}: Learning What You Want to Learn Using Programmable Gradient Information},author={Wang, Chien-Yao  and Liao, Hong-Yuan Mark},booktitle={arXiv preprint arXiv:2402.13616},year={2024}
}
@article{chang2023yolor,title={{YOLOR}-Based Multi-Task Learning},author={Chang, Hung-Shuo and Wang, Chien-Yao and Wang, Richard Robert and Chou, Gene and Liao, Hong-Yuan Mark},journal={arXiv preprint arXiv:2309.16921},year={2023}
}

总结

到这里,YOLOv9就解析完了,这篇我并没有手把手带大家走训练的全流程,个人觉得和v5 v7 没啥区别,我这样做意义不大,最核心最重要的东西就在我上面的文章里面了;
在这里插入图片描述

顺便说一下,YOLOv9 不仅仅支持检测任务,还有实例分割任务和全景分割任务,这个我后面出教程解析,

喜欢我的文章欢迎大家点赞评论交流~

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

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

相关文章

微信小程序button动态跳转到页面

微信小程序中如何动态的跳转到某个页面。 目录 1、首先在js文件中定义事件函数 2、在页面中进行传参调用 3、其它跳转方法简单说明 1、首先在js文件中定义事件函数 goto(e){const urle.currentTarget.dataset.url;wx.navigateTo({url: url})}, 2、在页面中进行传参调用 &l…

【随笔】Git -- 常用命令(四)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

带你学会深度学习之循环神经网络[RNN] - 2

前言 笔者写下此系列文章是希望在复习人工智能相关知识同时为想学此技术的人提供一定帮助。 图源网络,所有者可随时联系笔者删除。 代码不代表全部实现,只是为展示模型的关键结构。 与CNN不同,RNN被设计用来处理序列数据。它通过在网络的…

3GPP 协议资料学习和文档下载

一、登录3GPP官网 3GPP – The Mobile Broadband Standard 二、选择Specifications Per TSG Round 三、选择ftp下载路径 四、选择不同阶段的3GPP协议 包含了从1999年到R18,甚至更新到当前最新的协议。 五、查看对应版本的LTE或者5G NR协议 其中LTE射频相关章节为36.521系列&…

小目标检测篇 | YOLOv8改进之增加小目标检测层(针对Neck网络为AFPN)

前言:Hello大家好,我是小哥谈。小目标检测是计算机视觉领域中的一个研究方向,旨在从图像或视频中准确地检测和定位尺寸较小的目标物体。相比于常规目标检测任务,小目标检测更具挑战性,因为小目标通常具有低分辨率、低对比度和模糊等特点,容易被背景干扰或遮挡。本篇文章就…

MP4如何把视频转MOV格式? MP4视频转MOV格式的技巧

在现代的数字媒体时代,视频格式转换成为了许多用户必须掌握的技能。特别是将MP4视频转换为MOV格式,这对于需要在Apple设备上播放或编辑视频的用户来说尤为重要。本文将详细介绍如何将MP4视频转换为MOV格式,帮助读者轻松应对不同设备和平台的需…

三端可调正稳压器集成电路D317——输出电压范围是1.2V至37V,负载电流最大为1.5A

D317大电流可调稳压电路 1、 概述: D317是一款三端可调正稳压器集成电路,其输出电压范围是1.2V至37V,负载电流最大为1.5A。它的使用非常简单,仅需两个外接电阻来设置输出电压。此外,它的电压线性度和负载调整率也比标准…

使用Python制作一个批量查询搜索排名的SEO免费工具

搭建背景 最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题,但是到了后期,一个网站都有几百上千…

浏览器工作原理与实践--渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的

在上一篇文章中我们介绍了导航相关的流程,那导航被提交后又会怎么样呢?就进入了渲染阶段。这个阶段很重要,了解其相关流程能让你“看透”页面是如何工作的,有了这些知识,你可以解决一系列相关的问题,比如能…

获取第三方小程序指定页面的path

获取第三方小程序指定页面的path wx.navigateToMiniProgramappIdpathwx.navigateToMiniProgram 在开发小程序时需要跳转到第三方小程序指定页面时,需通过wx.navigateToMiniProgram方法完成。其中有两个主要参数appId和path,文本以问卷星为例,分享两者获取方法。 appId 在…

使用Python批量实现文件夹下所有Excel文件的第二张表合并

目录 一、前言 二、准备工作 三、实现步骤 遍历文件夹获取所有Excel文件 读取每个Excel文件的第二张表 合并所有表格 主函数 四、案例实践 五、注意事项 六、扩展与改进 七、总结 在数据处理和分析中,经常需要对多个Excel文件进行批量操作,特…

代码随想录阅读笔记-栈与队列【滑动窗口最大值】

题目 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能在线性时间复杂度内解决此题吗? 提示&am…

如何提升FFmpeg 1‰的转码性能

在8K视频编解码特别是解码部分,我做了一些优化工作,转码速度提升了50%以上。专家们评价曰:“主要围绕算法并行度的优化,属于算法性能优化的常规手段,在创新性和技术难度方面的体现较为一般”。评价过于犀利&#xff0c…

一文道破将bean注入到Spring中的几种方式

前言: 前两天有学妹问我如何将bean注入到Spring中,虽问题较简单,但还是写此文以告之。 在Java的Spring框架中,将bean注入到容器中是核心概念之一,这是实现依赖注入的基础。Spring提供了多种方式来将bean注入到容器中…

MySQL高可用解决方案――从主从复制到InnoDB Cluster架构

2024送书福利正式起航 关注「哪吒编程」,提升Java技能 文末送5本《MySQL高可用解决方案――从主从复制到InnoDB Cluster架构》 大家好,我是哪吒。 爱奇艺每天都为数以亿计的用户提供7x24小时不间断的视频服务。通过爱奇艺的平台,用户可以…

力扣:290. 单词规律

前言:剑指offer刷题系列 问题: 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律…

docker推拉时的数据交换详解

前言 docker用了这么久了, 有没有想过, 在执行docker push 和 docker pull命令的时候, 数据是如何传递的呢? 换句话说, 如果要实现一个镜像仓库, 针对推拉的服务, 如何实现接口呢? 根据OCI 分发规范文档 的描述, 已经对整个推拉过程中要调用的接口有描述了. 但是, 纸上学来…

CNN、Transformer、Uniformer之外,我们终于有了更高效的视频理解技术

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 视频理解因大量时空冗余和复杂时空依赖,同时克服两个问题难度巨大…

力扣每日一题 2024/3/24 零钱兑换

题目描述 用例说明 思路讲解 动态规划五步法 第一步确定dp数组的含义:dp[i]为凑到金额为i所用最少的硬币数量 第二步确定动态规划方程:凑足金额为j-coins[i]所需最少的硬币个数为dp[j-coins[i]],那凑足金额为j所用的最少硬币数为dp[j-coin…

怎么将文件快速生成二维码?文件二维码的在线生成技巧

现在越来越多的人都开始通过二维码的方式来传递文件,将word、pdf、excel、pdf等格式的文件通过扫码的方式展示或者下载文件,这种方式有很多的优势,包括传播速度快成本低,只需要生成一张二维码图片,就可以让其他人能够同…