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

  • 34
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要训练YOLOv4-tiny模型使用自己的数据集,你需要按照以下步骤进行操作: 1. 数据准备:准备一个包含标注信息的数据集,其中包含图像和相应的边界框信息。确保每个图像都有对应的标注文件,其中包含每个物体的类别和边界框的位置。 2. 模型配置:下载YOLOv4-tiny的模型配置文件,该文件定义了模型的结构和超参数。你可以从Darknet官方GitHub仓库中获取。 3. 权重文件:下载预训练的权重文件,这将有助于更快地收敛模型。你可以从Darknet官方GitHub仓库中找到与YOLOv4-tiny相对应的权重文件。 4. 数据标注:将你的数据集标注为YOLOv4-tiny所需的格式。可以使用标注工具(如LabelImg、VoTT等)来标注每个图像中的物体类别和边界框。 5. 数据划分:将数据集划分为训练集和验证集。建议使用80%的数据作为训练集,20%的数据作为验证集。 6. 配置文件修改:根据你的数据集和需求,修改YOLOv4-tiny的配置文件。主要修改类别数量、路径和大小等参数。 7. 训练:使用修改后的配置文件和预训练权重文件,开始训练YOLOv4-tiny模型。你可以使用Darknet框架来进行训练,按照其文档中的指示进行操作。 8. 调优:通过逐渐调整超参数(如学习率、批大小等)和训练策略(如数据增强、学习率衰减等),进一步优化模型性能。 9. 模型评估:使用验证集评估模型的性能,包括计算平均精度(mAP)等指标。根据评估结果进行调整和改进。 10. 模型推理:完成训练后,你可以使用训练得到的权重文件进行目标检测任务。在推理时,加载模型权重并对新图像进行预测。 以上是训练YOLOv4-tiny模型使用自己的数据集的一般步骤。请注意,这是一个相对复杂的任务,需要一定的深度学习和计算机视觉知识。建议在开始之前先学习相关的基础知识和技术。祝你成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值