【深度学习】Yolov5训练意外中断后如何接续训练详解;yolov5中断后继续训练

news2025/2/24 9:24:11

0. 前言

目标检测是计算机视觉上的一个重要任务,下面这篇文章主要给大家介绍了关于Yolov5训练意外中断后如何接续训练的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

1. 配置环境

操作系统:Ubuntu20.04

CUDA版本:11.4

Pytorch版本:1.9.0

TorchVision版本:0.7.0

IDE:PyCharm

硬件:RTX2070S*2

在这里插入图片描述

2. 问题描述

在训练YOLOv5时由于数据集很大导致训练时间十分漫长,这期间Python、主机等可能遇到死机,或者任务量繁重导致功耗过大主机自动重启的情况,如果需要训练300个epoch但是训练一晚后发现在200epoch时停下是十分崩溃了,好在博主摸索到在yolov5中接续训练的方法了。

3. 解决方法

3.1设置需要接续训练的结果

如果你想从上一次训练结果中回复训练,那么首先保证你的训练结果(一般都存放在/runs/train目录下)在保存目录中代号为最大的。
在这里插入图片描述
如上图所示,在train文件夹下一共有14个训练结果,假设我的第12次训练中断了,想接着第12次的结果继续训练,那么只需要将比12更大的:exp13、exp14这两个文件夹删除或者移动到其他地方,这样便设置好了需要接续训练的结果。

3.2设置训练代码

代码需要更改yolov5代码中的train.py中的参数设置

if __name__ == '__main__':
	os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
	parser = argparse.ArgumentParser()
	parser.add_argument('--weights', type=str, default='../weights/yolov5s.pt', help='initial weights path')
	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='hyperparameters path')
	parser.add_argument('--epochs', type=int, default=300)
	parser.add_argument('--batch-size', type=int, default=32, help='total batch size for all GPUs')
	parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
	parser.add_argument('--rect', action='store_true', help='rectangular training')
	parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
	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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel - 数据分析师所需的最常用公式。

“先打好基础,再细化细节——克里斯安德森” 这将是我正在撰写的关于必须具备数据分析技能的第 4 个也是最后一个“像你 5 岁一样解释”系列。(请观看其他的——Power BI、Python 和 SQL)。现在,我们将具备所需的所有基本技能,然后可以进入数据分析领域的下一阶段 使用 E…

Java实现大乐透不重复数字随机号码生成方案

大乐透攻略Java实现(仅供参考学习) 购票方式 每期最低购票数:7 张 最低消费:14 元 方案介绍:后区12个数中随机分成6组,且数字不重复。前区35个数随机分成7组,且数字不重复。前区需要7组才能够…

【目标检测】IoU、GIoU、DIoU、CIoU、EIoU 5大评价指标

目录 一、简介 二、IoU(Intersection over Union) 三、GIoU(Generalized IoU) 四、DIoU(Distance-IoU) 五、CIoU(Complete-IoU) 六、EIoU(Efficient-IoU) 七、pytorch代码实现 七、总结 一、简介 在目标检测…

即时通讯开发之如何测试实时语音通话质量

实时语音聊天开发,对于一般的开发者来说比较神秘,很多朋友不太清楚如何全面的评估一个音频引擎。很多朋友还停留在这样的初级阶段:把demo调通,找几个人喂喂喂......凭自己优异的听觉感受一下,整个测试过程就完成了。 但…

【嵌入式硬件芯片开发笔记】EEPROM芯片M24C32配置流程

【嵌入式硬件芯片开发笔记】EEPROM芯片M24C32配置流程 32-Kbit serial IC bus EEPROM - 105C operation 适用于M24C32/M24C32-DRE 读取存储的从机地址为:0x50 读取标识页面的从机地址为:0x58 WC引脚接地,存储可以进行写操作 地址长度为16位 存…

117. 填充每个节点的下一个右侧节点指针 II

文章目录1. 背2. 题目3. 答案1. 背 这道题本来可以很简答,一个队列,存储指针和它的行数就OK了,但是这道题的难点在于不用额外空间复杂度。 横向看一下,这一行是不是就是一个链表呢? 多加一个变量,用来存储第…

C++入门教程||C++ 判断||C++ 日期 时间

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 下面是大多数编程语言中典型的判断结构的一般形式: 判断语句 C 编程语言提…

three.js实战 -自定义剪切器

1. 前言 这是我在github上看到大佬的一个作品,当时感觉很有意思,决定分享出来,不知道取这个名字是否正确,废话不多说看下面效果。 2.demo效果 3.需要掌握的知识 矩阵的基本运算,能够认是到一些基本变换用到的矩阵(…

晶圆级倒装装备及控制系统

晶圆级倒装装备主要由晶圆盘进料模块、晶圆盘工作台模块、覆晶模块、焊头模块、基板工作台模块、点胶模块、视觉模块和基板进出料模块组成,如图 2-2 所示。 晶圆级倒装装备控制系统结构晶圆级倒装装备的运控系统主要由工控机、运动控制卡、驱动器、反馈装置和直线电…

QA:observable and Subject

概念区别和常见的错误理解辩证: 通俗理解一下 1. Observable 是一条 "水管蓝图" ,每次打开水龙头,水流会按照设计好的路线流向终点。起点和终点一一对应。每次打开水流,都是新的流,水流之间互不影响。一次一管。 2. …

VMWare虚拟机设置CentOS7共享文件夹

1. 目录 系统版本:CentOS 7.9 文章目录1. 目录2. VMWare:虚拟机设置,设置共享文件夹3. 虚拟机设置:手动挂载共享文件夹4. 检查是否挂载成功5. (可选)创建共享文件夹的软链接(快捷方式)6. (可选)定时任务开机自动挂载2. VMWare&am…

博客文章分类导引(持续更新)

摘要:本文提供一篇博客目录,有物联网、安卓编程、硬件设计等若干主题,这些主题一般都是成系统的,可以实现从零开始做出自己的物联网系统。 文章结构如下: 1.物联网专栏 使用arduino编写mqtt客户端连接emqx服务器 VSC…

vue.js:组件化的实现和使用过程

什么是组件化? 当我们遇到复杂问题的时候: 任何一个人处理信息的逻辑能力都是有限的所以,当我们面对一个复杂的问题的时候,我们不可能一次性搞定处理掉一大堆内容但是我们都会有问题拆解的能力将一个复杂的问题拆解成很多小的问…

Springcloud笔记之Ribbon

Ribbon:负载均衡(基于客户端)1. 负载均衡以及Ribbon1.1 Ribbon 的概念1.2 Ribbon 的作用2. 集成Ribbon3. 使用Ribbon实现负载均衡3.1 步骤3.2 自定义规则1. 负载均衡以及Ribbon 1.1 Ribbon 的概念 Spring Cloud Ribbon 是基于Netflix Ribbo…

[附源码]计算机毕业设计JAVA智能超市导购系统

[附源码]计算机毕业设计JAVA智能超市导购系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集的音频(onRecordAudioFrame)

上篇已经说道,通过注册回调,给上层APP抛音频裸数据: 《WebRTC Native M96 SDK接口封装–注册语音观测器对象获取原始音频数据registerAudioFrameObserver》[https://dabaojian.blog.csdn.net/article/details/128218542] 此篇,就详细讲述一下,如果实现onRecordAudioFrame…

vue学习笔记(二)-vue生命周期

概念 a.又名生命周期回调函数、生命周期函数、生命周期钩子b.是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数c.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的d.生命周期函数中的 this 指向是vm或组件实例对象 示例代码&am…

来一场关于元宇宙可持续的灵魂辩论|BOOK DAO 内容共建 第6期 招募

小杜《元宇宙创意图谱》是 BOOK DAO 的共建书籍项目,12.03我们举行了虚拟时尚主题的第5次公开共建活动。本周六晚8点,我们将举办第6期 元宇宙可持续 专题的共建活动。BOOK DAO 以搭建产业界与用户之间的交流平台、挖掘业界最值得深入探讨研究的话题为目标…

【linux】ssh免密登录

概要 服务器免密登录实际上是基于公钥的认证,比如希望A服务器可以免密访问B服务器,则需要进行如下步骤 A服务器生成密钥对将A服务器生成的公钥分发到B服务器(写入~/.ssh/authorized_keys)A服务器即可免密登录B服务器 生成密钥对…

特殊类的设计(单类模式)

一.不能拷贝的类 首先要知道拷贝的场景:拷贝构造函数以及赋值运算符重载,想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 方法1:将这两个函数只声明,不定义(防止编译器默…