news 2026/6/10 16:19:20

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/6/10 21:57:50

Blender与CAD协同工作:跨软件模型精度控制全指南

Blender与CAD协同工作&#xff1a;跨软件模型精度控制全指南 【免费下载链接】blender Official mirror of Blender 项目地址: https://gitcode.com/gh_mirrors/bl/blender 在工程设计与可视化流程中&#xff0c;Blender与CAD软件的协同工作常面临模型精度丢失、单位不统…

作者头像 李华
网站建设 2026/6/10 21:57:10

开箱即用:Meta-Llama-3-8B-Instruct打造智能会议纪要神器

开箱即用&#xff1a;Meta-Llama-3-8B-Instruct打造智能会议纪要神器 1. 为什么你需要一个“开箱即用”的会议纪要工具&#xff1f; 你有没有经历过这样的场景&#xff1a; 会议刚结束&#xff0c;笔记本上记了满满三页&#xff0c;但翻回去看&#xff0c;全是零散的关键词和…

作者头像 李华
网站建设 2026/6/10 15:51:27

Day26-20260122

冒泡排序 冒泡排序无疑是最出名的排序算法之一&#xff0c;总共有八大排序! 冒泡的代码还是相当简单的&#xff0c;两层循环&#xff0c;外层冒泡轮数&#xff0c;里层依次比较&#xff0c;江湖中人人尽皆知。 我们看到嵌套循环&#xff0c;应该立马就可以得出这个算法的时间复…

作者头像 李华
网站建设 2026/6/10 23:27:00

YOLO11效果惊艳!道路裂缝检测案例展示

YOLO11效果惊艳&#xff01;道路裂缝检测案例展示 1. 为什么道路裂缝检测值得用YOLO11来做&#xff1f; 你有没有注意过&#xff0c;城市主干道上那些细长的黑色裂纹&#xff1f;它们看起来不起眼&#xff0c;但往往是路面结构老化的第一信号。人工巡检靠肉眼和经验&#xff…

作者头像 李华
网站建设 2026/6/10 19:36:30

开源绘图工具Excalidraw技术探索笔记:从部署到个性化全攻略

开源绘图工具Excalidraw技术探索笔记&#xff1a;从部署到个性化全攻略 【免费下载链接】excalidraw Virtual whiteboard for sketching hand-drawn like diagrams 项目地址: https://gitcode.com/GitHub_Trending/ex/excalidraw 作为一款备受推崇的开源绘图工具&#x…

作者头像 李华
网站建设 2026/6/10 15:10:48

3大场景×5步落地:解锁Activepieces零代码自动化潜能

3大场景5步落地&#xff1a;解锁Activepieces零代码自动化潜能 【免费下载链接】activepieces Your friendliest open source all-in-one automation tool ✨ Workflow automation tool 100 integration / Enterprise automation tool / ChatBot / Zapier Alternative 项目地…

作者头像 李华