news 2026/4/15 16:13:59

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 14:37:31

零基础玩转Qwen3-1.7B,手把手教你搭AI系统

零基础玩转Qwen3-1.7B,手把手教你搭AI系统 1. 为什么你该现在就试试Qwen3-1.7B 你有没有过这样的经历:想用大模型写点东西、查点资料、甚至做个简单助手,结果发现——装个模型要配环境、调依赖、改配置,光是跑通第一行代码就卡了…

作者头像 李华
网站建设 2026/4/15 21:29:58

Qwen3-Embedding-4B长文本处理:32k上下文实战测试

Qwen3-Embedding-4B长文本处理:32k上下文实战测试 你有没有遇到过这样的问题:想用向量模型处理一篇长达两万字的技术文档,结果模型直接截断、报错,或者嵌入质量断崖式下降?传统嵌入模型普遍卡在512或2048 token的瓶颈…

作者头像 李华
网站建设 2026/4/15 4:50:48

Llama3-8B知识图谱构建?实体抽取实战教程

Llama3-8B知识图谱构建?实体抽取实战教程 1. 为什么用Llama3-8B做实体抽取——不是“大模型万能”,而是“小而精”的务实选择 很多人看到“知识图谱”“实体抽取”这几个词,第一反应是:得上BERT、SpaCy、甚至要微调RoBERTa吧&am…

作者头像 李华
网站建设 2026/4/13 7:27:48

1.7M小模型大能量,FSMN VAD轻量高效实测

1.7M小模型大能量,FSMN VAD轻量高效实测 [toc] 你有没有遇到过这样的场景: 一段30分钟的会议录音,里面夹杂着大量静音、翻页声、键盘敲击和空调嗡鸣,想提取真正有人说话的片段,却要手动拖进度条、反复试听、一截一截…

作者头像 李华
网站建设 2026/4/12 1:03:05

BERT中文理解能力评测:掩码填空任务部署对比教程

BERT中文理解能力评测:掩码填空任务部署对比教程 1. 什么是BERT智能语义填空服务 你有没有试过读一句话,突然卡在某个词上,心里清楚它该是什么,却一时想不起来?比如看到“画龙点睛”四个字,下意识知道后面…

作者头像 李华
网站建设 2026/4/13 7:12:39

历史记录功能即将上线,期待值拉满

历史记录功能即将上线,期待值拉满 你有没有过这样的经历:刚把一张照片调出最满意的卡通效果,一刷新页面,参数没了,结果也没了?或者批量处理了20张图,想回头看看第7张的风格强度设的是0.6还是0.…

作者头像 李华