【yolov5 v6.0】中断以后重新训练,增加epochs,冻结层

文章讨论了如何在训练中断后使用resume参数继续训练,注意不要手动复制权重文件以免路径混乱。增加epochs以追求模型收敛,但需留意重新训练可能导致loss突然增加。使用tensorboard监控训练过程,并提到通过冻结模型部分层来进行微调的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中断以后重新训练

有个resume的参数,将default从False改成True,然后他就会自己去找最新的权重继续训练了。
然后有个需要注意的点就是,不要为了想要备份最新的权重,然后把它复制一份出来,这样子,好像会造成路径的错乱,然后报错了很久哈哈哈(最后把复制出来的weights的文件夹删掉才好的)

增加训练的epochs

就是训练完了以后发现还没有收敛,想要继续增加epochs。我做的改动

  1. 修改resume参数
  2. 把epochs的参数修改成你需要的次数
  3. 在train文件夹里面加入语句,ckpt[‘epoch’] = 上一次训练的最后一个的次数
    在这里插入图片描述
    如果没有改的话可能会报错,大概的意思是说已经训练完了,不需要再继续训练了。
  4. 我还改了/runs/exp3中的opt.yaml文件中的epochs的个数,修改成了300,但是不知道这个有没有用处

训练的结果

tensorboard的使用

  1. 先在对应的环境下安装这个库
  2. 然后输入tensorboard --logdir=【event文件所在的文件夹路径】
  3. 然后在对应的端口打开
    在这里插入图片描述
  4. 如果打开网页以后没有响应,或者找不到网页的话,那么就需要在xshell中把对应的端口弄到本地服务器上面。
    在这里插入图片描述
  5. 然后再打开就好了
    在这里插入图片描述
  6. 最后我的训练结果如上,虽然loss会突然增加,但是最后的趋势好像也和之前是一致的,初步判断,这样子增加训练的epochs是可行的。【其实是不可行的(这种操作不可行是从ultralytics的issue中看见的),从图像中可以看见,重新训练以后,他的loss会突然增加,导致曲线有很大的变化,是因为之前训练过程中的一些学习率和设定都已经重新初始化了,虽然后续还是能够继续下降,但是和使用最后这个权重再进行微调是差不多的结果了【个人感觉】】
  7. 所以,如果不确定该训练几个epoch的时候,最好的情况就是尽可能的多设置一些,然后看着tensorboard进行分析,如果觉得够了,直接中断就行,虽然会缺少最后的val的部分结果,但是可以直接使用最好的结果/或者最后的权重,在val.py中获取得到对应的val结果。

冻结层

主要是对应一个freeze参数,这个参数默认是0,也就是不冻结的意思
在这里插入图片描述
在这里插入图片描述
对应的freeze的层数的代码主要是上面那样子的
freeze是一个列表,如果列表的长度大于1的话,那么freeze就是对应列表里面的数字的层数
例如输入的freeze为[0,9],那么对应的freeze=['model.0,model.9] 两层
如果输入的列表里面只有一个数字的话,那么对应的就是range(freeze[0])的层,如果输入的是10的话,那么对应的就是前10层['model.0, …, model.9] ,如果是默认输入的0的话,对应的freeze=[],没有需要冻结的层

那么对应的,可以考虑先冻结一部分层,再在这个基础上对后面的层进行修改的话,应该可以结合上面说到的几种方法进行测试?

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值