【YOLOv5】训练自己的数据集——学习过程记录

刚开始学习yolov5,根据一些博主的文章开始尝试的训练自己的数据集,将操作流程记录下来,以便后续回顾与改进,存在许多不足之后,后面有机会会继续完善。

目录

      • 一、准备自己的数据集
      • 二、模型训练
      • 三、模型测试
      • 四、 模型推理
      • 五、训练结果分析

一、准备自己的数据集

1、创建数据集
收集图片,创建自己的训练集,猫猫狗狗照片100张,放入animal_detection文件夹下的JPEGImages里面,使用labelImg工具对图片进行标记,标记后的txt文件save放入Annotations文件下。
【YOLOv5】训练自己的数据集——学习过程记录_第1张图片
2、转换数据格式
我用labelImg标记好的文件就是txt格式,不需要格式转换,文件夹创立与命名参考的博主的文章,其中是已经获得标注好的xml文件,需要将其转为txt文件,后续学习中才发现。

转换数据格式可以参考: https://blog.csdn.net/weixin_45941288/article/details/124286924

文件夹创建与命名

  • animal_detection
    • Annotations (存放标记好的xml或txt格式的标签)
    • JPEGImages(存放数据集原始图片)
    • images
      • train
      • test
      • val
    • labels
      • train
      • test
      • val

2、新建catdog.py(自己命名)将图片和对应标注数据按比例切分为训练集和测试集,存放在对应的文件夹下。

代码来自: https://blog.csdn.net/daybrek/article/details/126570287

【YOLOv5】训练自己的数据集——学习过程记录_第2张图片

补充说明训练集、验证集、测试集的关系
把数据集随机分为训练集,验证集和测试集,然后用训练集训练模型,用验证集验证模型,根据情况不断调整模型,选择出其中最好的模型,再用训练集和验证集数据训练出一个最终的模型,最后用测试集评估最终的模型。
训练集(Training Set):用于训练模型。
验证集(Validation Set):用于调整和选择模型。
测试集(Test Set):用于评估最终的模型。

概念解释来自:https://blog.csdn.net/jinchenpeng/article/details/115899837

3、修改.yaml配置文件
(1)修改数据集配置文件:在data下复制VOC.yaml,并粘贴重命名为animal_detection.yaml,打开进行修改。
①train和val:对应的训练和测试集的路径
②nc:类别数
③names:类别名

【YOLOv5】训练自己的数据集——学习过程记录_第3张图片
(2)修改模型配置文件:在models下找到yolov5s.yaml,将其复制一份,并重命名为animal_detection.yaml,然后打开它,把nc改成数据集类别数。

【YOLOv5】训练自己的数据集——学习过程记录_第4张图片
(3)其他修改
【YOLOv5】训练自己的数据集——学习过程记录_第5张图片

【YOLOv5】训练自己的数据集——学习过程记录_第6张图片

二、模型训练

修改train.py文件后运行
①weights: r'yolov5s.pt'
②cfg: r'models/animal_detection.yaml''
③data: r'data/animal_detection.yaml'
④epochs:训练次数:100
⑤batch-size:训练的批次:4
运行train.py文件开始训练
【YOLOv5】训练自己的数据集——学习过程记录_第7张图片
出现错误RuntimeError: CUDA out of memory. Tried to allocate 14.00 MiB (GPU 0; 2.00 GiB total capacity; 1.11 GiB already allocated; 3.76 MiB free; 1.18 GiB reserved in total by PyTorch)
显卡内存较小,只能设置为较小的数值,之后可以运行。

【YOLOv5】训练自己的数据集——学习过程记录_第8张图片
运行结果
【YOLOv5】训练自己的数据集——学习过程记录_第9张图片
对应runs\train\exp30文件夹下
【YOLOv5】训练自己的数据集——学习过程记录_第10张图片

三、模型测试

评估模型好坏就是在有标注的测试集或者验证集上进行模型效果的评估,在目标检测中最常使用的评估指标为mAP。在val.py文件中指定数据集配置文件和训练结果模型,运行进行测试
(1)weights:训练好的模型的权重r'runs\train\exp30\weights\best.pt'
(2)data:r'data/animal_detection.yaml'
测试某一张图片或某个文件夹里的图片命令:
python val.py --data data/animal_detection.yaml --weights runs\train\exp3\weights\best.pt --augment

【YOLOv5】训练自己的数据集——学习过程记录_第11张图片
测试结果
【YOLOv5】训练自己的数据集——学习过程记录_第12张图片

对应runs\val\exp文件夹下
【YOLOv5】训练自己的数据集——学习过程记录_第13张图片

四、 模型推理

模型推理和模型测试比较类似,主要区别是模型推理是对那些没有标注的数据集上进行推理,修改detect.py文件的要进行推理的图片和模型的路径
(1)weights:训练好的模型的权重r'runs\train\exp30\weights\best.pt'
(2)source:r'animal_detection\images\val'
(3)data:r'data/animal_detection.yaml'
推理某一张图片或某个文件夹里的图片命令:
python detect.py --weights runs\train\exp2\weights\best.pt --source animal_detection\images\test\0095.jpg

【YOLOv5】训练自己的数据集——学习过程记录_第14张图片
推理结果
【YOLOv5】训练自己的数据集——学习过程记录_第15张图片
对应runs\detect\exp13文件夹下

第一次测试发现识别结果很差劲,猫猫都识别成了狗,狗识别成了猫,后面检查发现是一开始打标签时候没细心,把类别标反了。后续改正后,更改不同的训练次数进行多重复训练了几次。
【YOLOv5】训练自己的数据集——学习过程记录_第16张图片

训练次数 结果
100(错误标签的情况) 猫识别为狗,狗识别为猫,但是置信度高
20 猫狗识别分类不会出现相反,但是会出现一物多框,且置信度低,还会出现一些图片识别不出来的情况
50 训练结果稍微好一些,置信度不高
100 训练结果更好一些,置信度也提高了
200 训练结果也更好了,但是出现置信度为1的情况,后续需要进行分析

五、训练结果分析

1、Confusion matrix(混淆矩阵)
混淆矩阵能对分类问题的预测结果进行总结,显示了分类模型的在进行预测时会对哪一部分产生混淆。
【YOLOv5】训练自己的数据集——学习过程记录_第17张图片
2、F1 curve
F1分数与置信度之间的关系。F1分数(F1-score)是分类问题的一个衡量指标,是精确率precision和召回率recall的调和平均数,最大为1,最小为0, 1是最好,0是最差。
【YOLOv5】训练自己的数据集——学习过程记录_第18张图片3、labels
左上是各个物体的数量直方图,右上是中心对齐后各个物体的bounding box,左下角是中心点统计,右下角是方框长、宽统计。
【YOLOv5】训练自己的数据集——学习过程记录_第19张图片
4、 results
【YOLOv5】训练自己的数据集——学习过程记录_第20张图片

本次学习过程还有许多存在问题,一开始学习难免会存在许多错误,后续会继续学习改进。

你可能感兴趣的:(YOLOv5,学习,深度学习,人工智能)