news 2026/2/27 0:18:50

YOLO26推理结果保存路径在哪?输出目录详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO26推理结果保存路径在哪?输出目录详解

YOLO26推理结果保存路径在哪?输出目录详解

你刚跑完YOLO26的detect.py,终端一闪而过,图片也确实生成了——但翻遍整个文件夹却找不到那张带框的检测图?别急,这不是你的操作问题,而是YOLO26(基于Ultralytics v8.4.2)默认的输出逻辑和路径规则没被说清楚。本文不讲原理、不堆参数,只聚焦一个最实际的问题:推理结果到底存哪儿了?怎么快速定位、批量提取、自定义修改?全程基于官方镜像实测,所有路径、命令、截图均来自真实环境,一步一验证。

1. 默认保存路径的真相:不是“当前目录”,而是有固定规则

很多新手以为save=True就会把结果存到detect.py同级目录,或者source图片所在目录——这是常见误解。YOLO26(Ultralytics v8.4.2)采用的是项目级+时间戳+任务类型的三层嵌套路径策略,与PyTorch Lightning或Detectron2的思路完全不同。

它的默认行为是:

  • 不管你在哪个目录下运行python detect.py
  • 也不管source参数指向./assets/zidane.jpg还是/data/test/001.jpg
  • 只要没显式指定projectname参数,结果就一定会存进runs/detect/predict/这个固定子目录里

我们来验证一下。回到镜像启动后的终端,执行:

python detect.py

等运行结束,直接输入:

ls -l runs/detect/

你会看到类似这样的输出:

total 4 drwxr-xr-x 3 root root 4096 May 20 14:22 predict

再进一层:

ls -l runs/detect/predict/

输出可能是:

total 8 -rw-r--r-- 1 root root 123456 May 20 14:22 zidane.jpg -rw-r--r-- 1 root root 789012 May 20 14:22 zidane.jpg.txt

看到了吗?带检测框的zidane.jpg就在这里,不是在./ultralytics/assets/,也不是在/root/workspace/ultralytics-8.4.2/根目录,而是自动创建的runs/detect/predict/

这个路径不是硬编码在代码里的,而是由Ultralytics框架内部的get_save_dir()函数动态生成的,规则如下:

组成部分默认值可否修改说明
projectruns顶级项目文件夹,所有训练/推理/验证结果都归于此
namedetect+predict第二层分类,detect表示检测任务,predict是本次推理会话的唯一标识(带时间戳)
subdirpredict❌ 否(对detect任务固定)model.predict()调用,固定为predictmodel.val()则为val

所以,runs/detect/predict/不是“随便起的名字”,而是框架约定的标准输出锚点。记不住?就记住一句话:YOLO26的推理结果,永远在runs/detect/predict/里找,错不了。

2. 如何自定义保存路径?3种实用方法全解析

默认路径够用,但实际工作中你往往需要:

  • 把结果存到自己的数据盘/data/output/下,避免系统盘爆满;
  • 每次推理生成独立文件夹,比如/data/output/exp_20240520_zidane/,方便归档;
  • 批量处理100张图,结果不混在一起,按原图名分组存放。

下面这3种方法,从简单到灵活,覆盖全部需求。

2.1 方法一:用projectname参数直接指定(推荐新手)

这是最直观、最安全的方式,改一行代码就能搞定。回到你的detect.py,把model.predict()调用改成这样:

model.predict(source=r'./ultralytics/assets/zidane.jpg', save=True, show=False, project='/data/output', # 👈 指定顶级项目目录 name='zidane_demo' # 👈 指定本次任务文件夹名 )

保存后再次运行:

python detect.py

然后检查:

ls -l /data/output/zidane_demo/

输出就是:

total 4 -rw-r--r-- 1 root root 123456 May 20 14:35 zidane.jpg

成功!路径完全按你写的走,没有额外层级,干净利落。注意:

  • project必须是绝对路径(以/开头),相对路径如./output会被自动转成runs/detect/./output,反而更乱;
  • name可以是任意合法文件夹名,支持中文(如name='测试结果'),但建议用英文+下划线,兼容性更好。

2.2 方法二:用save_dir参数彻底接管(适合高级用户)

如果你连predict这个子文件夹都不想要,希望结果直接落在/data/output/zidane.jpg,那就用save_dir——它是最高优先级的路径控制参数,一旦设置,projectname将被忽略。

修改detect.py

model.predict(source=r'./ultralytics/assets/zidane.jpg', save=True, show=False, save_dir='/data/output/zidane_demo' # 👈 完全自定义最终目录 )

运行后:

ls -l /data/output/zidane_demo/

结果同上,但路径结构更扁平。 注意:save_dir必须是已存在的目录,YOLO26不会自动创建父级(比如/data/output不存在,它不会报错,但会静默失败)。所以保险起见,加个创建逻辑:

import os save_path = '/data/output/zidane_demo' os.makedirs(save_path, exist_ok=True) # 自动创建多级目录 model.predict(source=r'./ultralytics/assets/zidane.jpg', save=True, show=False, save_dir=save_path )

2.3 方法三:批量处理时按原图名自动建子目录(工程级实践)

假设你有一批图放在/data/images/下,想让每张图的结果单独存进/data/results/原图名/,比如:

  • /data/images/cat.jpg/data/results/cat/
  • /data/images/dog.jpg/data/results/dog/

这就不能靠name了,得用Python脚本动态生成。新建一个batch_detect.py

from ultralytics import YOLO import os import glob model = YOLO(model=r'yolo26n-pose.pt') # 获取所有jpg图片路径 image_paths = glob.glob('/data/images/*.jpg') for img_path in image_paths: # 提取原图文件名(不含扩展名)作为子目录名 base_name = os.path.splitext(os.path.basename(img_path))[0] save_dir = f'/data/results/{base_name}' os.makedirs(save_dir, exist_ok=True) print(f"正在处理: {img_path} → 输出到: {save_dir}") model.predict(source=img_path, save=True, show=False, save_dir=save_dir )

运行它:

python batch_detect.py

几秒后,/data/results/下就整齐排列着cat/dog/等文件夹,每个里面都是对应的检测图。这才是真正可落地的批量方案。

3. 训练、验证、导出结果路径对照表(一表看全)

推理只是YOLO26工作流的一环。你可能还关心:训练模型存在哪?验证指标图在哪?ONNX导出文件放哪?下面这张表,基于本镜像(Ultralytics v8.4.2 + YOLO26)实测整理,所有路径均为默认行为,未做任何project/name修改:

任务类型调用方式默认保存路径关键文件说明
模型推理model.predict()runs/detect/predict/xxx.jpg(带框图)、xxx.jpg.txt(坐标文本)
模型训练model.train()runs/train/exp/weights/best.pt(最佳权重)、results.csv(指标曲线)、train_batch0.jpg(训练可视化)
模型验证model.val()runs/val/exp/confusion_matrix.png(混淆矩阵)、PR_curve.png(P-R曲线)、val_batch0_pred.jpg(预测样例)
模型导出model.export(format='onnx')runs/detect/predict/(同推理)yolo26n-pose.onnx(导出文件,与推理图同级)
模型追踪model.track()runs/track/predict/xxx.jpg(带ID框图)、tracks/xxx.txt(轨迹ID序列)

重点提醒:

  • 所有runs/xxx/路径,都位于你运行Python脚本时所在的当前工作目录下,不是镜像的固定位置。比如你在/root/workspace/ultralytics-8.4.2/下运行train.pyruns/train/exp/就在这个目录里;如果你cd到/data/再运行,runs/就会出现在/data/runs/
  • exp后面的数字(如exp2exp3)是自动递增的,防止覆盖。如果你想每次都用exp,加exist_ok=True参数(Ultralytics v8.4.2暂不支持,需升级v8.5+)。

4. 常见路径问题排查指南(附解决方案)

即使知道了规则,实操中仍可能遇到“明明设置了路径,却找不到文件”的情况。以下是镜像用户反馈最多的5个问题,附带一键解决命令:

4.1 问题:设置了project='/data/output',但/data/output里什么都没有

原因/data/output目录权限不足,或根本不存在。YOLO26不会报错,只会静默失败。

验证命令

ls -ld /data/output # 如果提示 No such file or directory,说明目录不存在 # 如果显示 drwxr-xr-x 2 root root ...,但属主不是root,可能权限受限

一键修复

mkdir -p /data/output && chmod -R 755 /data/output

4.2 问题:runs/detect/predict/里有图,但全是黑图或空白图

原因:OpenCV读图失败(常见于JPG格式损坏、路径含中文、或source参数用了Windows风格反斜杠\)。

验证命令

# 检查图片是否能被OpenCV正常读取 python -c "import cv2; img = cv2.imread('./ultralytics/assets/zidane.jpg'); print('Shape:', img.shape if img is not None else 'None')"

解决方案:确保source路径用正斜杠/,且图片用file命令确认格式:

file ./ultralytics/assets/zidane.jpg # 正常应输出:zidane.jpg: JPEG image data...

4.3 问题:save=True后,终端没报错,但runs/目录下连detect文件夹都没有

原因:你运行的不是detect.py,而是其他脚本(比如误点了train.py),或者model.predict()根本没被执行(比如if __name__ == '__main__':没触发)。

排查命令

# 查看最近10行日志,确认是否进入predict流程 python detect.py 2>&1 | tail -10 # 如果输出里没有 "Predict:" 或 "Results saved to" 字样,说明predict没运行

解决方案:在model.predict()前加一行打印:

print(" 开始执行推理...") model.predict(...)

4.4 问题:想把结果保存到U盘或网络盘,但路径写/mnt/usb/results不生效

原因:镜像默认未挂载外部存储,/mnt/usb目录为空。

验证命令

ls /mnt/usb # 如果返回 empty,说明没挂载

解决方案:先挂载再使用(需管理员权限):

# 假设U盘设备是 /dev/sdb1 mkdir -p /mnt/usb mount /dev/sdb1 /mnt/usb # 然后就可以用 project='/mnt/usb/results' 了

4.5 问题:predict/里有图,但打开是纯白或纯黑,尺寸异常小(如1x1像素)

原因:GPU显存不足导致推理崩溃,框架降级为CPU模式,但某些CUDA算子未正确回退。

验证命令

nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits # 如果显示 > 20000,说明显存紧张

解决方案:强制指定CPU运行(牺牲速度保结果):

model.predict(source=..., save=True, device='cpu' # 👈 显式指定 )

5. 总结:掌握路径逻辑,告别“找文件焦虑”

YOLO26的输出路径,从来不是玄学,而是一套清晰、可预测、可定制的规则。回顾本文核心结论:

  • 默认路径铁律runs/detect/predict/是推理结果的唯一默认落点,牢记它,5秒内定位文件;
  • 自定义三板斧project+name组合最安全,save_dir最灵活,脚本动态生成最工程;
  • 路径即上下文runs/的位置取决于你cd到哪再运行脚本,不是镜像预设,这点务必清醒;
  • 排查先看日志model.predict()成功执行后,终端必会打印Results saved to xxx,这是最权威的路径提示;
  • 权限是隐形杀手:90%的“路径失效”问题,根源都在目录不存在或无写入权限,mkdir -p && chmod是万能解药。

现在,你可以自信地告诉同事:“YOLO26的结果?不用翻,ls runs/detect/predict/,准在那儿。” 这份确定性,正是高效AI开发的第一步。


获取更多AI镜像

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

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

Qwen3-Embedding-4B如何集成?多语言检索系统部署教程

Qwen3-Embedding-4B如何集成?多语言检索系统部署教程 你是不是也遇到过这样的问题:想搭建一个支持中英日韩甚至小语种的搜索系统,但现有嵌入模型要么英文强中文弱,要么多语言效果参差不齐,要么部署起来动辄要配8张卡&…

作者头像 李华
网站建设 2026/2/25 3:38:58

腾讯SRPO:AI绘图真实感3倍提升的优化模型

腾讯SRPO:AI绘图真实感3倍提升的优化模型 【免费下载链接】SRPO 腾讯SRPO是基于FLUX.1.dev优化的文本生成图像模型,采用Direct-Align技术提升降噪效率,通过语义相对偏好优化实现奖励在线调整。无需依赖离线奖励微调,即可将生成图像…

作者头像 李华
网站建设 2026/2/24 19:39:10

零配置启动Qwen3-Embedding-0.6B,Jupyter直接调用

零配置启动Qwen3-Embedding-0.6B,Jupyter直接调用 你是否试过为一个嵌入模型折腾环境、改配置、调端口,最后卡在API调用失败上?这次不用了。Qwen3-Embedding-0.6B 镜像已预置完整运行时,无需安装依赖、无需修改代码、无需手动加载…

作者头像 李华
网站建设 2026/2/23 15:18:09

NewBie-image-Exp0.1中小企业应用:低代码动漫生成平台搭建

NewBie-image-Exp0.1中小企业应用:低代码动漫生成平台搭建 你是不是也遇到过这样的问题:一家刚起步的动漫工作室,想快速产出角色设定图、分镜草稿或宣传海报,但请画师成本高、外包周期长、内部又没AI工程师?或者是一家…

作者头像 李华
网站建设 2026/2/23 13:31:42

unet image Face Fusion用户反馈收集?前端埋点设计与分析

unet image Face Fusion用户反馈收集?前端埋点设计与分析 1. 为什么需要为Face Fusion WebUI做用户行为埋点 你花了几周时间把unet image Face Fusion模型封装成一个开箱即用的WebUI,界面做了渐变标题、参数分组折叠、实时预览,连快捷键都配…

作者头像 李华