YOLOV9目标检测-训练、验证、推理

目录

一、模型介绍

1.1摘要

1.2模型概要

1.2.1Programmable Gradient Information

(1)Auxiliary Reversible Branch

(2)Multi-level Auxiliary Information

1.2.2Generalized ELAN

二、环境配置

三、数据集准备

四、预训练权重下载

五、训练

六、模型评估

​七、模型推理


论文:yolov9

模型:yolov9

一、模型介绍

1.1摘要

今天的深度学习方法关注的是如何设计最合适的目标函数,使模型的预测结果最接近地面的真实情况。同时,必须设计一个适当的体系结构,以方便获取足够的预测信息。现有方法忽略了一个事实,即输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。本文将深入研究数据在深度网络中传输时的重要数据丢失问题,即信息瓶颈和可逆函数。我们提出了可编程梯度信息(PGI)的概念,以应对深度网络实现多个目标所需的各种变化。PGI可以为目标任务提供完整的输入信息来计算目标函数,从而获得可靠的梯度信息来更新网络权值。此外,设计了一种新的基于梯度路径规划的轻量级网络结构——广义高效层聚合网络(GELAN)。GELAN的架构证实了PGI在轻量化模型上取得了卓越的成果。我们在基于MS COCO数据集的目标检测上验证了提出的GELAN和PGI。结果表明,与基于深度卷积的最新方法相比,GELAN仅使用常规卷积算子可以获得更好的参数利用率。PGI可用于从轻型到大型的各种模型。它可以用来获取完整的信息,使得从头开始训练的模型比使用大数据集预训练的最先进的模型获得更好的结果。

1.2模型概要

PGI和相关的网络体系结构和方法:

(a)路径聚合网络(PAN)

(b)可逆列(RevCol)

(c)传统深度监督

(d)可编程梯度信息(PGI)。

        PGI主要由三个部分组成:

        (1)主分支:用于推理的架构;

        (2)辅助可逆分支:生成可靠的梯度,为主分支提供反向传输;

        (3)多级辅助信息:控制主分支学习可规划的多级语义信息。

1.2.1Programmable Gradient Information

我们提出了一种新的辅助监督框架,称为可编程梯度信息(Programmable Gradient Information, PGI),如图3 (d)所示。PGI主要包括三个部分,即(1)主分支,(2)辅助可逆分支,(3)多级辅助信息。从图3 (d)可以看出,PGI的推理过程只使用了主干分支,因此不需要任何额外的推理成本。至于其他两个组件,它们用于解决或减缓深度学习方法中的几个重要问题。其中,设计了辅助可逆分支来解决神经网络深度化带来的问题。网络深化会造成信息瓶颈,使损失函数无法产生可靠的梯度。对于多级辅助信息,设计用于处理深度监督带来的误差积累问题,特别是针对多预测分支的架构和轻量化模型。接下来,我们将逐步介绍这两个组件。

(1)Auxiliary Reversible Branch

在PGI中,我们提出了辅助可逆分支来生成可靠的梯度和更新网络参数。通过提供从数据到目标的映射信息,损失函数可以提供指导,并避免从与目标不太相关的不完整前馈特征中发现虚假关联的可能性。我们提出通过引入可逆体系结构来维护完整的信息,但是在可逆体系结构中增加主干会消耗大量的推理成本。

我们分析了图3 (b)的架构,发现当添加从深层到浅层的额外连接时,推理时间将增加20%。当我们将输入数据反复添加到网络的高分辨率计算层(黄色框)时,推理时间甚至超过了时间的两倍。

由于我们的目标是使用可逆架构来获得可靠的梯度,因此“可逆”并不是推理阶段的唯一必要条件。鉴于此,我们将可逆分支作为深度监督分支的扩展,然后设计辅助可逆分支,如图3 (d)所示。对于因信息瓶颈而丢失重要信息的主分支深度特征,将能够从辅助可逆分支接收到可靠的梯度信息。

这些梯度信息将驱动参数学习,帮助提取正确的重要信息,以上动作可以使主分支获得对目标任务更有效的特征。此外,可逆结构在浅层网络上的表现比一般网络差,因为复杂的任务需要在深层网络中进行转换。我们提出的方法并不强制主分支保留完整的原始信息,而是通过辅助监督机制生成有用的梯度来更新原始信息。这种设计的优点是,所提出的方法也可以应用于较浅的网络。

最后,由于在推理阶段可以去除辅助可逆分支,因此可以保留原始网络的推理能力。我们也可以在PGI中选择任意可逆体系结构来充当辅助可逆分支的角色。

(2)Multi-level Auxiliary Information

在本节中,我们将讨论多层辅助信息是如何工作的。包含多个预测分支的深度监督架构如图3 (c)所示。对于对象检测,可以使用不同的特征金字塔来执行不同的任务,例如它们可以一起检测不同大小的对象。因此,在连接到深度监督分支后,将引导浅层特征学习小目标检测所需的特征,此时系统将其他大小目标的位置作为背景。然而,上述行为会导致深层特征金字塔丢失大量预测目标物体所需的信息。对于这个问题,我们认为每个特征金字塔都需要接收到所有目标对象的信息,这样后续的主干分支才能保留完整的信息来学习对各种目标的预测
多级辅助信息的概念是在辅助监督的特征金字塔层次层和主分支之间插入一个集成网络,然后利用它来组合来自不同预测头的返回梯度,如图3 (d)所示。多级辅助信息就是将包含所有目标对象的梯度信息进行聚合,传递给主分支,然后更新参数。此时,主要分支的特征金字塔层次结构的特征就不会被某些特定对象的信息所支配。因此,该方法可以缓解深度监督中的信息破碎问题。此外,任何集成网络都可以使用多层次的辅助信息。
因此,我们可以规划所需的语义层次来指导不同规模的网络架构的学习。

1.2.2Generalized ELAN

在本节中,我们描述了提出的新网络架构- GELAN。通过结合CSPNet[64]和ELAN[65]这两种采用梯度路径规划设计的神经网络架构,我们设计了兼顾轻量级、推理速度和准确性的广义高效层聚合网络(GELAN)。它的整体架构如图4所示。我们将最初仅使用卷积层堆叠的ELAN[65]的能力推广到可以使用任何计算块的新架构。

二、环境配置

创建环境:

conda create -n yolov9 python=3.8

激活环境:

conda activate yolov9

注意!!requirments中的torch和torchvision下载完后为cpu版本,不能用!!

此时,有一种方法,先下requirements中的包,然后卸载torch和torchvison,然后下载对应cuda版本的gpu的torch和torchvison。

pip install -r requirements.txt -i https://mirrors.bfsu.edu.cn/pypi/web/simple/
pip uninstall torch
pip uninstall torchvision

我的cuda版本是11.3,大家根据自己的cuda版本进行下载:

pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113

三、数据集准备

准备下面格式的数据集

其中,fall.yaml文件内容如下,路径,类别以及类别数量需要根据自己的进行修改:

train: C:/Users/24480/Desktop/yolov9-main/data/pp_fall/train/images
val: C:/Users/24480/Desktop/yolov9-main/data/pp_fall/val/images
test: C:/Users/24480/Desktop/yolov9-main/data/pp_fall/test/images

# number of classes
nc: 1


# class names
names: ['fall']

四、预训练权重下载

目前只能下载YOLOv9-C和YOLOv9-E

五、训练

如果加载的是YOLOv9-C的预训练权重的话,需要修改yolov9-c.yaml

修改train_dual.py中的参数

然后运行

训练结束,保存在下面这个路径下:

六、模型评估

修改val_dual.py的参数


七、模型推理

修改detect.py中的参数

此时会发现报错:

bug解决:

修改general.py,将903行prediction = prediction[0]改为prediction = prediction[0][1]

问题解决

大佬链接:

大佬1

大佬2

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

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

相关文章

图论:一文教你读懂常见的图遍历算法

一文教你读懂常见的图遍历算法 深度优先搜索(DFS): 从一个起始节点开始,访问该节点并将其标记为已访问。递归地访问所有与当前节点直接相连且未被访问过的节点。重复上述步骤,直到所有节点都被访问过或没有未访问的节…

【分享 网络墙测试】检测当前网络是否能用于其他平台,速度检测

文章日期:2024.04.17 类型:软件分享 兼容:win10 / win11 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法&#xff09…

为什么科拓停车选择OceanBase来构建智慧停车SaaS应用

本文来自OceanBase的客户——拓客停车的实践分享 科拓停车简介与业务背景 作为智慧停车行业的佼佼者,科拓停车致力于提供全方位的智慧停车解决方案。服务涵盖车场运营管理、互联网智慧停车平台以及停车场增值服务等。通过不断研发创新,打造出了多样化的…

国内最具有影响力的三个 3D 视觉方向平台!

3D视觉工坊 我的朋友创办的「3D视觉工坊」公众号,由多名名校硕博士和大厂算法工程师共同运营,博主及合伙人参与研发过多种3D视觉产品,包括割草机、自动驾驶、工业3D相机等,有着非常丰富的落地经验。主要专注于3D高斯、工业3D视觉…

【Excel2LaTeX】复杂表格制作的解决方案

刚开始用LaTeX写论文,遇到的第一道坎就是绘制表格,较小的普通表格可以通过简单的语法实现,但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具:Excel2LaTeX插件,下载地址&#x…

SSH协议的优缺点

SSH(Secure Shell)是一种用于在计算机网络上进行安全远程访问和执行命令的协议。提供加密通信通道,防止敏感信息在传输过程中被窃听或篡改。SSH还支持文件传输和端口转发等功能,使其成为广泛使用的安全远程管理工具。 1. 安全远程…

对桥接模式的理解

目录 一、背景二、桥接模式的demo1、类型A(形状类型)2、类型B(颜色类型)3、需求:类型A要使用类型B(如:红色的方形)4、Spring的方式 一、背景 在《对装饰器模式的理解》中&#xff0…

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…

CS学习(九)—— 分支实现

if-else 18&#xff1a;若y<x&#xff0c;跳转L2 22&#xff1a;否则&#xff0c;跳转L3。 goto 可见&#xff0c;与if-else类似。但是用goto很low。 条件表达式 又是与if类似&#xff0c;那有没有区别&#xff1f; 当然&#xff0c;条件表达式两个式子都会计算&…

html、css、京东移动端静态页面,资源免费分享,可作为参考,提供InsCode在线运行演示

CSDN将我上传的免费资源私自变成VIP专享资源&#xff0c;且作为作者的我不可修改为免费资源&#xff0c;不可删除&#xff0c;寻找客服无果&#xff0c;很愤怒&#xff0c;&#xff08;我发布免费资源就是希望大家能免费一起用、一起学习&#xff09;&#xff0c;接下来继续寻找…

Leetcode 15. 三数之和(暴力->双指针)

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…

git clone报错:error invalid path ‘dorisdockerthirdpartiesdocker-composexxxx‘

git clone报错&#xff1a;error: invalid path ‘doris/docker/thirdparties/docker-compose/xxxx’ 在周日晚上&#xff0c;我尝试从GitHub上克隆Doris的代码库&#xff0c;以便进行学习。在使用IntelliJ IDEA进行克隆时&#xff0c;我遇到了一个Git错误。具体操作如下&…

UbuntuServer22.04安装docker

通过ubuntuserver安装docker是搭建开发环境最便捷的方式之一。下面介绍一下再ubuntu22.04上如何安装docker。相关内容参考官网链接&#xff1a;Install Docker Engine on Ubuntu 根据官网推荐&#xff0c;利用apt命令的方式安装&#xff0c;首先需要设置docker仓库&#xff0c…

✌粤嵌—2024/4/3—合并K个升序链表

代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…

杰发科技AC7840——CAN通信简介(4)_过滤器设置

0. 简介 注意&#xff1a;过滤器最高三位用不到&#xff0c;因此最高位随意设置不影响过滤器。 1. 代码分析 注意设置过滤器数量 解释的有点看不懂 详细解释...也看不大懂 Mask的第0位是0&#xff0c;其他位都是1(就是F?)&#xff0c;那就指定了接收值就是这个数&#xff0c;…

深度强化学习(DRL)算法 附录 6 —— NLP 回顾之预训练模型篇

Self-Attention 模型结构 上图架构以 batch_size 为 1&#xff0c;两个时间步的 X 为例子&#xff0c;计算过程如下&#xff1a; 位置编码 根据 self-attention 的模型结构&#xff0c;改变 X 的输入顺序&#xff0c;不影响 attention 的结果&#xff0c;所以还需要引入额外的…

解决Linux根分区空间不足的方法:利用Home分区进行扩容

前言 在进行系统安装时&#xff0c;一个常见的困扰是默认分区设置可能导致home分区拥有过多的空间&#xff0c;而root分区却显得十分紧缺。这种情况下&#xff0c;用户往往会陷入无法继续安装软件或存储文件的困境。本文将向您展示如何通过合理的调整&#xff0c;将home分区中多…

《剑指 Offer》专项突破版 - 面试题 111 : 计算除法(C++ 实现)

题目链接&#xff1a;计算除法 题目&#xff1a; 输入两个数组 equations 和 values&#xff0c;其中&#xff0c;数组 equations 的每个元素包含两个表示变量名的字符串&#xff0c;数组 values 的每个元素是一个浮点数值。如果 equations[i] 的两个变量名分别是 和 &#…

接口测试——postman

一.下载与安装 https://www.getPostman.com/ 界面导航说明 二.get请求 第一个get请求 批量执行接口请求&#xff1a; 1. 右击run collection 2. 会出现runner标签页 携带参数的GET请求 所谓的查询参数&#xff0c;其实就是URL地址中问号&#xff08;?&#xff09;后面的部分…

易基因: MeRIP-seq揭示lncRNA甲基化通过lncRNA-miRNA/蛋白质轴抑制胃癌干细胞凋亡|文献解读

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 癌症一直是生物学研究的热门话题。关于癌症起源&#xff0c;一种主流观点是癌症干细胞&#xff08;Cancer Stem Cell&#xff0c;CSC&#xff09;的无限增殖。CSC是肿瘤内肿瘤细胞的一个…