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研究团队的研究结果。
在这里插入图片描述

算法解读

YOLOv9_7">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

在这里插入图片描述

YOLOv9c_81">构建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

在这里插入图片描述


http://www.niftyadmin.cn/n/5429302.html

相关文章

Apache Paimon 的 Query Service 使用

Query Service 可以运行Flink流作业来启动表的查询服务,当QueryService存在时,Flink Lookup Join将优先从中获取数据,这将有效地提高查询性能。 Flink SQL CALL sys.query_service(database_name.table_name, parallelism);Flink Action …

✅技术社区—MySQL和ES的数据同步策略

使用Canal框架实现MySQL与Elasticsearch(ES)的数据同步确实可以提高实时搜索的准确性和效率。Canal通过模拟MySQL的binlog日志订阅和解析,实现了数据的实时同步。在这样的同步机制下,ES中的数据可以非常接近于MySQL数据库中的实时…

Spring状态机简单实现

一、什么是状态机 状态机,又称有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的计算模型。状态机的概念其实可以应用的各种领域,包括电子工程、语言学、哲学、生物学、数学和逻辑学等,例如日常生活中的电…

ChatGPT-Next-Web SSRF漏洞+XSS漏洞复现(CVE-2023-49785)

0x01 产品简介 ChatGPT-Next-Web 是一种基于 OpenAI 的 GPT-3.5 、GPT-4.0语言模型的产品。它是设计用于 Web 环境中的聊天机器人,旨在为用户提供自然语言交互和智能对话的能力。 0x02 漏洞概述 2024年3月,互联网上披露CVE-2023-49785 ChatGPT-Next-Web SSRF/XSS 漏洞,未经…

H.266参考软件VTM各版本的性能差异

VTM(VVC Test Model),是H.266视频编码标准的参考软件,即是VVC spec.的一种参考实现,代码里包括了H.266的软件编码器和软件解码器实现,代码地址如下: https://vcgit.hhi.fraunhofer.de/jvet/VVCS…

如何配置Apache的反向代理

目录 前言 一、反向代理的工作原理 二、Apache反向代理的配置 1. 安装Apache和相关模块 2. 配置反向代理规则 3. 重启Apache服务器 三、常见的使用案例 1. 负载均衡 2. 缓存 3. SSL加密 总结 前言 随着Web应用程序的不断发展和扩展,需要处理大量的请求和…

网络架构层_服务器上下行宽带

网络架构层_服务器上下行宽带 解释一 云服务器ECS网络带宽的概念、计费、安全及使用限制_云服务器 ECS(ECS)-阿里云帮助中心 网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量,带宽数值越大表示传输能力越强,即在单位…

概率论与数理统计(随机事件与概率)

1随机事件与概率 1.1随机事件及其运算规律 1.1.1运算 交换律结合律分配律德摩根律 1.2概率的定义及其确定方法 1.2.1概率的统计定义 频率 设在 n 次试验中,事件 A 发生了(A)次,则称为事件 A 发生的频率。 1.2.2概率的统计定义 在一组恒定不变的条…