基于 YOLOv9 的自定义数据集目标检测

点击下方卡片,关注“小白玩转Python”公众号

在本指南中,我们将展示使用自定义数据集训练 YOLOv9 模型的过程。具体而言,我们将提供一个示例,重点介绍训练一个视觉模型来识别篮球场上的篮球运动员。但是,这个指南是多功能的,允许您将其应用于您选择的任何数据集。

什么是 YOLOv9?


随着计算机视觉技术不断发展,YOLOv9 出现作为最新的进展,由 Chien-Yao Wang、I-Hau Yeh 和 Hong-Yuan Mark Liao 开发。这三位研究人员在该领域有着丰富的历史,曾为前几个模型的开发做出贡献,如 YOLOv4、YOLOR 和 YOLOv7。YOLOv9 不仅延续了前辈们的传统,还引入了重大创新,树立了目标检测能力的新标准。

YOLOv9 是一种先进的目标检测模型,代表了计算机视觉技术的重大进步。它是 “You Only Look Once” (YOLO) 系列中的最新版本,以其在图像中检测对象的高速度和准确性而闻名。YOLOv9 的独特之处在于它融合了可编程梯度信息(PGI)和引入了广义高效层聚合网络(GELAN)这两项开创性创新,旨在提高模型性能和效率。

准确性和性能

ffa2f1fad72c6693569d953253770dc5.jpeg

MSCOCO 数据集上实时目标检测器的比较

YOLOv9 模型有四个变体,根据参数计数进行分类:

4a13f25602629f0479830f40a1f9d68f.png

截至最新更新,YOLOv9-S 和 YOLOv9-M 模型的权重尚未公布。模型尺寸的差异满足了一系列应用需求,从边缘设备的轻量级模型到高性能计算环境中更全面的模型。

在性能方面,YOLOv9 在目标检测领域树立了新的标准。尽管尺寸最小的模型配置受限,但在 MS COCO 数据集的验证集上实现了令人印象深刻的 46.8% AP(平均精度)。同时,最大的模型变体 v9-E 具有惊人的 55.6% AP,确立了目标检测性能的新标杆。这一精度的飞跃展示了 YOLOv9 创新优化策略的有效性。

架构和创新

YOLOv9 架构通过融合可编程梯度信息(PGI)和一种称为广义高效层聚合网络(GELAN)的新网络架构,引入了目标检测领域的重大进步。以下是这些关键组件的解释:

可编程梯度信息(PGI)

PGI 是一个旨在解决深度神经网络中数据丢失挑战的新概念。在传统架构中,随着信息通过多个层,部分信息会丢失,导致学习和模型性能效率降低。PGI 允许在训练过程中更精确地控制梯度,确保关键信息得以保留并更有效地利用。这导致了更好的学习结果和模型精度。

c9547f1aca59dfd6c8e09c207bc0f3d9.jpeg

广义高效层聚合网络(GELAN)

GELAN 在 YOLOv9 架构中代表了一个重大创新。它旨在通过优化网络中不同层的信息聚合和处理方式来增强模型的性能和效率。GELAN 的关键重点是最大化参数利用率,确保模型可以在不增加计算资源或模型尺寸的情况下实现更高的准确性。

f19461029794451bc5ffb90799b592b1.jpeg

该架构使 YOLOv9 能够以更高的精度和效率处理目标检测任务,树立了计算机视觉深度学习模型性能的新标杆。在 YOLOv9 中结合 PGI 和 GELAN 代表了一种全面提升神经网络学习能力的方法,重点不仅在于模型的深度或宽度,还在于它在整个训练过程中如何有效地学习和保留信息。

这导致了一个不仅高度精确而且在计算资源方面高效的模型,使其适用于从边缘设备到基于云的系统的各种应用。

轻松在自定义数据集上训练

YOLOv9 Ikomia API 允许使用最少的编码训练和推断 YOLOv9 对象检测器。

设置

首先,重要的是要在虚拟环境中安装 API [3]。这种设置确保了平稳高效地开始使用 API 的功能。

pip install ikomia

数据集

对于本教程,我们使用了 Roboflow 的篮球数据集 [4],其中包含 539 张图像,用于说明我们自定义 YOLOv9 对象检测模型的训练。数据集包含九个标签:

  • 真实物体:球员、裁判、篮筐、球

  • 电视屏幕信息:球队名称、球队得分、剩余时间、周期、投篮时钟

这些标签涵盖了篮球比赛中篮球场上的有形物体和通常在电视屏幕上显示的数字信息,为篮球比赛中的对象检测提供了全面的方法。

4054e09d01f217e892b9e5b2f2e32a26.jpeg

代码详情

from ikomia.dataprocess.workflow import Workflow
import os#----------------------------- Step 1 -----------------------------------#
# Create a workflow which will take your dataset as input and
# train a YOLOv9 model on it
#------------------------------------------------------------------------#
wf = Workflow()#----------------------------- Step 2 -----------------------------------#
# First you need to convert the COCO format to IKOMIA format.
# Add an Ikomia dataset converter to your workflow.
#------------------------------------------------------------------------#dataset = wf.add_task(name="dataset_coco")dataset.set_parameters({"json_file":"Path/To/Dataset/train/_annotations.coco.json","image_folder":"Path/To/Dataset/train","task":"detection","output_folder":os.getcwd()+"/dataset"
})#----------------------------- Step 3 -----------------------------------#
# Then, you want to train a YOLOv9 model.
# Add YOLOv9 training algorithm to your workflow
#------------------------------------------------------------------------#train = wf.add_task(name="train_yolo_v9", auto_connect=True)
train.set_parameters({"model_name":"yolov9-c","epochs":"50","batch_size":"8","train_imgsz":"640","test_imgsz":"640","dataset_split_ratio":"0.8","output_folder":os.getcwd(),
}) #----------------------------- Step 4 -----------------------------------#
# Execute your workflow.
# It automatically runs all your tasks sequentially.
#------------------------------------------------------------------------#
wf.run()

以下是可配置参数:

  • model_name(str)-默认值 'yolov9-c':要训练的模型体系结构。应该是以下之一:    yolov9-s(即将推出)/yolov9-m(即将推出)/yolov9-c/yolov9-e 

  • train_imgsz(int)-默认值 '640':训练图像的大小。

  • test_imgsz(int)-默认值 '640':评估图像的大小。

  • epochs(int)-默认值 '50':对训练数据集的完整通过次数。

  • batch_size(int)-默认值 '8':在更新模型之前处理的样本数。

  • dataset_split_ratio(float)-默认值 '0.9':将数据集分割为训练和评估集的比率[0, 1]。

  • output_folder(str,可选):模型将保存的路径。

  • config_file(str,可选):超参数配置文件的路径.yaml。

  • dataset_folder(str,可选):重新格式化的数据集将保存的路径

  • model_weight_file(str,可选):预训练模型权重的路径。可以用来微调模型。

使用 NVIDIA L4 24GB GPU,50 个周期的训练过程大约需要 50 分钟完成。一旦您的模型完成了训练阶段,您可以通过分析 YOLOv9 训练过程生成的图表来评估其性能。这些可视化表示了各种关键指标,有助于理解您的对象检测模型的有效性。

26b4c000ad7551cf533b36ebb8f9dd7c.png

14c71c74ccf60dc7a4650b6fa87a558c.png

总之,这些图表表明随着训练的进行,模型学习和提高了检测和分类对象的能力。高精度以及不断增加的召回率和 mAP 值表明模型表现良好。但是,我们可以看到模型会受益于更长的训练时间。

微调 YOLOv9 模型

我们可以使用 “infer_yolo_v9” 算法测试我们的自定义模型。默认情况下,算法使用 COCO 预训练的 Yolov9-c 模型,但我们可以通过相应地指定 “model_weight_file” 和 “class_file” 参数来应用我们经过微调的模型。

from ikomia.dataprocess.workflow import Workflow
from ikomia.utils.displayIO import display# Create your workflow for YOLO inference
wf = Workflow()# Add the YOLOv9 algorithm to your workflow
yolov9 = wf.add_task(name="infer_yolo_v9", auto_connect=True)yolov9.set_parameters({"model_weight_file":"Path/To/[Timestramp]/weights/best.pt","class_file":"Path/To/[Timestramp]/classes.yaml","conf_thres":"0.3","iou_thres":"0.25"
})# Run on your image
wf.run_on(url="https://pbs.twimg.com/ext_tw_video_thumb/1660454979298115585/pu/img/A_Jrl2uawkkDi_Kf.jpg")
# wf.run_on(path=os.getcwd()+"/test/youtube-128_jpg.rf.2723e31eec77e1ff7b73c45c625082f6.jpg")# Get the object detection image output
img_bbox = yolov9.get_image_with_graphics()# Display
display(img_bbox)

355ac4f4ebecfb1d824acb790fd4d68b.jpeg

我们的模型成功识别了球员、裁判和篮筐、球队得分、周期和剩余时间。

·  END  ·

HAPPY LIFE

5b6bbfcd2e1739a5b498b4eee188b6b6.png

本文仅供学习交流使用,如有侵权请联系作者删除

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

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

相关文章

Web中使用Weblogic用户

WebLogic用户,组设置 1. 登录weblogic console, domain结构中选择Security Realms,显示安装时默认创建的Realm : myrealm 2. 点击myrealm, 选择 users and Group, 追加用户和组 选择既存的权限组追加到新规的组中,赋予…

java智慧校园系统源码saas电子班牌固件安卓7.1+Java Android原生系统源码

java智慧校园系统源码saas电子班牌固件安卓7.1+Java Android原生系统源码 智慧校园是促进信息技术与教育教学深度有效融合、提高学与教的效果为目的,以物联网、云计算、大数据分析等新技术为核心技术,提供一种环境全面感知、智慧型、数据化、…

Linux 删除文件或文件夹命令(新手)

一、删除文件夹 rm -rf 路径/目录名 1 强制删除文件夹及其子文件。 二、删除文件/文件夹:rm 命令 rm 删除命令,它可以永久删除文件系统中指定的文件或目录。 rm [选项] 文件或目录 选项: -f:强制删除(force&am…

前端大屏项目适配方法

要在F11全屏模式下查看 方法一,rem font-size 动态设置HTML根字体大小 和 body 字体大小(lib_flexible.js) 将设计稿的宽(1920)平均分成 24 等份, 每一份为 80px。HTML字体大小就设置为 80 px&#xff…

SonarQube 9.9.4 LTS社区版安装

目标 安装个SonarQube社区版. 安装SonarQube9.9.4 LTS社区版 https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.4.87374.zip # 切换到安装目录 cd /opt # 下载安装包 sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube…

C语言--结构体大小

基本数据类型占用的字节数分别为:char(1),short(2),int(4),long(4),long long(8),float(4),double(8)。 分析一下下面结构体占用的字节数。 struct A { int a; }; struct B { char a; int b; }; int main() { printf("sizeof(struct A)%d\n", sizeof(struct A));//测…

Nginx小册(博客笔记迁移)

nginx基础 1.常用命令 nginx -v #查看版本 ps -ef | grep nginx #输出linux进程、 nginx #启动nginx进程 nginx -s reload #重载配置 nginx -s stop # 停止进程 nginx -t # 检查是否有语法错误,以及配置文件地址2.nginx的配置文件 # 用户组的设置 windows上不生…

支持0V充电700MA线性锂电池充电芯片-YB4055SL

支持0V充电700MA线性锂电池充电芯片 描述: YB4055SL是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其SOT 封装与较少的外部元件数目使得YB4055SL成为便携式应用的理想选择YB4055SL可以适合 USB 电源和适配器电源工作。 由于采用了内部PMOSFET架构&am…

微信小程序 uniapp+vue.js医疗在线问诊挂号系统4oy17

预约挂号系统的逐渐发展,进一步方便了广大用户,使其可以更方便、快捷地预约挂号,并且也有效地防止号贩子“倒号”,使用户预约挂号更公平,然而现有预约挂号系统或多或少有所欠缺 小程序前端框架:uniapp 小程…

AndroidAutomotive模块介绍(三)CarService服务

前言 上一篇文档总结 Android Automotive 框架的 APP 和 API 部分内容,本篇文档将会继续根据 Android Automotive 框架结构,总结 Framework 层 CarService 服务的内容。 本文档对 Android Automotive Framework 层服务将会按照如下顺序展开描述&#x…

windows搭建ftp服务器

安装iis 点击安装即可,搜索iis打开 创建ftp服务器 身份验证:只勾选匿名,不勾选基本,网上的很多教程会添加基本,导致的问题会出现浏览提需要输入账号密码的情况,这里为了方便大家更直观的感受FTP建立的过程&#xff0…

物理服务器与云服务器的租用对比

​ 物理服务器:每个基于 Web 的应用程序都依赖于一个服务器,该服务器提供网络中的数据存储,并可根据请求提供给客户端。例如,用户使用浏览器访问 Web 应用程序。服务器可确保托管客户端可以使用该硬件组件。与其他托管可能性相比&…

MySQL数据库max_allowed_packet参数

如上图所示的报错,我在提交接口的时候出现了这个错误: MySqlConnector.MySqlException:Error submitting 4MB packet;ensure max_allowed_packet is greater than 4MB.在MySQL数据库中,有一个参数叫max_allowed_packet,这个参数会…

nacos服务器挂了之后springboot/springcloud服务会挂吗?不会挂(顺便深入源码分析nacos配置中心客户端核心功能实现)

文章目录 nacos挂了之后服务会挂吗?不会挂(深入源码分析)展开nacos客户端源码找本地缓存配置相关文件客户端内存缓存客户端健康状态获取配置的实现 nacos挂了之后服务会挂吗?不会挂(深入源码分析) 展开nac…

云HIS医院管理系统源码,SaaS模式+Java云HIS系统融合B/S版开箱即用

云HIS医院管理系统源码,SaaS模式Java云HIS系统融合B/S版开箱即用 一、云HIS系统简介 SaaS模式Java版云HIS系统,在公立二甲医院应用三年,经过多年持续优化和打磨,系统运行稳定、功能齐全,界面布局合理、操作简便。 云H…

软件供应链安全:寻找最薄弱的环节

在当今的数字时代,软件占据主导地位,成为全球组织业务和创新的支柱。它是差异化、项目效率、成本降低和竞争力背后的驱动力。软件决定了企业如何运营、管理与客户、员工和合作伙伴的关系,以及充分利用他们的数据。 挑战在于,当今…

Java技术学习|SpringBoot面试篇

学习材料声明 黑马程序员黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关 经过了基础知识后端开发前端开发,终于到了面试篇。 前置知识 1.ApplicationContextInitializer 首先,SpringBoot…

CentOS7 boa服务器的搭建和配置

环境是CentOS7,但方法不局限于此版系统,应该是通用的。 具体步骤如下: 1. 下载boa源码 下载地址: Boa Webserver 下载后,进入压缩包所在目录,进行解压: tar xzf boa-0.94.13.tar.gz 2. 安装需要的工具b…

Nginx转发请求错误

说明:记录一次使用Nginx转发请求的错误; 场景 公司内部有两台服务器都跑了后端项目,在使用Nginx做请求分发时,我发现其中有台服务器一直没有处理请求(没打印相关的日志信息),于是我修改了下Ng…

僵尸进程和孤儿进程

目录 引言僵尸进程僵尸进程的状态僵尸进程周边知识 孤儿进程孤儿进程的状态 进程中的其他状态①.R---表示进程运行状态。②.S---表示进程的休眠状态。(进程什么都没做)③T 和 t 进程的运行、阻塞和挂起运行阻塞挂起状态: 引言 今天我们来将僵尸进程和孤儿进程以及其…