当前位置: 首页 > news >正文

YOLO11模型保存路径在哪?一文讲清楚

YOLO11模型保存路径在哪?一文讲清楚

你刚跑完YOLO11训练,终端最后一行显示“Results saved to runs/segment/train2”,心里却冒出一个最实际的问题:我辛辛苦苦训了30轮的模型,到底存在哪儿了?下次想接着用、想部署、想给别人看效果,该去哪个文件夹找那个.pt文件?

别急——这不是配置错误,也不是路径丢失,而是YOLO11(基于ultralytics 8.3.x)默认保存逻辑和新手容易忽略的细节共同导致的“找不着家”现象。本文不讲原理、不堆参数,只聚焦一个动作:精准定位、快速提取、安全复用。从训练结束那一刻起,手把手带你摸清每一份权重的落点,包括best.ptlast.pt、带优化器的原始权重,以及如何自定义保存位置。


1. 默认保存路径的完整结构解析

YOLO11训练完成后,所有产出物都集中在一个顶层目录下,这个目录由两部分动态拼接而成:固定前缀runs/+ 任务类型子目录 + 用户指定或自动生成的运行名

1.1 核心路径公式

runs/{task}/{project}/{name}/
  • {task}:任务类型,如detect(目标检测)、segment(实例分割)、pose(姿态估计)、classify(图像分类)、obb(旋转框检测)
  • {project}:项目名称,默认为runs/{task}下的子文件夹,如traintrain2my_project
  • {name}:单次运行名称,默认为train,若存在同名则自动递增为train2train3

举个真实例子:
当你执行model.train(data="point-offer-seg.yaml", epochs=30)且未指定projectname时,系统会自动创建:
runs/segment/train2/
这就是你在训练日志末尾看到的Results saved to runs/segment/train2的由来。

1.2runs/segment/train2/目录内关键文件一览

进入该目录后,你会看到如下标准结构(已按功能归类):

runs/segment/train2/ ├── weights/ # ← 模型权重就在这里!重点看 │ ├── best.pt # 最佳验证指标对应的模型(不含优化器) │ └── last.pt # 最后一轮训练完成的模型(不含优化器) ├── results.csv # 训练全过程指标记录(CSV格式,可Excel打开) ├── results.png # 自动绘制的损失/精度曲线图 ├── args.yaml # 本次训练所有参数的快照(含data、epochs、imgsz等) ├── train_batch0.jpg # 第0批训练数据可视化(含增强效果) ├── val_batch0_pred.jpg # 验证集首批次预测结果图 ├── val_batch0_labels.jpg # 验证集首批次真实标签图 └── dataset.json # 数据集统计信息(类别数、图片总数等)

注意:weights/best.ptweights/last.pt剥离了优化器状态(optimizer state)的纯净模型,体积更小、加载更快,这才是你部署、推理、分享时真正该用的文件

1.3 为什么看不到带优化器的权重?

YOLO11(ultralytics ≥8.0.200)默认在训练结束时自动剥离优化器,这是为了:

  • 减小模型体积(通常减少30%~50%)
  • 避免跨环境加载失败(不同PyTorch版本对optimizer兼容性差)
  • 符合工业部署规范(推理模型不需要梯度更新)

你可以在训练日志中明确看到这行提示:
Optimizer stripped from runs/segment/train2/weights/last.pt, 45.1MB

如果你确实需要保留优化器(例如要断点续训),必须显式关闭该行为。


2. 如何自定义模型保存路径?

硬记runs/segment/train2/weights/best.pt太费劲?完全没必要。YOLO11提供两级灵活控制:项目级统一管理单次运行精准命名

2.1 方法一:通过projectname参数指定根目录(推荐)

model.train()中直接传入两个字符串参数:

results = model.train( data="point-offer-seg.yaml", epochs=30, imgsz=640, batch=8, project="my_yolo11_models", # ← 所有输出存到这个文件夹下 name="seg_point_offer_v1" # ← 本次运行专属子目录名 )

执行后,模型将保存在:
my_yolo11_models/seg_point_offer_v1/weights/best.pt

优势:

  • 路径语义清晰,一眼看出用途(seg_point_offer_v1
  • 同一项目下可并行多组实验(v1,v2,with_aug,no_mosaic
  • 不污染默认runs/目录,便于清理

2.2 方法二:修改ultralytics/cfg/default.yaml(全局生效,慎用)

找到源码中ultralytics/cfg/default.yaml文件,修改以下字段:

# ultralytics/cfg/default.yaml project: my_yolo11_models # 全局默认项目名 name: train # 全局默认运行名(仍会自动递增为train2等)

风险提示:此方式影响所有后续训练,且需确保你有修改源码权限。仅建议在团队统一开发环境中使用,个人调试不推荐。

2.3 方法三:训练后手动复制(应急方案)

如果已经训完且路径混乱,用一行命令即可提取核心权重:

# 从默认路径拷贝best.pt到当前目录 cp runs/segment/train2/weights/best.pt ./my_best_model.pt # 或重命名并移至指定文件夹 mkdir -p ./deploy/models mv runs/segment/train2/weights/best.pt ./deploy/models/point_offer_seg_best_v1.pt

3. 权重文件详解:best.ptvslast.ptvs 带优化器版

别再凭名字猜用途。这三类文件本质不同,适用场景截然分开:

文件名是否含优化器是否含训练参数适用场景文件大小特点
best.pt❌ 否是(args.yaml中记录)推理、部署、效果展示最小(仅模型+配置)
last.pt❌ 否快速验证最终效果、轻量部署best.pt基本一致
last_optimizer.pt(需手动保存)断点续训、调试学习率显著更大(含optimizer.state_dict)

3.1 如何生成带优化器的权重?(断点续训必备)

YOLO11默认不保存,但你可以主动开启:

from ultralytics import YOLO model = YOLO("yolo11m-seg.yaml").load("weights/yolo11m-seg.pt") # 关键:设置 save_period=1 且 keep_ckpt=True(ultralytics ≥8.3.9支持) train_params = { "data": "point-offer-seg.yaml", "epochs": 30, "save_period": 1, # 每1轮保存一次 "keep_ckpt": True, # ← 保留优化器状态!生成 last_optimizer.pt "project": "my_models", "name": "debug_resume" } results = model.train(**train_params)

生成文件包括:

  • my_models/debug_resume/weights/last.pt(无优化器)
  • my_models/debug_resume/weights/last_optimizer.pt(含优化器,可用于resume=True

3.2 加载时如何区分?

  • 推理/部署:永远用YOLO("path/to/best.pt")
  • 断点续训:必须用YOLO("yolo11m-seg.yaml").load("path/to/last_optimizer.pt")并传入resume=True
# 正确续训写法 model = YOLO("yolo11m-seg.yaml") model.load("my_models/debug_resume/weights/last_optimizer.pt") results = model.train(resume=True) # resume=True 会自动读取优化器状态

4. 实战验证:三步确认你的模型真正在哪儿

光看文档不如亲手验证。用以下三个命令,5秒内锁定路径:

4.1 步骤1:查看训练日志末尾(最快)

训练结束后,终端最后几行必有:

30 epochs completed in 0.071 hours. Optimizer stripped from runs/segment/train2/weights/last.pt, 45.1MB Optimizer stripped from runs/segment/train2/weights/best.pt, 45.1MB Results saved to runs/segment/train2

→ 路径已明示:runs/segment/train2/weights/

4.2 步骤2:用Python代码实时获取(防手误)

在训练脚本末尾加一行,运行后直接打印绝对路径:

print(" 最佳模型路径:", results.save_dir / "weights" / "best.pt") print(" 最终模型路径:", results.save_dir / "weights" / "last.pt")

输出示例:

最佳模型路径: /home/user/my_project/runs/segment/train2/weights/best.pt 最终模型路径: /home/user/my_project/runs/segment/train2/weights/last.pt

4.3 步骤3:Linux/Mac终端快速定位(适合批量检查)

# 查找所有 .pt 文件(按修改时间倒序,最新的在最上面) find runs -name "*.pt" -type f -printf '%T@ %p\n' | sort -n | tail -5 | cut -d' ' -f2- # 输出类似: # runs/segment/train2/weights/best.pt # runs/segment/train2/weights/last.pt # runs/detect/train/weights/best.pt

5. 常见误区与避坑指南

这些“看似合理实则踩坑”的操作,新手90%都试过:

5.1 误区1:“我把train.py放在ultralytics/目录里,模型应该也在那儿”

❌ 错。YOLO11的保存路径与脚本位置完全无关,只取决于project/name参数和默认规则。train.py放 anywhere 都不影响输出位置。

5.2 误区2:“weights/yolo11m-seg.pt是我训出来的模型”

❌ 错。这是预训练权重(pretrained),位于你手动创建的weights/文件夹下,是训练起点,不是训练结果。你的成果永远在runs/下。

5.3 误区3:“best.pt总是比last.pt好,所以只留best.pt

谨慎。best.pt基于验证集指标(如mAP50),但若验证集有偏差,last.pt可能在实际场景中更鲁棒。建议两者都保留,并用真实测试集对比效果。

5.4 误区4:“路径太长,我直接改源码把runs/换成./models/

❌ 危险。ultralytics内部多处硬编码依赖runs/前缀(如TensorBoard日志、CSV生成、图片保存)。强行修改易导致训练中断或文件错位。


6. 部署前必做:模型瘦身与格式转换

拿到best.pt后别急着用,先做两件事提升可用性:

6.1 步骤1:导出为ONNX(跨平台部署基石)

from ultralytics import YOLO model = YOLO("runs/segment/train2/weights/best.pt") model.export(format="onnx", dynamic=True, simplify=True)

生成:runs/segment/train2/weights/best.onnx
优势:可在Windows/Linux/嵌入式设备运行,无需Python环境。

6.2 步骤2:验证导出模型是否等效

# 加载ONNX模型并推理同一张图 onnx_model = YOLO("runs/segment/train2/weights/best.onnx") results_onnx = onnx_model("datasets/seg_point_offer_20240930/images/00001.jpg") # 与原PT模型对比结果(box坐标、mask、置信度) pt_model = YOLO("runs/segment/train2/weights/best.pt") results_pt = pt_model("datasets/seg_point_offer_20240930/images/00001.jpg") print("ONNX与PT结果一致:", abs(results_onnx[0].boxes.xyxy - results_pt[0].boxes.xyxy).max() < 1e-3)

7. 总结:记住这四句话,永不错过你的模型

  • 第一句:YOLO11的模型永远不在你放train.py的地方,而在runs/{task}/{project}/{name}/weights/下。
  • 第二句:日常使用只认best.ptlast.pt,它们已剥离优化器,开箱即用。
  • 第三句:想自定义路径?训练时加project="xxx"name="yyy",比记路径简单十倍。
  • 第四句:部署前务必导出ONNX,并用真实图片验证输出一致性——路径对了,效果还得稳。

你现在可以立刻打开终端,输入ls runs/segment/*/weights/,看着那一排清晰的best.pt,心里踏实了。模型不是消失,只是藏在了有规律的地方。而规律,正是工程化的开始。

--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
http://www.jsqmd.com/news/300736/

相关文章:

  • 如何合规获取离线教材?国家中小学智慧教育平台资源本地化指南
  • 戴森球计划蓝图决策指南:从资源匹配到工厂优化的进阶之路
  • 3步打造戴森球计划高效工厂:从蓝图设计到模块化布局的新手攻略
  • 微信防撤回工具深度侦查:从技术谜题到完美拦截的破解之道
  • 从安装到调用,Qwen3-Embedding-0.6B全流程演示
  • protel文件直接下单?小批量pcb板生产厂家支持现状
  • 微信防撤回工具RevokeMsgPatcher:消息留存与聊天记录保护完全指南
  • ESP32教程之MQTT协议在家居自动化中的操作指南
  • Glyph输入预处理技巧:提升图像质量的实用方法
  • GPEN镜像训练指导:如何准备数据对并微调
  • 开源模拟器终极指南:从零开始在电脑上畅玩经典游戏
  • 5个语音情感识别工具推荐:Emotion2Vec+ Large镜像一键部署教程
  • 用SenseVoiceSmall做了个情绪识别小项目,效果太惊艳了
  • 用YOLOv13官版镜像搭建无人机视觉系统可行吗
  • Speech Seaco Paraformer Python版本要求:环境依赖检查清单
  • 不用再查资料了!开机启动脚本一篇讲清楚
  • LivePortrait人像动画引擎跨平台部署与技术探索
  • GPT-OSS生产部署挑战:高显存需求应对方案
  • 告别繁琐配置,Paraformer离线版实现中文语音转文字全流程
  • YimMenu安全使用与功能拓展实战指南
  • 3个步骤零门槛极速上手戴森球计划FactoryBluePrints蓝图仓库
  • SGLang官方文档速查手册,新手必备
  • Pinocchio新特性解析:模仿关节技术如何重塑机器人动力学计算
  • 三步掌握网页资源获取:效率工具提升开发生产力指南
  • 智能采集工具颠覆网页资源获取:从手动操作到自动化效率提升的革命
  • 高频电路中二极管选型的关键指标
  • 突破限制:网易云音乐无损解析工具,让音乐爱好者轻松获取高保真音频
  • 低资源大模型部署探索:1-bit量化技术与CPU分布式推理实践
  • YimMenu免费辅助工具3天从入门到精通:GTA5玩家必备指南
  • 原神3.1.5命令生成神器完全攻略:从入门到精通的游戏辅助工具使用指南