从零开始完成YOLOv5目标识别(六)用接续训练完成大规模数据集训练(以FLIR为例)

往期文章

从零开始完成YOLOv5目标识别(五)一种扩充数据集的方式从零开始完成Yolov5目标识别(四)封装一个跨设备的YOLOv5检测软件

从零开始完成YOLOv5目标识别(三)用PyQt5展示YOLOv5的识别结果

从零开始完成Yolov5目标识别(二)制作并训练自己的训练集
从零开始完成Yolov5目标识别(一)准备工作

目录

1. 接续训练

1.1 一种简单的接续训练方法

1.2 在原有exp中进行接续训练

2. 训练FLIR数据集

2.1 查看.pt文件内容

2.2 FLIR数据集的处理


1. 接续训练

在应付FLIR这种较大规模数据集的时候,把3080显卡内存拉到百分之八十模型的训练速度依然很慢(两分钟左右一轮),这意味着往往会出现第一天任务无法完成需要关闭电脑的情况。在第二天重新开始工作时就需要用到接续训练。

1.1 一种简单的接续训练方法

直接将上一次训练的.pt文件(best或者last都可以)移动到train.py文件配置的路径下,保证在./runs/train中上一次训练的expn的n为最大值,修改train.py中配置的权重文件名称,开始训练,训练的结果保存在新的exp中,且权重只有last.pt(这里原因未知)。

使用这种方法进行接续训练后的可视化曲线如上,可以看到明显的接续断点。

这种方法必须保证提取的best.pt或者last.pt来自最大的exp,否则报错:FileNotFoundError: [Errno 2] No such file or directory: 'opt.yaml'

1.2 在原有exp中进行接续训练

在训练结果expn中保存的opt.yaml记录了训练的原始信息:

其中记录了pt文件的原始配置信息,在进行接续训练时使用的是opt.yaml中的配置信息,而不是在train.py中修改的配置(这也是为什么训练的轮次能够接续且总轮次不变的原因)

将opt.yaml和要训练的pt移动到根目录下,重新配置train.py后开始训练,结果会保存在原有的exp中(包括last.pt和best.pt)

2. 训练FLIR数据集

原本的打算是将FLIR红外数据集的训练结果做迁移训练用以补充自己标定体量较小的VOC数据集,但FLIR数据集本身的训练结果并不特别好(过拟合情况下mAP_0.5:0.95只有0.44左右),同时展现出的图像红外特征与无人机的拍摄结果并不完全符合,故仅仅记录一下FLIR数据集的训练过程:

2.1 查看.pt文件内容

查看已经训练好的模型参数:

import torch

print(torch.load('./best.pt'))
input()

epoch:记录了当前训练轮次

best_fitness:最佳结果

主要的不同在卷积层中的参数

 Conv2d(输入通道数目,输出通道数目,卷积核大小,卷积每次滑动步长,增加的边距大小,是否将一个 学习到的 bias 增加输出中)

BatchNorm2d(输入BN层的通道数目,防止分母为零,预估方差的系数,是否给定可以学习的系数矩阵,是否跟踪当前batch的统计特性)

SiLU(激活函数)

2.2 FLIR数据集的处理

数据集文件夹目录可以参考第三篇文章:从零开始完成YOLOv5目标识别(三)用PyQt5展示YOLOv5的识别结果_WZT725的博客-CSDN博客用pyqt5实现yolov5图像、视频和摄像头的实时监测https://blog.csdn.net/WZT725/article/details/123573512?spm=1001.2014.3001.5502

不同的是要将jason文件转成txt,这里直接挂上txt格式的标签:

链接:https://pan.baidu.com/s/1182I03dteomqjOlstSA-hA 
提取码:1lg8 

要注意的还有虽然FLIR数据集提供了80个标签,但实际上只有三个标签:person,car,bicycle,在修改yaml时应当注意。

这是我第一次训练已经标定好的基础数据集。8000个样本训练速度远低于我自己标定的2000张VOC数据集,在150轮左右也会发生过拟合,结果并不如人意,在此基础上进行迁移训练也没有多大意义,所以只做了简单记录。

猜你喜欢

转载自blog.csdn.net/WZT725/article/details/123811600
今日推荐