YOLOv9目标识别——详细记录训练环境配置与训练自己的数据集

前言

YOLOv9引入了一种全新的计算机视觉模型架构,相比目前流行的YOLO模型(如YOLOv8、YOLOv7和YOLOv5),在MS COCO数据集上取得了更高的mAP(平均精度均值)。
YOLOv9是由Chien-Yao Wang、I-Hau Yeh和Hong-Yuan Mark Liao开发的计算机视觉模型。这些研究人员还对YOLOv4、YOLOR和YOLOv7等流行的模型架构进行了研究。YOLOv9引入了两种新的架构:YOLOv9和GELAN。这两种架构都可以通过YOLOv9 Python库进行使用。

使用YOLOv9模型,可以训练出目标检测模型,但不支持分割、分类等任务类型。YOLOv9有四种不同参数数量的模型,按参数个数排序为:v9-S、v9-M、v9-C、v9-E。目前v9-S和v9-M的权重尚不可用。其中,最小的模型在MS COCO数据集的验证集上达到了46.8%的AP,而最大的模型则达到了55.6%。这为目标检测性能提供了一个新的先进水平。下面的图表展示了来自YOLOv9研究团队的研究结果。
在这里插入图片描述

算法解读

1. YOLOv9算法改进:

YOLOv9通过从可逆函数的角度对现有的CNN架构进行理论分析,提出了一些改进:

  • PGI和辅助可逆分支设计: YOLOv9的作者在分析现有CNN架构时,提出了可逆函数的概念,并设计了PGI和辅助可逆分支。这些改进在实践中取得了显著的成果。

  • 解决深度监督的问题: YOLOv9的PGI解决了深度监督仅适用于极深的神经网络架构的问题,从而使得新的轻量级架构也能够获得良好的应用效果。

  • GELAN设计: YOLOv9中引入的GELAN仅使用传统卷积技术,却能实现比基于最先进技术的深度可分卷积设计更高的参数使用率。同时,GELAN展现出轻量级、快速和精确的巨大优势。

  • 性能提升: 基于PGI和GELAN的改进,YOLOv9在MS COCO数据集上的性能在各个方面都明显超过了现有的实时目标检测器。

2. PGI(可编程梯度信息):

PGI主要由以下三个组成部分组成:

  • 主分支: 主要用于网络的前向推理过程,不需要额外的推理成本。

  • 辅助可逆分支: 用于解决由于神经网络加深而导致的信息瓶颈问题。辅助可逆分支采用可逆架构,提供可靠的梯度信息用于参数更新。

  • 多级辅助信息: 插入在主分支和辅助监督之间的特征金字塔层次结构中,用于聚合包含所有目标对象的梯度信息,并传递给主分支进行参数更新。
    在这里插入图片描述

3.GELAN模块

YOLOv9引入了一种新的网络架构——GELAN,它结合了两种神经网络架构,即具有梯度路径规划的CSPNet和ELAN。GELAN被设计成一种通用的、高效的层聚合网络,综合考虑了轻量级、推理速度和准确度。
GELAN的整体架构如下图所示。相较于原始的ELAN,GELAN对ELAN的能力进行了泛化。原始的ELAN仅使用卷积层的堆叠,而GELAN则可以使用任何计算块作为其基础模块。这使得GELAN更加灵活,能够适应不同的网络设计需求,并且不局限于特定类型的计算块。
在这里插入图片描述

4. 损失函数与样本匹配

在这里插入图片描述
根据上述代码,可以看到以下内容:

  1. 样本匹配仍然使用了TaskAlign样本匹配,与YOLOv8、YOLOE、YOLOv6等算法保持一致。

  2. 分类损失使用了二元交叉熵(BCE)损失。

  3. 回归损失则结合了DFL(Distance Focal Loss)损失和CIoU(Complete Intersection over Union)损失。

5. 模型结构

在这里插入图片描述

环境安装

我这里训练环境是win10, gpu是3080,cuda 11.7 ,cudnn8.5 , 是Anacoda装的虚拟环境训练的。

环境安装:

conda create -n yolov9 python=3.10
activate ylolv9

源码下载

git clone https://github.com/WongKinYiu/yolov9.git
cd yolov9 
pip install -r requirements.txt

模型训练

数据准备

YOLOv9遵循YOLOv5-YOLOv8的训练数据构建方式,数据标注与数据转换部分,如果不理解可以参考我之前关于yolov8训练时数据处理部分:YOLOV8实例分割——详细记录环境配置、自定义数据处理到模型训练与部署, 我这里使用安全帽佩带数据集来训练模型。
在这里插入图片描述

构建数据集

新增加一个helmet.yaml文件放到yolov9/data目录下。

文件内容如下:

path: D:/DL/yolov9/data
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
#val: images/test # test images (optional)

# Classes
names:
  0: person
  1: head
  2: helmet

在这里插入图片描述

构建YOLOv9-c模型配置文件

找到yolov9/models/detect/yolov9-c.yaml文件,更改里面的内容:

# YOLOv9

# 参数
nc: 3                     # 类别数
depth_multiple: 1.0       # 模型深度倍数
width_multiple: 1.0       # 层通道数倍数
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()

# 锚点
anchors: 3

# 其他配置...

下载预训练的模型

可以手动模型,模型yolov9 git有开源:https://github.com/WongKinYiu/yolov9.git,下载需要使用的模型,我这里是目标检测,我下载了yolov9-c.pt这个模型,放到yolov9根目录下:
在这里插入图片描述

模型训练:

python3 train_dual.py --weights=./yolov9-c.pt --cfg=./models/detect/yolov9-c.yaml --data=./data/helmet.yaml --epoch=100 --batch-size=16 --imgsz=640 --hyp=data/hyps/hyp.scratch-high.yaml

如果一切顺利就开始在训练了:
在这里插入图片描述
在训练过程中,可以在yolov9/run目录下看到当前数据和状态:
在这里插入图片描述

推理测试

python detect_dual.py --source './data/images/test.jpg' --img 640 --device 0 --weights 'runs/train/exp/best.pt' --name yolov9_c_640_detect

在这里插入图片描述

  • 17
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
YOLOv5是目标检测算法中的一种,通过训练自己的数据集可以实现对自定义目标的检测。下面是YOLOv5入门实践的步骤。 第一步,准备数据集。首先收集一些与你想要检测的目标相关的图像,确保图像中的目标已标注好边界框坐标。将图像和对应的标注文件放在数据集文件夹中。 第二步,配置运行环境。需要在计算机上安装Python环境,并根据YOLOv5的要求安装相应的库和依赖。可以通过pip或conda进行安装。 第三步,调整配置文件。YOLOv5提供了一个默认的配置文件,可以根据自己的需求进行修改。主要需要调整的是类别数量和路径配置。 第四步,划分训练集和验证集。将数据集中的图像和标注文件划分为训练集和验证集,一般可以按照70%的比例划分。 第五步,训练模型。在终端中运行训练命令,指定相关参数,如模型类型、数据集路径、训练集和验证集路径等。训练时可以选择使用预训练权重或从头开始。 第六步,评估模型。训练完成后,可以通过评估命令对模型进行评估,得到关于模型性能的指标,如精确度、召回率等。 第七步,使用模型进行目标检测训练完成的模型可以用于检测自定义数据集中的目标。可以在终端中运行检测命令,指定相关参数,如模型路径、检测图像路径等。 通过以上步骤,我们可以进行YOLOv5的入门实践,训练自己的数据集,并使用训练好的模型进行目标检测。随着更多的实践和调优,可以提高模型性能和检测效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值