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

YOLO26推理保存路径?predict结果输出指南

YOLO26推理保存路径?predict结果输出指南

你刚拉起YOLO26官方镜像,运行完python detect.py,却没在当前目录看到任何结果图?终端里只刷了一堆日志,runs/detect/predict/在哪?为什么save=True却没生成文件?别急——这不是代码写错了,而是你还没摸清YOLO26(基于Ultralytics v8.4.2)默认的输出逻辑和路径规则。

本文不讲原理、不堆参数,只聚焦一个工程师最常卡住的问题:YOLO26的model.predict()结果到底存在哪?怎么改才能存到你想要的位置?怎么快速验证是否成功保存?全程基于你手头这个开箱即用的官方镜像环境,所有操作可直接复现,无需额外安装或配置。


1. 镜像环境与YOLO26基础认知

先明确一个关键前提:你正在使用的,是基于Ultralytics 官方代码库 v8.4.2构建的 YOLO26 专用镜像。它不是魔改版,也不是精简版,而是完整保留了 Ultralytics 标准行为逻辑的生产级环境。这意味着它的predict输出路径、命名规则、目录结构,完全遵循 Ultralytics 的默认约定——而这个约定,恰恰是新手最容易忽略的“隐形开关”。

1.1 环境核心配置(确认无误再动手)

组件版本说明
PyTorch1.10.0与 CUDA 12.1 兼容稳定,支持 YOLO26 所有算子
CUDA12.1镜像已预装驱动与 toolkit,无需手动配置
Python3.9.5Ultralytics v8.4.2 官方推荐版本,避免兼容问题
Ultralyticsv8.4.2YOLO26 官方适配分支,predict行为以此为准

注意:镜像启动后默认进入torch25环境,但YOLO26依赖的包全部安装在yolo环境中。必须先执行conda activate yolo,否则import ultralytics会报错或加载旧版本。

1.2 为什么save=True却找不到图片?

这是最典型的误解来源。Ultralytics 的predict方法从不把结果保存在你运行脚本的当前目录,也不会覆盖你指定的source路径。它严格遵循一套自动生成的、带时间戳的嵌套目录规则:

runs/ └── detect/ └── predict/ ← 第一次运行 ├── image1.jpg ├── image2.jpg └── ... └── predict2/ ← 第二次运行(自动编号) ├── image1.jpg └── ...

这个runs/detect/目录,永远生成在你执行python detect.py命令时所在的那个工作目录下,而不是代码文件所在目录,更不是/root/ultralytics-8.4.2/根目录。

所以,如果你在/root/workspace/ultralytics-8.4.2/下运行命令,结果就在/root/workspace/ultralytics-8.4.2/runs/detect/
如果你在/root/下运行,结果就在/root/runs/detect/——路径由你的终端当前位置决定,而非代码位置。


2. predict结果保存路径详解与实操验证

现在,我们一步步拆解model.predict()的保存逻辑,并用最短路径验证结果是否真的生成了。

2.1 默认保存路径的生成规则

当你调用:

model.predict(source='./ultralytics/assets/zidane.jpg', save=True)

Ultralytics 会做三件事:

  1. 自动创建顶级目录runs/detect/(固定前缀 + 任务类型)
  2. 智能生成子目录名predictpredict2predict3…(按存在顺序递增,不重置
  3. 严格保持原始文件名zidane.jpgruns/detect/predict/zidane.jpg(不加前缀、不改后缀)

关键结论:只要终端显示Results saved to ...,就代表保存成功。路径一定在runs/detect/下,且子目录名一定是predict或其变体(如predict2)。

2.2 三步定位你的结果图(零失败)

别再满系统find / -name "zidane.jpg"了。按这个流程,10秒内找到:

第一步:确认你运行脚本时的当前路径
在终端输入:

pwd

假设输出是/root/workspace/ultralytics-8.4.2

第二步:直接跳转到预测结果根目录

cd runs/detect/ ls -l

你会看到类似:

total 4 drwxr-xr-x 2 root root 4096 Jun 15 10:22 predict

进入它:

cd predict ls -l

输出应为:

-rw-r--r-- 1 root root 123456 Jun 15 10:22 zidane.jpg

第三步:用OpenCV快速验证图片内容(防空文件)
在Python中执行:

import cv2 img = cv2.imread('zidane.jpg') print("图片尺寸:", img.shape) # 应输出 (1080, 1920, 3) 类似值 cv2.imshow('result', img) cv2.waitKey(0)

如果窗口弹出并显示带检测框的图片,恭喜,路径完全正确。

2.3 如何自定义保存路径?(两种可靠方案)

方案一:用project+name参数(推荐,最干净)

修改你的detect.py

model.predict( source='./ultralytics/assets/zidane.jpg', save=True, project='/root/my_results', # 指定父目录 name='my_detection' # 指定子目录名(不再自动编号) )

运行后,结果将严格保存在:

/root/my_results/my_detection/zidane.jpg

优势:路径完全可控,无歧义,适合批量处理或项目归档。

方案二:用save_dir参数(绝对路径,最直接)
from pathlib import Path model.predict( source='./ultralytics/assets/zidane.jpg', save=True, save_dir=Path('/root/output/images') # 必须是 Path 对象 )

结果将保存在:

/root/output/images/zidane.jpg

注意:save_dir忽略projectname,且必须确保父目录/root/output/images已存在(可用mkdir -p /root/output/images创建)。


3. 视频与摄像头推理的保存路径特殊说明

图片是单文件,视频和摄像头流则是整个文件夹。路径规则一致,但内容不同:

3.1 视频推理(source='video.mp4'

  • 结果保存为同名MP4文件,但存放在runs/detect/下的对应子目录中
  • 例如:source='data/test.mp4'→ 输出为runs/detect/predict/test.mp4
  • 验证方法:ls runs/detect/predict/ && ffprobe test.mp4(检查是否为有效视频)

3.2 摄像头实时推理(source='0'

  • 默认不保存!因为source=0是流式输入,没有“文件名”可继承
  • 必须显式指定save_txt=False, save_conf=True等参数,并配合stream=True使用
  • 更实用的做法:先录屏保存为MP4,再用YOLO26处理该MP4文件(路径规则同上)

4. 训练输出路径与推理路径的关联性

你可能注意到:训练时指定了project='runs/train',而推理默认是runs/detect/。它们是完全独立的两个目录树,互不影响。

  • runs/train/exp/weights/best.pt→ 训练好的模型权重
  • runs/detect/predict/zidane.jpg→ 推理结果图片

但二者可以联动:
将训练得到的best.pt直接用于推理:

model = YOLO('/root/workspace/ultralytics-8.4.2/runs/train/exp/weights/best.pt') model.predict(source='test.jpg', save=True, project='/root/inference_results')

路径清晰,职责分明。


5. 常见陷阱与避坑指南

问题现象根本原因一招解决
runs/detect/目录不存在从未成功运行过predict(save=True),或终端报错中断运行一次最简代码:model.predict('zidane.jpg', save=True),看是否生成
找到predict目录但里面是空的source路径写错(如文件不存在),YOLO静默失败先用ls ./ultralytics/assets/zidane.jpg确认文件真实存在
图片有检测框但颜色异常(全黑/全白)OpenCV 读取BGR格式,YOLO26输出RGB,显示时未转换cv2.cvtColor(img, cv2.COLOR_RGB2BGR)再显示
多次运行后出现predict2,predict3Ultralytics 为避免覆盖,自动递增目录名删除旧目录:rm -rf runs/detect/predict*,再运行即可重置为predict
Xftp下载时提示“权限拒绝”runs/目录属主是root,Xftp默认以普通用户连接在Xftp中右键连接 → “属性” → “高级” → 勾选“使用root用户登录”

6. 总结:记住这三条铁律

1. 路径由终端位置定,不由代码位置定

执行python detect.py时你在哪个目录,runs/detect/就建在哪个目录下。pwd是你最好的朋友。

2.save=True必然生成runs/detect/predict*/,绝不在当前目录平铺

看到Results saved to ...日志,立刻cd runs/detect/ && ls,99%的问题当场解决。

3. 自定义路径只用两个参数:project(父目录)+name(子目录名)

组合使用,路径完全可控,告别猜测和搜索。

现在,打开你的终端,cd 到/root/workspace/ultralytics-8.4.2,运行一次python detect.py,然后ls runs/detect/—— 你亲手生成的第一个 YOLO26 检测结果,正安静地躺在那里,等着你打开查看。


获取更多AI镜像

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

http://www.jsqmd.com/news/292490/

相关文章:

  • Qwen3-4B与Mixtral对比:稀疏模型与稠密模型性能评测
  • IQuest-Coder-V1部署失败?环境依赖问题解决步骤详解
  • Qwen1.5-0.5B冷启动优化:首次加载加速技巧
  • Qwen3-14B响应不完整?上下文截断问题解决指南
  • 3个提效工具推荐:Llama3-8B开发调试实用插件
  • 历史记录功能即将上线,期待值拉满
  • Qwen All-in-One输入预处理:文本清洗与规范化
  • 复杂背景文字提取技巧:提高阈值减少误检
  • 零基础也能用!麦橘超然AI绘画一键部署实战
  • 小白也能懂的SGLang入门:零基础搭建高性能LLM应用
  • 超详细版Multisim安装图文教程(适用于教师备课)
  • Qwen1.5-0.5B支持中文吗?本地化优化部署案例
  • Llama3-8B英语对话优化:专精英文场景的部署调优实战
  • 小白福音:GPEN人像修复镜像开箱即用体验分享
  • 如何实现零样本音色克隆?IndexTTS-2实战教程从零开始
  • Llama3-8B-Instruct部署教程:vLLM+Open-WebUI集成指南
  • 手机输入提示词就能画画?麦橘超然远程访问实现
  • Qwen2.5-0.5B值得入手吗?轻量部署全面评测指南
  • 基于Keil和Proteus的单片机仿真调试操作指南
  • STM32 UART接收超时处理机制系统学习
  • fft npainting lama隐藏功能揭秘:画笔大小这样调最好
  • 无需代码!用CAM++镜像完成语音特征提取全过程
  • ATmega328P在Arduino Uno中的PWM生成原理通俗解释
  • 用BSHM做的AI换装案例,效果远超预期
  • NewBie-image-Exp0.1实战案例:多角色动漫生成系统搭建详细步骤
  • 学习率调多少合适?微调模型经验分享
  • Qwen3-Embedding-4B vs BGE-Signature: 代码相似性检测对比
  • Cute_Animal_For_Kids_Qwen_Image镜像更新日志解读与升级指南
  • Qwen3-0.6B本地部署避坑指南,新手必看少走弯路
  • 51单片机控制LED灯亮灭:完整指南(含源码)