当前位置: 首页 > news >正文

yolov9从头开始训练

yolov9从头开始训练

一、准备数据集

数据集相关文件存放布局如下

yolov9-datasets
├── train
│ ├── images
│ │ ├── image.jpg
│ │ ├── ······
│ └── labels
│ ├── image.txt
│ ├── ······
├── valid
│ ├── images
│ │ ├── image.jpg
│ │ ├── ······
│ └── labels
│ ├── image.txt
│ ├── ······
└── test
├── images
│ ├── image.jpg
│ ├── ······
└── labels
├── image.txt
├── ······

我们通常将数据集划分为训练集(train set)、验证集(validation set)和测试集(test set),如上图所示,但不一定三个集合都需要准备,根据你得需求来。

训练集

用于训练模型的数据集。模型通过训练集中的样本进行学习和参数调整,以优化其性能,训练集是必需的。

验证集

用于选择模型的超参数和进行模型选择的数据集。超参数是指在训练过程中无法从数据中学习的参数,例如学习率、正则化项的权重等,通过在验证集上评估不同超参数设置和模型架构的性能,可以选择表现最好的模型并进行模型选择。

因此,如果你是做实际应用,那么这个集合也必须加上,否则会造成过拟合。

测试集

用于最终评估模型性能的数据集。测试集是模型最后才能接触到的数据,用于模拟模型在实际应用中的性能。

在模型选择和超参数调优完成后,使用测试集对模型进行最终评估,以了解模型的泛化能力和性能。这个集合并不是必须的,它只是最终评估模型的泛化性能用,并不像前两个数据集合那样会对训练过程产生影响。

所以,如果不需要将泛化性能以具体数据显现出来,那么这部分可以删除。

二、环境准备

项目地址:WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (github.com)

首先将yolov9的整个项目文件夹下载下来,放在你喜欢的地方,然后使用命令行进入项目的目录内,接着进行下面的步骤:

(1)虚拟环境

使用依次下列命令创建一个虚拟环境并激活,请确保你的系统已安装好anaconda,可以使用conda命令

conda create -n yolov9 python=3.11 -y
conda activate yolov9
(2)GPU环境

首先使用【nvidia-smi】命令查看GPU的CUDA版本,如下图所示

在这里插入图片描述
Pytorch官网:Start Locally | PyTorch

打开pytorch官网,找到pytorch安装命令,其中CUDA版本(一般)来说需要小于等于上图中显示的版本,二般情况我不管,如下图所示:

在这里插入图片描述

安装完成后,检验环境是否可用,依次运行以下命令

python
import torch
torch.cuda.is_available()

如果命令行返回了True则表示可用,否则不可用,不可用则换pytorch版本,现在我默认可用了,如下所示,返回了True:

(yolov9) root@7l13t4gko7nqs-0:/17106# python
Python 3.11.8 (main, Feb 26 2024, 21:39:34) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True
(3)项目环境

进入yolov9主目录后,运行以下代码,完成最后一个环境的安装:

pip install -r requirements.txt

三、配置参数文件

(1)数据集配置文件

首先在【yolov9-main/data】目录下,创建一个后缀名为yaml的文件,文件名取决于你,比如我使用的是YOLOv9-GELAN模型,因此我取名为【YOLOv9-GELAN.yaml】。

该文件内容如下,第1,2,3行分别是训练集,验证集和测试集的图片所在文件夹的路径,names下面是类别索引和类别名的映射。需要注意的是此处类别和序号的对应要与你标注数据集时,类别的顺序一致,否则将引发错误。

train: /17106/Pengcaiping/datasets/recombination/train/images
val: /17106/Pengcaiping/datasets/recombination/valid/images
#test:
names:
0: paper
1: plastic
2: metal
3: clothing
4: other

(2)参数配置文件

首先在【yolov9-main/models/detect】目录下(假设你也是做目标检测),打开【gelan.yaml】进行编辑,该文件内容如下:

# YOLOv9# parameters
nc: 5  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
#activation: nn.LeakyReLU(0.1)
#activation: nn.ReLU()# anchors
anchors: 3# gelan backbone
backbone:
省略一千字

仅修改类别数量,即【nc】后面的数字,改成你的类别数量,比如我有5个类别,所以填了5。

(3)训练文件修改

打开主目录下【train.py】文件,调到下图所示位置,然后进行参数修改:

在这里插入图片描述

①填我们之前配置好的参数文件的路径

②填我们之前配置好的数据集配置文件的路径

③由于yolov9刚发布这里需要修改为【data/hyps/hyp.scratch-high.yaml】才能运行,否则会报错,如果后续修复了,读者可提醒我修改此处。

④训练轮次,根据你的硬件性能,数据集大小等来决定要设置为多少,一般来说不要太多,因为太多可能会过拟合。

⑤batch-size是一次同时处理的样本数量,如果你GPU性能可以上天,显存可以下地那么可以调大一下,目前我设置为64,输入单样本大小为 480 × 640 480\times640 480×640,消耗显存45G;如果显存小就调小点。

四、训练

在配置好的环境中,运行以下代码开始从0训练

python train.py

五、最后的一点话

本数量,如果你GPU性能可以上天,显存可以下地那么可以调大一下,目前我设置为64,输入单样本大小为 480 × 640 480\times640 480×640,消耗显存45G;如果显存小就调小点。

四、训练

在配置好的环境中,运行以下代码开始从0训练

python train.py

五、最后的一点话

时过境迁,当读者你看到此教程时,可能距离作者收笔此文相去已久,若未能解决你的问题,作者深感抱歉。若读者发现某些地方已经不再适合当下,可以私聊或者评论区告知,我会及时进行修改!

相关文章:

  • STM32------分析GPIO寄存器
  • mysql timestamp转换为datetime
  • 课时51:表达式_表达式进阶_综合实践
  • 【Linux深入剖析】进程控制 | 进程程序替换--长篇深层次讨论
  • 机器学习笔记 YOLOv9模型相关论文简读
  • 1. 开发环境搭建
  • 瑞_Redis_Redis命令
  • x-pack的破解方式和免费jar包!!可直接用!!
  • 2024年四川媒体新闻发布渠道,媒体邀约资源表
  • 嵌入式驱动学习第一周——git的使用
  • MariaDB MaxScale实现mysql8读写分离
  • Mysql 的高可用详解
  • day10_日志模块AOP
  • JavaWeb HTTP 请求头、请求体、响应头、响应体、响应状态码
  • 升级 Vue版本从 2.5.x 到 2.6.x
  • ➹使用webpack配置多页面应用(MPA)
  • Akka系列(七):Actor持久化之Akka persistence
  • Bootstrap JS插件Alert源码分析
  • GitUp, 你不可错过的秀外慧中的git工具
  • interface和setter,getter
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript异步流程控制的前世今生
  • KMP算法及优化
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PaddlePaddle-GitHub的正确打开姿势
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Redis 中的布隆过滤器
  • SpringCloud集成分布式事务LCN (一)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 利用DataURL技术在网页上显示图片
  • 使用SAX解析XML
  • 我与Jetbrains的这些年
  • 线上 python http server profile 实践
  •  一套莫尔斯电报听写、翻译系统
  • Android开发者必备:推荐一款助力开发的开源APP
  • zabbix3.2监控linux磁盘IO
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #NOIP 2014#Day.2 T3 解方程
  • $.proxy和$.extend
  • (day6) 319. 灯泡开关
  • (libusb) usb口自动刷新
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (数据结构)顺序表的定义
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .Net MVC + EF搭建学生管理系统
  • .net Stream篇(六)
  • .net 无限分类