跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > yolov5ds-断点训练、继续训练、先终止训练并调整最终epoch(yolov5同样适用)

yolov5ds-断点训练、继续训练、先终止训练并调整最终epoch(yolov5同样适用)

时间:2024-04-10 10:50:30 来源:网络cs 作者:胡椒 栏目:卖家故事 阅读:

标签: 训练  适用  同样  调整  终止  继续 
阅读本书更多章节>>>>

目录

参考链接1. 训练过程中中断了,继续训练如果觉得数值差不多稳定了,但是距离最终设置的epoch还很远,所以想要停止训练但是又得到yolov5在运行完指定最大epoch后生成的一系列map、混淆矩阵等图2. 训练完原有epoch,但还继续训练(与参考链接操作不同)

参考链接

🍀yolov5 继续训练🍅yolov5ds:Yolov5同时进行目标检测和分割分割(yolov5ds作者的博客介绍) github地址:👉yolov5ds训练yolov5ds案例:用YOLOv5ds训练自己的数据集——同时检测和分割

两种情况:

训练过程中中断了,继续训练训练完了,但是未收敛,在这个基础上,还想用这个权重、学习率等参数继续训练多一些批次

不再需要断点训练后,就一定要记得把以下修改全部都恢复成原状!!!


1. 训练过程中中断了,继续训练

断电、或者什么原因中断了,比如设定epoch为200,但是在90这里中断了,想从断点这里继续训练到 200个epoch

直接在trainds.py设置参数--resumedefualt=True即可(在代码 517行附近)

parser.add_argument('--resume', nargs='?', const=True, default=True, help='resume most recent training')

或者参考这个芒果大佬的方式:直接调用命令行开始resume,他还变了加载的权重(我没有变,但是也能行,保险起见还是参照大佬的方式吧,我是从这篇博文里面摘录过来的:手把手调参最新 YOLOv7 模型 训练部分 - 最新版本(二))

python train.py --resume D:\Pycharm_Projects\yolov7\runs\train\exp19\weights\last.pt

在这里插入图片描述


如果觉得数值差不多稳定了,但是距离最终设置的epoch还很远,所以想要停止训练但是又得到yolov5在运行完指定最大epoch后生成的一系列map、混淆矩阵等图

(虽然yolov5默认有早停机制,但是是要再多训练100轮如果结果还是没改善才会自动停止) 先终止训练找到run/train/exp(注意找对文件夹,exp是本轮训练时生成的文件夹)中的opt.yaml文件,修改其中的epochs为最近的一个比较大的数值,比如现在我训练到了169轮,我就先终止训练,然后将这个epochs改成了170,再将resume的default值改为True继续训练如上,直接在trainds.py设置参数--resumedefualt=True即可(在代码 517行附近)

2. 训练完原有epoch,但还继续训练(与参考链接操作不同)

训练完原有epoch后,但还继续训练,比如设置epoch为200,已经训练完了,但是没有收敛等原因想使用训练了200 epoch的权重继续训练100个epoch, 总共就是300个epoch

不是直接在train.py设置weight参数为训练好的权重(last.pt),然后设置epoch为100,这样不行,因为学习率等超参数启动时还是按照默认的。。。(自己把一些超参数设置好也可以,但感觉有点烦)在train.py代码里面设置就可以使用原有200 epoch的权重后继续训练到300epoch

❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

以训练了5个epoch后,想继续训练到15个epoch为例:

step1:
(同1.)先将--resumedefualt改为True,再将--epochs设为想要继续训练到的epochs,即defualt=300(在trainds.py代码的513行附近)

parser.add_argument('--epochs', type=int, default=15)

step2:

trainds.py文件中,按下Ctrl+F搜索Epochs定位到大概200行的位置,做以下两处修改:

添加一行代码:ckpt['epoch'] = 5修改代码:start_epoch = ckpt['epoch'](后面不加1)

注意:这两处修改是为了断点训练,如果不再需要断点训练,请将这两处修改都还原。

在这里插入图片描述

step3:

可以直接简化为下面的操作:

找到run/train/exp(注意找对文件夹,exp是本轮训练时生成的文件夹)中的opt.yaml文件,修改其中的epochs为你想要改为的最大的epoch值

#--------------------------------这个编辑代码的步骤可以省略了---------------------------------------------#

trainds.py文件中,按下Ctrl+F搜索replace定位到大概565行的位置,做以下两处修改:

如图添加一行代码:init_epochs = opt.epochs(记录最开始由epochs参数设定的数值15,因为replace这行代码,将epochs替换成了原始的epochs数值5)修改代码:如图进行添加,reinstate恢复成设定的epochs

在这里插入图片描述
#-----------------------------------------------------------------------------------------------------------------#


🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍🙋‍

做完以上3个修改,训练就会从第5个epoch的基础上进行继续训练到15个epoch,和直接设置epoch为15一样

老师让我测试了一下:这个继续训练对数据集发生变化的有效没有?
老师的解释:理论上应该是没有影响,虽然数据集变化,但训练只是沿用前面的权重表就可以,比如增加了训练数据应该没有问题

前5个epoch的数据集情况:总数为708张,按9:1划分得到 -> 训练集637张,验证集71张继续训练到15个epoch的新数据集情况:总数为100张,按9:1划分得到 -> 训练集90张,验证集10张

👉经测试,是有效的,能够继续训练且正确,可参看以下3张图片:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-10/156439.html,文章来源:网络cs,作者:胡椒,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论