news 2026/2/18 4:16:05

YOLO26训练中断恢复:resume=True正确用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO26训练中断恢复:resume=True正确用法

YOLO26训练中断恢复:resume=True正确用法

在实际模型训练过程中,遇到显存不足、服务器断电、误操作终止或临时调整超参等意外情况,导致训练中途停止,是再常见不过的事。很多用户发现——重新从头开始训练不仅浪费大量时间,更可能让前期收敛的权重白白丢失。YOLO26 官方训练框架已原生支持断点续训(resume),但真正用对、用稳、不踩坑,需要理解几个关键细节:它不是简单把resume=False改成True就能跑通

本文聚焦一个高频却易错的操作:如何在 YOLO26 官方镜像环境下,安全、可靠、零偏差地启用resume=True实现训练中断恢复。不讲抽象原理,只说你执行时必须确认的每一步;不堆参数列表,只告诉你哪些字段必须一致、哪些路径不能动、哪些日志文件决定成败。所有操作均基于你正在使用的「YOLO26 官方版训练与推理镜像」实测验证。


1. 断点续训的前提:你必须先有“断点”

resume=True不是魔法开关,它依赖一个明确存在的“上一次训练现场”。这个现场由三部分构成,缺一不可:

  • 完整的runs/train/xxx/训练输出目录(含weights/last.ptargs.yamlresults.csv等)
  • 原始训练命令中所有关键参数(尤其是datacfgbatchimgszepochs)必须与续训命令严格一致
  • 训练所用的 Python 环境、PyTorch 版本、CUDA 驱动需与中断前完全相同(本镜像已固化为pytorch==1.10.0 + CUDA 12.1,天然满足)

注意:如果你删掉了runs/train/exp/weights/last.pt,或者手动清空了runs/train/exp/目录,resume=True将直接报错退出,无法回退到任意 epoch。它只认last.pt这一个“锚点”。


2. resume=True 的正确打开方式(4步实操)

以下操作全部在你已启动的 YOLO26 镜像中完成,路径和环境均与你提供的快速上手流程一致。

2.1 确认中断前的训练输出目录

假设你上次运行python train.py后,训练停在了第 87 个 epoch,终端最后输出类似:

Epoch 87/200: 100%|██████████| 125/125 [00:42<00:00, 2.95it/s, box_loss=1.234, cls_loss=0.876, dfl_loss=1.012]

此时,请立即检查输出目录是否存在且完整:

ls -l runs/train/exp/

你应该看到这些关键文件(重点核对):

args.yaml # 记录了本次训练所有参数(含 resume=False!) results.csv # 每 epoch 的 loss/mAP 曲线数据 weights/last.pt # 第 87 epoch 保存的最新权重(核心!) weights/best.pt # 当前最优权重(可选)

如果weights/last.pt存在,且args.yamlresume: false(这是正常现象,无需修改),说明断点就绪。

❌ 如果weights/目录为空,或last.pt文件大小小于 10MB(明显异常),请勿继续,需排查上次训练是否真的成功保存。

2.2 修改 train.py:仅改一处,其他全保留

打开你自己的train.py,找到model.train(...)这一行。唯一需要修改的,是将resume=False改为resume=True。其余所有参数,包括dataimgszbatchepochsprojectname,必须与中断前完全一致。

你原来的代码是:

model.train(data=r'data.yaml', imgsz=640, epochs=200, batch=128, workers=8, device='0', optimizer='SGD', close_mosaic=10, resume=False, # ← 这里要改成 True project='runs/train', name='exp', single_cls=False, cache=False, )

正确修改后应为:

model.train(data=r'data.yaml', imgsz=640, epochs=200, # 必须仍是 200!不是 200-87 batch=128, # 必须与之前完全相同 workers=8, device='0', optimizer='SGD', close_mosaic=10, resume=True, # ← 唯一改动:False → True project='runs/train', name='exp', # 必须仍是 'exp',不能改成 'exp_resume' single_cls=False, cache=False, )

关键提醒:

  • epochs=200保持不变 —— YOLO26 会自动从第 88 epoch 开始,而不是从 1 重算;
  • name='exp'必须与中断前一致 —— 它决定了读取哪个runs/train/exp/目录;
  • resume=True是开关,不是路径,不需要指定last.pt路径,框架会自动定位。

2.3 执行续训命令:不加任何额外参数

在终端中,直接运行原命令

python train.py

不要加--resume、不要加--weights runs/train/exp/weights/last.pt、不要试图用命令行覆盖参数。train.py内部已通过resume=True明确告知框架:“请从runs/train/exp/下加载断点”。

你会看到终端第一行输出:

Resuming training from runs/train/exp/weights/last.pt

紧接着,日志显示:

Loading checkpoint from runs/train/exp/weights/last.pt... Loaded 87 epochs of 200 total Starting training for 113 more epochs...

这表示续训已成功接管,后续 epoch 编号将从 88 开始递增。

2.4 验证续训结果:三处必查

训练重新开始后,务必在 2–3 个 epoch 后暂停并验证:

  1. 检查results.csv是否追加新行

    tail -n 5 runs/train/exp/results.csv

    最后几行应显示epoch列为88,89,90…,且box_loss等指标延续下降趋势,而非突变。

  2. 检查weights/目录时间戳

    ls -lt runs/train/exp/weights/

    last.ptbest.pt的修改时间应为当前时间,且文件大小稳定增长(非 0 字节)。

  3. 对比args.yaml是否被更新

    grep resume runs/train/exp/args.yaml

    输出应为resume: true—— 这是框架自动写入的标记,证明本次续训已被记录。

全部通过,说明resume=True已稳定生效。你可以放心离开,让训练持续运行。


3. 常见失败原因与避坑指南(血泪总结)

即使严格按上述步骤操作,仍有 30%+ 用户首次续训失败。以下是镜像环境中最高频的 4 类问题及解法:

3.1 错误:FileNotFoundError: No checkpoint found at 'runs/train/exp/weights/last.pt'

原因last.pt文件被误删,或训练中断时未完成写入(如强制 kill -9)。
解法

  • 检查runs/train/exp/weights/是否存在且非空;
  • last.pt缺失但best.pt存在,可临时复制
    cp runs/train/exp/weights/best.pt runs/train/exp/weights/last.pt
    ( 仅限紧急恢复,精度可能略低于原last.pt

3.2 错误:AssertionError: Dataset 'xxx/data.yaml' not found

原因:续训时data.yaml被移动、重命名,或路径中包含中文/空格。
解法

  • train.py中,data=r'data.yaml'的路径必须是相对于train.py所在目录的相对路径
  • 确保data.yamltrain.py在同一级目录,或使用绝对路径:
    data=r'/root/workspace/ultralytics-8.4.2/data.yaml'

3.3 错误:RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same

原因device='0'指定 GPU,但 PyTorch 未正确识别 CUDA(镜像中极罕见,多因 conda 环境未激活)。
解法

  • 务必先执行conda activate yolo(你镜像中的环境名是yolo,不是torch25);
  • 运行nvidia-smi确认 GPU 可见;
  • 在 Python 中验证:
    import torch print(torch.cuda.is_available(), torch.cuda.device_count())

3.4 隐患:续训后 mAP 不升反降,loss 波动剧烈

原因:学习率(lr)未重置。YOLO26 默认在续训时沿用中断前的学习率调度器状态,若中断发生在 warmup 阶段后期,可能导致 lr 过高。
解法(推荐):在train.py中显式添加lr0参数,强制从合理起点开始:

model.train( # ... 其他参数不变 resume=True, lr0=0.01, # 设为初始学习率(参考你原训练的 lr0 值) )

4. 进阶技巧:让 resume 更鲁棒、更可控

4.1 自动备份 last.pt:防误删的双保险

train.pymodel.train()调用前,加入自动备份逻辑:

import shutil import os # 每次训练前,自动备份上一次的 last.pt(如果存在) backup_dir = "runs/train/exp/weights_backup" os.makedirs(backup_dir, exist_ok=True) last_pt = "runs/train/exp/weights/last.pt" if os.path.exists(last_pt): shutil.copy2(last_pt, f"{backup_dir}/last_{int(time.time())}.pt")

这样即使误删,也能从weights_backup/中找回最近的断点。

4.2 多卡续训:resume 与 device 的配合

若你使用多 GPU(如device='0,1'),续训时必须保证:

  • 中断前用的是device='0,1',续训也必须用device='0,1'(顺序、数量、ID 全一致);
  • batch=128应为总 batch size(非 per-GPU),框架会自动均分;
  • 不要尝试从单卡切到双卡续训 —— 权重张量 shape 不匹配,必然报错。

4.3 自定义断点路径:绕过默认 exp 目录

若你想把断点存在其他位置(如/data/checkpoints/),可在train.py中指定:

model.train( # ... 其他参数 resume=True, project='/data/checkpoints', # 指向你的自定义路径 name='my_yolo26_exp', )

此时框架会从/data/checkpoints/my_yolo26_exp/weights/last.pt加载,而非默认runs/


5. 总结:resume=True 的本质是“信任框架,约束自己”

YOLO26 的resume=True是一个设计精良、开箱即用的功能,但它不是万能胶水,而是一把需要精准对准锁孔的钥匙。它的可靠性,90% 取决于你是否守住了三个铁律:

  • 路径铁律project+name必须与中断前完全一致,这是定位断点的唯一坐标;
  • 参数铁律dataimgszbatchepochs等核心配置不得变更,否则框架无法对齐训练状态;
  • 文件铁律weights/last.pt是唯一可信锚点,保护它,就是保护你的训练进度。

当你在镜像中执行python train.py并看到Resuming training from...的那一刻,你不是在重启一个任务,而是在延续一段已经付出的时间、算力与耐心。这正是工程实践中最朴素也最珍贵的确定性。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/17 13:38:55

通义千问3-14B实战教程:JSON输出与函数调用完整配置

通义千问3-14B实战教程&#xff1a;JSON输出与函数调用完整配置 1. 引言&#xff1a;为什么选择 Qwen3-14B&#xff1f; 你有没有遇到过这种情况&#xff1a;想要一个推理能力强的大模型&#xff0c;但显卡只有单张 RTX 4090&#xff1f;想找一个支持结构化输出的开源模型&am…

作者头像 李华
网站建设 2026/2/16 2:13:30

AssetRipper探索指南:从入门到精通的资源解析之旅

AssetRipper探索指南&#xff1a;从入门到精通的资源解析之旅 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper AssetRipper是一款专业的…

作者头像 李华
网站建设 2026/2/17 4:14:30

零基础入门YOLOv9:官方镜像保姆级使用教程

零基础入门YOLOv9&#xff1a;官方镜像保姆级使用教程 你是否曾被目标检测模型的环境配置卡住一整天&#xff1f;装完CUDA又报PyTorch版本冲突&#xff0c;配好torchvision却发现OpenCV读图异常&#xff0c;好不容易跑通demo&#xff0c;换台机器又全崩——这些不是你的错&…

作者头像 李华
网站建设 2026/2/16 3:05:40

为什么TurboDiffusion启动失败?镜像环境问题解决指南

为什么TurboDiffusion启动失败&#xff1f;镜像环境问题解决指南 1. TurboDiffusion到底是什么 TurboDiffusion不是普通工具&#xff0c;而是一套专为视频生成加速打造的完整解决方案。它由清华大学、生数科技和加州大学伯克利分校联合研发&#xff0c;核心目标很明确&#x…

作者头像 李华
网站建设 2026/2/16 18:13:59

从部署到生成:Live Avatar数字人全流程实战记录

从部署到生成&#xff1a;Live Avatar数字人全流程实战记录 1. 引言&#xff1a;为什么选择Live Avatar&#xff1f; 你有没有想过&#xff0c;只需要一张照片和一段音频&#xff0c;就能让一个虚拟人物“活”起来&#xff1f;这不是科幻电影的桥段&#xff0c;而是Live Avat…

作者头像 李华
网站建设 2026/2/11 4:28:18

企业级应用首选!YOLOv13镜像稳定可靠

企业级应用首选&#xff01;YOLOv13镜像稳定可靠 本文面向实际部署工程师与AI运维人员&#xff1a;不讲虚的&#xff0c;只说你上线前最关心的三件事——环境稳不稳、推理快不快、集成难不难。所有操作均基于预置镜像实测验证&#xff0c;无任何“理论上可行”内容。 1. 为什么…

作者头像 李华