本文章介绍两个主流yolo版本的训练过程,其余版本大多与二者之一类似,如使用其他版本,本文章也可做以参考
PS:为保证大家有足够的收获,本教程并未详细指出训练过程中易犯错的地方,鼓励大家在遇到问题时自行查阅资料解决,或联系作者解决
1 yolov5训练
1.1 标注
查看数据标注文档
1.2 数据集结构整理
①在项目根目录下,进入”data“文件夹,创建一个文件夹用于存储数据(下以”mydata“为这个文件夹的名字举例)
②在mydata文件夹下,创建以下两个文件夹:”Annotations“、”images“
最终,文件结构应当如下所示
1 | yolov5 |
1.3 数据集划分
利用现有脚本split_train_val.py,将数据集划分为训练接、验证集、测试集(比例可调整)
脚本链接:数据集划分脚本
(脚本有成的,保存在mydata路径下即可使用,但建议阅读代码,逐行理解,之后需要更改)
该脚本无参数,直接运行即可
运行脚本完毕后,会生成 ImagesSets\Main 文件夹,且在其下生成 测试集、训练集、验证集,存放图片的名字(无后缀.jpg)
1.4 整理数据路径
运行脚本write_img_path.py,将训练接、验证集、测试集的数据路径整合为三个文本文件
脚本链接:整理数据路径
❗️需要保存在mydata路径下并将代码64行按照原格式,修改为你电脑中的对应路径
运行脚本完毕后,会生成dataSet_path文件夹,里面存储这三个txt文件,分别为三部分数据集的路径整合文件
1.5 数据格式转换
这里同样通过脚本实现json_to_yolo.py,目的是将现有标注格式转换为yolov5可读取的格式(txt)
脚本链接:数据格式转换
❗️需要保存在mydata路径下并将代码55行按照原格式,修改为你的模型所要检测的类别
运行脚本完毕后,会生成labels文件夹,里面存储着转换好的标注文件
至此,完成上述所有工作后,我们应当得到一个结构如下的数据集:
(这里数据集名为”data_show“,其实就是上面我们说的”mydata“)

1.6 数据集配置文件
在”data“文件夹下创建一个.yaml类型的文件(下面以”mydata.yaml”为例)
文件内容按照如下格式撰写
1 | train: path_to_mydata/dataSet_path/train.txt //修改1:改为训练集整合文件的路径 |
1.7 修改训练配置文件
需要修改网络加载数据的路径,修改内容如下:
在utils/dataloaders.py路径下,修改如下代码的内容
(小技巧:在文件里搜”sb“可以直接查到这一行)
1 | sa, sb = 'path_to_mydata/images/', 'path_to_mydata/data_show/labels/' # /images/, /labels/ substrings |
需要把后面的两个路径分别更新为你配置好的数据集中的”images“和”labels“的路径
1.8 开始训练
运行train.py就可以了,怎么运行?
在train.py中有如下部分:
1 | parser = argparse.ArgumentParser() |
这些运行train.py时的所有参数
直接python train.py固然可以按照参数的默认值运行训练程序,但为了训练我们自己的数据集,这里我们需要修改一些参数
至于这些参数是什么,需要大家阅读上面这一部分的参数设置代码,自行判断
2 yolov10模型训练指导文档
2.1 标注
查看数据标注文档
2.2 数据集结构整理
①在项目根目录下,创建一个“DateSet”文件夹并进入,创建一个文件夹用于存储数据(下以”mydata“为这个文件夹的名字举例)
②在mydata文件夹下,创建以下两个文件夹:”Annotations“、”images“
最终,文件结构应当如下所示
1 | yolov10 |
2.3 数据集划分
利用现有脚本split_train_val.py,将数据集划分为训练接、验证集、测试集(比例可调整)
脚本链接:数据集划分脚本
(脚本有成的,保存在mydata路径下即可使用,但建议阅读代码,逐行理解,之后需要更改)
该脚本无参数,直接运行即可
运行脚本完毕后,会生成 ImagesSets\Main 文件夹,且在其下生成 测试集、训练集、验证集,存放图片的名字(无后缀.jpg)
2.4 整理数据路径
运行脚本write_img_path.py,将训练接、验证集、测试集的数据路径整合为三个文本文件
脚本链接:整理数据路径
❗️需要保存在mydata路径下并将代码64行按照原格式,修改为你电脑中的对应路径
运行脚本完毕后,会生成dataSet_path文件夹,里面存储这三个txt文件,分别为三部分数据集的路径整合文件
2.5 数据格式转换
这里同样通过脚本实现json_to_yolo.py,目的是将现有标注格式转换为yolov5可读取的格式(txt)
脚本链接:数据格式转换
❗️需要保存在mydata路径下并将代码55行按照原格式,修改为你的模型所要检测的类别
运行脚本完毕后,会生成labels文件夹,里面存储着转换好的标注文件
至此,完成上述所有工作后,我们应当得到一个结构如下的数据集:
(这里数据集名为”data_show“,其实就是上面我们说的”mydata“)

2.6 数据集配置文件
在”data“文件夹下创建一个.yaml类型的文件(下面以”mydata.yaml”为例)
文件内容按照如下格式撰写
1 | train: path_to_mydata/dataSet_path/train.txt //修改1:改为训练集整合文件的路径 |
2.7 开始训练
这里需要自行撰写一个简单的训练脚本
1 | from ultralytics import YOLOv10 |
这里的model = YOLOv10('yolov10n.yaml').load('yolov10n.pt')是指定预训练模型的语句,可以根据实际情况修改
除此之外,需要修改的还有model.train()方法的参数:
- data:数据配置文件的路径
- epochs:训练轮次
- imgsz:图像尺寸
- batch:训练的batch-size
- optimizer:
- SGD: 随机梯度下降法
- Adagrad: 自适应学习率梯度下降法
- RMSprop: Adagrad的改进
- Adadelta: Adagrad的改进
- Adam: RMSprop结合Momentum
- Adamax: Adam增加学习率上限
- SparseAdam: 稀疏版的Adam
- ASGD: 随机平均梯度下降
- Rprop: 弹性反向传播
- LBFGS: BFGS的改进
- lr:学习率
- device:训练所用显卡编号,若为cpu则参数应当为”cpu”