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