训练后的YOLOv8模型正确保存与加载方法求助
YOLOv8 模型正确保存与加载方案
一、训练后正确保存模型
YOLOv8自带完整的模型保存逻辑,训练过程中会自动在runs/detect/trainX/weights目录下生成两个核心文件:
best.pt:验证集性能最优的模型last.pt:训练最后一轮的模型
如果要手动保存训练好的模型,不要用torch.save(model.state_dict(), ...),直接调用模型实例的save()方法:
# model为训练完成的YOLOv8模型实例 model.save("custom_yolo_model.pt")
这种方式保存的是完整模型包,包含模型结构、权重、训练配置等所有必要信息,能直接用于后续推理。
二、加载模型并推理的正确步骤
加载保存的.pt模型无需手动构建结构再加载权重,直接用YOLO类实例化即可:
from ultralytics import YOLO # 加载预保存的模型 model = YOLO("custom_yolo_model.pt") # 执行推理(支持图片、视频、摄像头等输入) infer_results = model("test_image.jpg") # 处理推理结果示例 for res in infer_results: det_boxes = res.boxes # 检测框坐标、置信度等信息 # 按需添加结果可视化、导出等操作 res.show() # 显示带检测框的图片
三、为什么用torch.save(state_dict)会失效?
YOLOv8的模型包含大量自定义模块(如检测头、锚框配置、数据集参数绑定等),仅保存state_dict会丢失模型结构定义和训练上下文信息。加载时需要严格匹配原模型的结构细节,稍有差异就会出现权重不匹配、推理输出异常的问题。而YOLOv8原生的save()方法保存的是完整模型,能自动恢复所有依赖信息。
四、避免重复训练的实用技巧
- 训练完成后,务必保留
runs目录下的训练结果文件夹,其中的best.pt/last.pt是直接可用的模型文件 - 若训练中途中断,可加载
last.pt继续训练:
model = YOLO("last.pt") model.train(data="your_dataset.yaml", epochs=10) # 指定剩余训练轮数
- 迁移模型时,直接复制
.pt文件到目标环境,无需重新训练,用YOLO类加载即可正常推理
内容的提问来源于stack exchange,提问作者rgross
相关产品推荐
相关产品推荐

