Yolov8如何在训练意外中断后接续训练

这篇具有很好参考价值的文章主要介绍了Yolov8如何在训练意外中断后接续训练。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 2023年11月更新

请使用第四节的新方法,不需要修改代码,更加简单。

1.错误尝试

在训练YOLOv8的时候,因为开太多其他程序,导致在100多次的时候崩溃,查询网上相关知识如何接着训练,在yolo5中把resume改成True就可以。
在yolov8中也这样尝试,将ultralytics/yolo/cfg/default.yaml中的resume改成True发现并没有作用,感觉yolov8代码还是有很多bug

2.成功的方法

2.1 ultralytics/yolo/engine/model.py

打开ultralytics/yolo/engine/model.py代码,找到train方法,如下
将self.trainer.model = self.model注释掉

    def train(self, **kwargs):
        """
        Trains the model on a given dataset.

        Args:
            **kwargs (Any): Any number of arguments representing the training configuration.
        """
        overrides = self.overrides.copy()
        overrides.update(kwargs)
        if kwargs.get("cfg"):
            LOGGER.info(f"cfg file passed. Overriding default params with {kwargs['cfg']}.")
            overrides = yaml_load(check_yaml(kwargs["cfg"]), append_filename=False)
        overrides["task"] = self.task
        overrides["mode"] = "train"
        if not overrides.get("data"):
            raise AttributeError("Dataset required but missing, i.e. pass 'data=coco128.yaml'")
        if overrides.get("resume"):
            overrides["resume"] = self.ckpt_path

        self.trainer = self.TrainerClass(overrides=overrides)
        # if not overrides.get("resume"):  # manually set model only if not resuming
        #     self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
        #     self.model = self.trainer.model
        #下面一行代码在正常情况下需要开启
        # self.trainer.model = self.model
        self.trainer.train()
        # update model and cfg after training
        if RANK in {0, -1}:
            self.model, _ = attempt_load_one_weight(str(self.trainer.best))
            self.overrides = self.model.args

2.2 ultralytics/yolo/engine/trainer.py

找到check_resume和resume_training方法
在check_resume方法里面将resume=中断地方的last.pt
在resume_training里面将ckpt=中断地方的last.pt

def check_resume(self):
        # resume = self.args.resume
        resume = 'runs/detect/train49/weights/last.pt';
        if resume:
            try:
                last = Path(
                    check_file(resume) if isinstance(resume, (str,
                                                              Path)) and Path(resume).exists() else get_latest_run())
                self.args = get_cfg(attempt_load_weights(last).args)
                self.args.model, resume = str(last), True  # reinstate
            except Exception as e:
                raise FileNotFoundError("Resume checkpoint not found. Please pass a valid checkpoint to resume from, "
                                        "i.e. 'yolo train resume model=path/to/last.pt'") from e
        self.resume = resume

    def resume_training(self, ckpt):
        ckpt = torch.load('runs/detect/train49/weights/last.pt')
        if ckpt is None:
            return
        best_fitness = 0.0
        start_epoch = ckpt['epoch'] + 1
        if ckpt['optimizer'] is not None:
            self.optimizer.load_state_dict(ckpt['optimizer'])  # optimizer
            best_fitness = ckpt['best_fitness']
        if self.ema and ckpt.get('ema'):
            self.ema.ema.load_state_dict(ckpt['ema'].float().state_dict())  # EMA
            self.ema.updates = ckpt['updates']
        if self.resume:
            assert start_epoch > 0, \
                f'{self.args.model} training to {self.epochs} epochs is finished, nothing to resume.\n' \
                f"Start a new training without --resume, i.e. 'yolo task=... mode=train model={self.args.model}'"
            LOGGER.info(
                f'Resuming training from {self.args.model} from epoch {start_epoch + 1} to {self.epochs} total epochs')
        if self.epochs < start_epoch:
            LOGGER.info(
                f"{self.model} has been trained for {ckpt['epoch']} epochs. Fine-tuning for {self.epochs} more epochs.")
            self.epochs += ckpt['epoch']  # finetune additional epochs
        self.best_fitness = best_fitness
        self.start_epoch = start_epoch

3.运行代码

没有在中断的train49训练,新开了一个文件夹,但是实现了功能
Yolov8如何在训练意外中断后接续训练

重要提示

训练完成后请把所有代码复原!!!
训练完成后请把所有代码复原!!!
训练完成后请把所有代码复原!!!

4. 评论区方法

官方给的代码,使用的比较新的代码,老代码没有尝试过,现在很多东西都可以在官网找到解决办法!
使用python代码如下

from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)

使用命令行代码如下:

# Resume an interrupted training
yolo train resume model=path/to/last.pt

测试如下图,直接就在原文件夹接着训练:
Yolov8如何在训练意外中断后接续训练文章来源地址https://www.toymoban.com/news/detail-467868.html

到了这里,关于Yolov8如何在训练意外中断后接续训练的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv8:官方项目训练

    1. 基础解读         detect/train.py中有DetectionTrainer类,继承自BaseTrainer类,并实现了诸如get_dataloader, get_model等接口。         setup_model接口用于准备模型,首先会检查self.model是否是torch.nn.Module,即已经是导入的模型。如果不是,检查当前从配置文件导入的模型是pt模型还

    2024年02月09日
    浏览(26)
  • yolov8训练心得 持续更新

    目录 yolov8的改进点: 优化器 lion优化器,学习率0.0001,训练效果: 学习率衰减

    2024年02月15日
    浏览(30)
  • 【目标检测算法实现之yolov8】yolov8训练并测试VisDrone数据集

    在这之前,需要先准备主机的环境,环境如下: Ubuntu18.04 cuda11.3 pytorch:1.11.0 torchvision:0.12.0 在服务器上执行以下命令, pytorch v1.11.0(torch1.11.0+cu1113 ,torchvision0.12.0+cu113) 先创建yolov8文件夹,存放等会要下载的yolov8代码 mkdir yolov8 进入yolov8文件夹, cd yolov8 下载yolov8代码 git cl

    2024年02月13日
    浏览(35)
  • yolov8训练环境安装一些坑

    安装环境 不能使用conda安装pytorch,如果使用安装的conda可以让torch.cuda.is_available()为true,但是Ultralytics YOLOv8 还是显示无法使用GPU! 在虚拟环境安装yolov8,并激活 安装requirements.txt里面的包,但是注释掉torch,因为默认安装的为cpu版本 创建requirements.txt并安装 到pytorch官网使用pi

    2024年02月14日
    浏览(30)
  • 超详细yolov8训练数据集流程

    目录 一,构建数据集 1,任意位置新建如下文件夹 2,xml转txt 3,划分数据集 二、配置yolov8训练文件 1,car文件夹下创建mydata.yaml(当然别的位置创建也行)  2,修改yolov8x.yaml  三、训练 1,任意位置新建如下文件夹 |------car(目标检测类别名) |      |------dataSet(后续在文件

    2024年02月05日
    浏览(56)
  • YOLOv8训练自己的分割数据集

    Ultralytics YOLOv8 是由 Ultralytics 开发的一个前沿的 SOTA 模型。它在以前成功的 YOLO 版本基础上,引入了新的功能和改进,进一步提升了其性能和灵活性。YOLOv8 基于快速、准确和易于使用的设计理念,使其成为广泛的目标检测、图像分割和图像分类任务的绝佳选择。YOLOv5 自

    2024年02月04日
    浏览(54)
  • yolov8服务器自定义训练

    autoDL服务器训练YOLOV8 使用autoDL服务器自定义训练yolov8 网址:autoDL 根据需求购买设备(建议选择4/4这种没人租用的,可以独自使用硬盘和cpu,训练速度更快) 自选环境: 从右上角控制台进入购买的实例: 下载地址:finalShell 下载安装包时,将该网址加入设置Cookie和网站权限不安

    2024年04月14日
    浏览(20)
  • yolov8训练进阶:自定义训练脚本,从配置文件载入训练超参数

    yolov8官方教程提供了2种训练方式,一种是通过命令行启动训练,一种是通过写代码启动。 命令行的方式启动方便,通过传入参数可以方便的调整训练参数,但这种方式不方便记录训练参数和调试训练代码。 自行写训练代码的方式更灵活,也比较方便调试,但官方的示例各种

    2024年02月12日
    浏览(21)
  • 【深度学习】YOLOv8训练过程,YOLOv8实战教程,目标检测任务SOTA,关键点回归

    https://github.com/ultralytics/ultralytics 官方教程:https://docs.ultralytics.com/modes/train/ 更建议下载代码后使用 下面指令安装,这样可以更改源码,如果不需要更改源码就直接pip install ultralytics也是可以的。 这样安装后,可以直接修改yolov8源码,并且可以立即生效。此图是命令解释: 安

    2024年02月10日
    浏览(44)
  • pytorch 训练、微调YOLOv5,YOLOv8 小技巧 合集

    yolo v5 坐标相关的判断与转换,评价指标,训练结果解析 YOLOv8 多目标跟踪与常见问题汇总 python + pytorch 多线程实现级联模型的业务逻辑 yolov5 奇奇怪怪的错误汇总:【版本兼容,模型训练,数据加载,模型加速】 基于 TensorRT 使用 python 进行推理优化, 以YOLOv5 为例 本文除了回

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包