YOLOv9继续训练主要分为两个情况:
其一、训练过程中意外中断,未完成训练预期的epoch数量;
其二、训练完了,但是未收敛,在这个基础上,还想用这个权重、学习率等参数继续训练多一些轮次
一、训练过程中意外中断
将train.py文件中的442行,即patser中第9个参数resume,将其设置为default=True即可
parser.add_argument('--resume', nargs='?', const=False, default=True, help='resume most recent training')
注意点:如果你想从上一次训练结果中回复训练,那么首先保证你的训练结果(一般都存放在/runs/train目录下)在保存目录中代号为最大的
断续前训练的设置参数、超参数和每轮训练效果在/runs/train/exp3下的opt.yaml、hyp.yaml、results.csv中有记录
设置好resume参数后,python train.py重新启动训练程序将从上次断续点处开始训练:
二、训练完后,继续增加轮次训练
训练完原有epoch后,但还继续训练,共分为3大步进行程序更改。此处以原本训练epoch为5,已经训练完了,但是没有收敛,继续增加5个epoch训练,总共训练10epoch为例子。
备注:不是直接在train.py设置weight参数为训练好的权重(last.pt),然后设置epoch为10,这样不行,因为学习率等超参数启动时还是按照默认的。
第一步:
将train.py文件中,patser中第5个参数从5改为10,第9个参数resume设置为default=True
原本训练完的参数设置图:
继续训练的参数设置图:
第二步:
对utils/torch_utils.py中大致458行smart_resume()函数进行更改:
添加一行代码:ckpt[‘epoch’] =5 #原本训练完的epoch
修改代码:start_epoch = ckpt[‘epoch’](后面不加1)
注意:这两处修改是为了断点训练,如果不再需要断点训练,请将这两处修改都还原。
第三步:
在trainds.py文件中,大概487行如图添加一行代码:
init_epochs = opt.epochs(记录最开始由epochs参数设定的数值10,因为replace这行代码,将epochs替换成了原始的epochs数值5)
修改代码:如图进行添加,reinstate恢复成设定的epochs,
opt.cfg, opt.weights, opt.resume,opt.epochs = '', str(last), True,init_epochs
完成以上3步,可以进行继续训练了,python trainds.py:
原本训练完的显示记录:
继续训练的显示记录: