yolov4训练中断,yolov3训练中途停止了怎么办
目标检测是计算机视觉中的一项重要任务。以下文章主要介绍Yolov5训练意外中断后如何继续训练的相关信息。通过示例代码非常详细的介绍,有需要的朋友可以参考一下。
00-1010 1.配置环境2。问题描述3。解决方案3.1设置需要持续训练的结果3.2设置训练代码4。原则5。结论。
目录
操作系统:Ubuntu20.04
CUDA版本:11.4
Pytorch版本:1.9.0
火炬视觉版本:0.7.0
IDE:PyCharm
硬件:RTX2070S*2
1.配置环境
在训练YOLOv5时,由于数据集较大,训练时间非常长。这段时间Python,主机等。可能会遇到崩溃。如果你需要训练300个epoch,但是训练了一个晚上,你会发现你停在了200epoch。幸运的是,博客们已经找到了在yolov5中继续训练的方法。
2.问题描述
首先,直接法
3.解决方法
如果你想从最后的训练结果中回复训练,那么首先要确保你的训练结果(通常存储在/runs/train目录中)在保存的目录中编码为最大。
如上图所示,train文件夹下有14个训练结果。假设我的第12次训练中断,想用第12次的结果继续训练,只需要删除或者移动两个大于12的文件夹:exp13和exp14到其他地方,这样就设置了需要继续训练的结果。
3.1设置需要接续训练的结果
参见代码yolov5中的train.py。
if __name__==__main__:
OS . environ[ KMP _重复_LIB_OK]=TRUE
parser=argparse。ArgumentParser()
parser.add_argument( - weights ,type=str,default=./weights/yolov5s.pt ,help=初始权重路径)
parser.add_argument( - cfg ,type=str,default=。/models/yolov5s.yaml ,help=model.yaml path )
parser.add_argument( - data ,type=str,default=data/car.yaml ,help=data.yaml path )
parser.add_argument( - hyp ,type=str,default=data/hyp.scratch.yaml ,help=超参数路径)
parser.add_argument( - epochs ,type=int,默认值=300)
parser . add _ argument(-batch-size ,type=int,default=32,help=所有GPU的总批处理大小)
parser.add_argument( - img-size ,nargs= ,type=int,default=[640,640],help=[train,test]image size )
parser.add_argument( - rect ,action=store_true ,help= rectangular training )
parser.add_argument( - resume ,nargs=?,const=True,default=False,help=恢复最近的训练)
parser.add_argument( - nosave ,action=store_true ,help=only save
final checkpoint)
parser.add_argument(--notest, action=store_true, help=only test final epoch)
parser.add_argument(--noautoanchor, action=store_true, help=disable autoanchor check)
parser.add_argument(--evolve, action=store_true, help=evolve hyperparameters)
parser.add_argument(--bucket, type=str, default=, help=gsutil bucket)
parser.add_argument(--cache-images, action=store_true, help=cache images for faster training)
parser.add_argument(--image-weights, action=store_true, help=use weighted image selection for training)
parser.add_argument(--device, default=1, help=cuda device, i.e. 0 or 0,1,2,3 or cpu)
parser.add_argument(--multi-scale, action=store_true, help=vary img-size +/- 50%%)
parser.add_argument(--single-cls, action=store_true, help=train multi-class data as single-class)
parser.add_argument(--adam, action=store_true, help=use torch.optim.Adam() optimizer)
parser.add_argument(--sync-bn, action=store_true, help=use SyncBatchNorm, only available in DDP mode)
parser.add_argument(--local_rank, type=int, default=-1, help=DDP parameter, do not modify)
parser.add_argument(--workers, type=int, default=8, help=maximum number of dataloader workers)
parser.add_argument(--project, default=runs/train, help=save to project/name)
parser.add_argument(--entity, default=None, help=W&B entity)
parser.add_argument(--name, default=exp, help=save to project/name)
parser.add_argument(--exist-ok, action=store_true, help=existing project/name ok, do not increment)
parser.add_argument(--quad, action=store_true, help=quad dataloader)
parser.add_argument(--linear-lr, action=store_true, help=linear LR)
parser.add_argument(--label-smoothing, type=float, default=0.0, help=Label smoothing epsilon)
parser.add_argument(--upload_dataset, action=store_true, help=Upload dataset as W&B artifact table)
parser.add_argument(--bbox_interval, type=int, default=-1, help=Set bounding-box image logging interval for W&B)
parser.add_argument(--save_period, type=int, default=-1, help=Log model after every "save_period" epoch)
parser.add_argument(--artifact_alias, type=str, default="latest", help=version of dataset artifact to be used)
opt = parser.parse_args()
注意上面patser中第9个参数resume,将其设置为default=True
即可,也就是那一行代码改变为
parser.add_argument(--resume, nargs=?, const=True, default=True, help=resume most recent training)
接下来运行python train.py边不会产生新的exp而是在最新的exp上接续训练
如下图所示:
博主运行完python train.py
后便是接着上一次训练完139个epoch继续训练
4.原理
其实接续训练不是什么深奥内容 ,博主在训练自己模型的时候也早会使用。
我们在使用yolov5提供的权重,也就是像yolov5s.pt之类的文件时就是使用了官方提供的模型接续训练的。
我们每次训练模型时都会生成新的模型结果,存放在/runs/train/expxxx/weights下,接续训练就是将上次训练一半得到的结果拿来和模型结合进行训练。具体来说:如果最终训练目标是300个epoch,上次训练完了139个epoch,那么就是将第139个epoch得到的权重载入到模型中再训练161个epoch便可等效为训练了300个epoch
5.结束语
到此这篇关于Yolov5训练意外中断后如何接续训练的文章就介绍到这了,更多相关Yolov5训练中断接续训练内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。