YOLO resume 失效排坑:别让 export 毁了你的 last.pt
前言:本文记录了一次模型训练中断后无法恢复的排查过程。原本只是缺少 scipy 库的简单报错,却在修复后意外发现模型从零开始重新训练。经过层层排查,最终定位到
model.export()导出 ONNX 时覆盖了权重文件,导致训练状态丢失。本文不仅记录了完整的排查思路,还提供了防止此类问题再次发生的代码级解决方案,适合所有使用 PyTorch 训练框架的开发者参考。
YOLO 训练中断后无法继续训练?可能是导出 ONNX 时覆盖了权重文件
原本这只是一次普通的报错,笔者本想着通过 resume=True 的方式继续训练,但是再次运行时发现无法接着训练该模型了。原本报错很容易解决,仅仅只是缺了一个 scipy 库,在终端运行一句命令即可解决。

解决方案如下:
pip install scipy

问题到此看似已经结束,但是当笔者在调整完路径准备继续训练时,发现模型从零开始重新训练了,同时图也画好了(一般训练结束时才会出图)。


笔者好生疑惑,这是为什么,于是问了万能的 DeepSeek,在 DS 的指导下加了一行打印路径的代码试试情况。



悲 QWQ,遂笔者选择了微调模型。
原因分析:
笔者在 D 老师的指导下,思考了出现这种状况的原因,大概率是因为其中一行代码的结果。

path = model.export(format="onnx")
没错,就是这最后一行不起眼的代码,把导出的模型重命名后,粘贴回了 train-5\weights 文件夹,覆盖了原来的文件,导致原来的文件没有 epoch 和 optimizer,无法通过 resume=True 继续训练。
这行代码本来是用来X-AnyLabeling做数据标记而准备的,没想到成了覆盖epoch等信息的罪魁祸首。
解决方案:
为了避免这种情况,可以在导出 ONNX 格式前加个判断,从根本上防止这类事件再次发生。
# 导出 ONNX
export_enabled = True # 你可以把这个改为 False 来禁用导出
if export_enabled and results:
print("训练完成,开始导出 ONNX...")
# 指定导出路径,避免与权重文件夹混淆(防止误覆盖)
# 默认会生成在模型所在目录,名称为 last.onnx
onnx_path = model.export(format="onnx", imgsz=1280)
print(f"ONNX 模型已导出至: {onnx_path}")
elif not results:
print("训练未成功执行,跳过 ONNX 导出。")
else:
print("导出功能已禁用 (export_enabled=False),跳过。")
下面是整个问题的排查与解决流程图:
flowchart TD
A["训练报错:缺少 scipy 库"] --> B["安装 scipy 解决报错"]
B --> C["调整路径后继续训练"]
C --> D{"模型是否从零开始训练?"}
D -->|"是"| E["排查原因"]
D -->|"否"| F["正常训练"]
E --> G["询问 DeepSeek"]
G --> H["打印路径情况"]
H --> I["发现罪魁祸首:model.export()"]
I --> J["该代码将 ONNX 模型导出并覆盖了权重文件"]
J --> K["导致权重文件丢失 epoch 和 optimizer 信息"]
K --> L["解决方案:添加导出开关判断"]
L --> M["设置 export_enabled 变量"]
M --> N{"训练成功且导出开启?"}
N -->|"是"| O["导出 ONNX 模型"]
N -->|"否"| P["跳过导出"]
O --> Q["指定导出路径,避免误覆盖"]
P --> Q
总结与建议
关键教训
- 警惕副作用代码:
model.export()这类看似无关的导出代码,可能会意外覆盖关键训练文件。在训练脚本中,任何文件写入操作都应谨慎对待。 - 路径隔离:导出文件(如 ONNX 模型)应指定独立的输出目录,避免与权重文件夹
weights混用,从根本上杜绝误覆盖。 - 添加防护开关:对于非核心功能(如模型导出),建议添加开关变量(如
export_enabled),让开发者可以显式控制是否执行,降低意外触发的风险。
最佳实践
- 训练脚本中所有文件写入操作,建议先打印目标路径,确认无误后再执行。
- 使用
resume=True恢复训练前,检查权重文件是否包含epoch和optimizer状态,避免白跑一轮。 - 将模型导出、日志记录等辅助功能封装为独立函数,与主训练流程解耦,便于维护和调试。

浙公网安备 33010602011771号