参考:Yolov5自定义图片训练测试及模型调优(详细过程)_HowieXue的博客-CSDN博客_yolov5调优
原代码推理:
训练自己的数据集:
1.准备数据集
首先划分测试数据集,将自定义测试的图像数据和标签数据集分别 划分为:训练集、验证集、测试集,照Yolov5原生格式,新建一个datasets目录,并创建images,labels两个子目录,分别存放待训练的图像以及标注后的label数据:;
将相应测试数据集分别放入相应文件夹中(文件名要一一对应),如下图:
2.修改data/训练配置xxx.yaml文件
下面需要修改Yolov5的训练配置参数,既自定义制作自己使用的训练.yaml配置文件:
为了方便修改,我们可以copy一份原有的data/coco128.yaml, 重命名一下,并修改其中的参数为自定义训练的参数:
先看下coco128.yaml,可以看到原有coco训练集的类别数量是80个,标签(模型能识别的类别名)分别是下面的name 根据具体需要修改,我这里测试所用的修改为:
修改path/train/val/test的目录路径为自定义数据集路径 将nc(number of classes)改为 2 修改Names为自己数据的类别名 注释掉Download train.py在训练过程中,会将路径中的images替换为 labels来寻找labels数据 修改后的yaml:
根据需要选择其中的模型yaml进行修改,在models文件夹中,本次使用的是yolov5s.yaml(权重也要对应选择yolov5s.pt),改发:
nc 修改为2
-
针对Anchors ,如果自己提前聚类过,可以同步把计算后anchors修改下,如果没有可以不修改
训练:
python train.py --cfg models/yolov5s.yaml --data data.yaml --weights yolov5s.pt --epoch 100 --batch-size 8
报错:
肯定是包的问题,我的是wandb这个包安装错了路径,卸载后用pip重装即可。
再有路径问题就把ROOT都删掉
训练完了
训练完后,通过最后log可以看到训练好的模型的权重保存在了runs/train/exp17/weights/last.pt和best.pt
其中还包括了PR Curve 曲线、Confusion matric (混淆矩阵)、results.png/txt 等训练过程数据
train.py相关参数解析:
-
weights:权重文件路径,如果是’'则重头训练参数,如果不为空则做迁移学习,权重文件的模型需与cfg参数中的模型对应
-
epochs:指的就是训练过程中整个数据集将被迭代多少次
-
batch-size:每次梯度更新的批量数,指一次看完多少张图片才进行权重更新
-
config-thres: 模型目标检测的置信度阈值
-
cfg:存储模型结构的配置文件
-
data:存储训练、测试数据的文件
-
img-size:输入图片的宽高
-
rect:进行矩形训练
-
resume:恢复最近保存的模型开始训练
-
nosave:仅保存最终checkpoint
-
notest:仅测试最后的epoch
-
evolve:进化超参数
-
cache-images:缓存图像以加快训练速度
-
name: 重命名results.txt to results_name.txt
-
device:cuda device, i.e. 0 or 0,1,2,3 or cpu
-
adam:使用adam优化
-
multi-scale:多尺度训练,img-size +/- 50%
-
single-cls:单类别的训练集
使用yolov5s.pt训练后的结果:
使用yolov3-tiny.pt训练后的结果: