YOLO26 predict参数不会设?source/save详解教程
你是不是也遇到过这样的情况:刚拿到YOLO26官方镜像,打开detect.py准备跑推理,结果卡在model.predict()这一行——source到底填什么?save=True和save=False差别有多大?show开了却没窗口弹出来?别急,这篇教程不讲原理、不堆参数、不画架构图,就用最直白的话,带你把predict里最关键的四个参数彻底搞明白。
我们用的是最新发布的YOLO26官方训练与推理镜像,它不是魔改版,不是精简版,而是直接基于YOLO26官方代码库构建的完整环境。所有依赖都已预装,CUDA、PyTorch、OpenCV全配齐,连权重文件都提前下好了,你唯一要做的,就是把代码跑起来、把参数设对、把结果存下来。
1. 镜像环境说明
这个镜像不是“能用就行”的凑合版本,而是为工程落地专门打磨过的稳定组合。所有组件版本经过实测兼容,避免了你自己装环境时常见的“pip install完报错、conda update后崩掉”这类无效时间消耗。
- 核心框架:
pytorch == 1.10.0(专为YOLO26优化的稳定版本,比新版更少出奇奇怪怪的tensor shape错误) - CUDA版本:
12.1(匹配主流A10/A100显卡,启动快、显存占用稳) - Python版本:
3.9.5(兼顾新语法支持与旧库兼容性,不会因为一个:=海象运算符就让yaml加载失败) - 关键依赖:
torchvision==0.11.0,opencv-python,numpy,tqdm,pandas等一应俱全,连绘图用的matplotlib和统计用的seaborn都给你备好了——你不需要为画个PR曲线再折腾环境。
这个环境配置不是随便选的。比如
cudatoolkit=11.3看似和CUDA 12.1不一致,其实是PyTorch官方编译时绑定的运行时版本,强行升级反而会导致CUDA error: no kernel image is available。我们踩过坑,才敢说“开箱即用”。
2. 快速上手:从激活环境到第一张检测图
镜像启动后,界面看起来干干净净,但其实后台已经默默准备好了所有东西。接下来这几步,每一步都有明确目的,不是为了走流程,而是为了让你真正掌控整个过程。
2.1 激活环境与切换工作目录
镜像默认进入的是基础conda环境(比如torch25),但YOLO26需要的是独立隔离的yolo环境。这一步不能跳:
conda activate yolo为什么必须激活?因为ultralytics包只装在yolo环境里。不激活就直接跑python detect.py,你会看到熟悉的ModuleNotFoundError: No module named 'ultralytics'——不是代码错了,是环境没切对。
接着,把代码从系统盘复制到数据盘:
cp -r /root/ultralytics-8.4.2 /root/workspace/这步很多人忽略,但它决定了你后续能不能顺利修改代码。系统盘是只读挂载的,直接在/root/ultralytics-8.4.2里改detect.py,保存会失败;而/root/workspace/是可写数据盘,改完立刻生效。
最后进入工作目录:
cd /root/workspace/ultralytics-8.4.2到这里,你的操作台就绪了:环境对了、路径对了、权限也对了。
2.2 模型推理:predict四大参数逐个击破
现在看最关键的detect.py:
from ultralytics import YOLO if __name__ == '__main__': model = YOLO(model=r'yolo26n-pose.pt') model.predict(source=r'./ultralytics/assets/zidane.jpg', save=True, show=False)别被model.predict()这个函数名吓住,它就像一个智能快递柜——你只需要告诉它“收件人是谁(model)”、“寄什么(source)”、“要不要留底单(save)”、“要不要当面签收(show)”。下面拆开讲透:
2.2.1 model参数:不是路径,是“身份凭证”
model=r'yolo26n-pose.pt'这行里的.pt文件,不是普通模型文件,而是YOLO26的“能力身份证”。它里面不仅有网络权重,还自带模型结构定义(.yaml已内嵌)。所以你不用额外指定配置文件,也不用担心model.yaml和.pt不匹配。
正确用法:
model='yolo26n-pose.pt'(镜像里已预置,直接用)model='runs/train/exp/weights/best.pt'(你自己训练完的模型)
❌ 常见错误:
model='yolo26.yaml'(只有结构没有权重,会报KeyError: 'model')model='/wrong/path/model.pt'(路径错,报FileNotFoundError,但错误信息很隐晦,容易误判为代码问题)
2.2.2 source参数:输入源,远比你想的灵活
source=r'./ultralytics/assets/zidane.jpg'是最常被低估的参数。它不只接受图片路径,而是YOLO26的“万能输入口”,支持五种形态:
| 输入类型 | 写法示例 | 说明 |
|---|---|---|
| 单张图片 | 'zidane.jpg' | 相对路径或绝对路径均可 |
| 图片文件夹 | 'test_images/' | 自动遍历所有.jpg/.png/.jpeg文件 |
| 视频文件 | 'video.mp4' | 支持MP4、AVI、MOV等常见格式 |
| 摄像头 | 0或'0' | 调用默认摄像头(笔记本自带或USB摄像头) |
| RTSP流 | 'rtsp://admin:12345@192.168.1.64:554/stream1' | 工业场景直接接入IPC设备 |
注意:如果source是文件夹或视频,save=True时结果会自动按原文件名生成对应子文件夹或同名视频;如果是摄像头,save=True会持续录制带框的视频流(文件名带时间戳)。
2.2.3 save参数:存还是不存?这是个实际问题
save=True看似简单,但它决定的是“结果是否留下证据”。默认值是False,也就是说——YOLO26默认不保存任何结果,只在终端打印坐标和置信度。
这意味着:
- 如果你没设
save=True,跑完detect.py,屏幕一闪而过一堆数字,然后啥也没留下; - 如果你设了
save=True,结果会自动存到runs/detect/predict/(首次运行)或runs/detect/predict2/(第二次)等递增命名的文件夹里; - 存储内容包括:带检测框的图片/视频、
labels/文件夹里的txt标注文件(YOLO格式)、results.csv汇总表。
实用技巧:想批量处理100张图并保留所有结果?只要source='batch_test/'+save=True,30秒搞定,不用写循环。
2.2.4 show参数:显示≠弹窗,别被名字骗了
show=False的真实含义是:“不调用OpenCV的cv2.imshow()弹窗”。它和save完全独立——你可以show=True且save=False(只看不存),也可以show=False且save=True(只存不看),甚至show=False且save=False(纯后台计算,适合服务器无GUI环境)。
但要注意:show=True在无桌面环境(如纯命令行服务器)下会直接报错:
cv2.error: OpenCV(4.5.5) ... : error: (-215:Assertion failed)所以生产环境务必设show=False,开发调试时再打开。
安全写法:
import os show_flag = True if os.environ.get('DISPLAY') else False model.predict(source='zidane.jpg', save=True, show=show_flag)2.2.5 补充:其他高频实用参数
虽然标题聚焦source/save,但这两个参数常和另外三个“黄金搭档”一起出现:
conf=0.25:置信度阈值。设太低(如0.1)满屏小框;设太高(如0.7)可能漏检。日常用0.25~0.4之间平衡。iou=0.7:NMS交并比阈值。值越小,重叠框剔除越狠,适合密集小目标(如蚂蚁、芝麻粒)。device='0':指定GPU编号。多卡服务器必须显式指定,否则可能默认用CPU(慢10倍以上)。
3. 模型训练:data.yaml和train.py怎么配才不翻车
推理搞明白了,训练才是重头戏。YOLO26训练不难,但有三个地方最容易栽跟头:数据路径、配置文件、权重加载。
3.1 data.yaml:路径写错,训练直接“找不到家”
YOLO26要求数据集必须是标准YOLO格式:
dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yamldata.yaml内容必须严格对应:
train: ../dataset/images/train val: ../dataset/images/val nc: 3 names: ['person', 'car', 'dog']关键细节:
- 路径是相对路径,以
data.yaml所在位置为起点; train和val指向images文件夹,不是labels;nc(number of classes)必须和names列表长度一致,否则训练中途报错IndexError: index out of range。
3.2 train.py:预训练权重加载的两种姿势
你看到的代码里有这行:
model.load('yolo26n.pt')这不是必须的,而是“选择题”:
- 做迁移学习(比如你数据少,想借官方权重加速收敛)→ 保留这行;
- ❌做消融实验或从头训(比如验证某个模块改进效果)→ 注释掉这行,让YOLO26自动初始化权重。
另外注意:model.train()里的project和name共同决定输出路径。project='runs/train'+name='exp'→ 结果存到runs/train/exp/。下次再训,改成name='exp_v2',就不会覆盖上次结果。
4. 权重文件与下载:镜像里已备好,用前先确认
镜像启动后,进/root/workspace/ultralytics-8.4.2/目录,你会看到这些预置权重:
yolo26n.pt:轻量级通用检测模型(适合边缘设备)yolo26n-pose.pt:带姿态估计的版本(识别人体关键点)yolo26s.pt:速度与精度平衡版yolo26m.pt:中等规模,适合大多数业务场景
它们不是链接,是真实文件,大小从15MB到120MB不等。使用前建议先校验MD5:
md5sum yolo26n-pose.pt # 应该返回:a1b2c3d4e5f6...(官方发布页可查)训练完的模型默认存在runs/train/exp/weights/best.pt,下载时推荐用Xftp:
- 右侧远程服务器 → 左侧本地电脑:拖拽即下载;
- 文件双击:单文件快速传输;
- 大文件(如完整
runs/文件夹)先压缩成.zip再传,节省70%以上时间。
5. 常见问题直击:那些没人明说但你一定遇到的坑
Q:
source=0没画面,终端卡住不动?
A:检查摄像头是否被其他程序占用(如Zoom、Teams),执行lsof /dev/video0查看。或者换source=1试试第二个摄像头。Q:
save=True但runs/detect/里啥都没有?
A:先确认source路径是否真实存在(ls ./ultralytics/assets/看看有没有zidane.jpg);再检查磁盘空间(df -h),/root分区满会导致静默失败。Q:训练时提示
CUDA out of memory?
A:不是显存真不够,而是batch=128太大。改成batch=64或32,配合workers=4,基本能跑通A10。Q:
model.predict()报错AttributeError: 'NoneType' object has no attribute 'shape'?
A:source路径错导致图片读取失败,返回None。加一行调试:import cv2 img = cv2.imread('zidane.jpg') print("Image loaded:", img is not None) # 必须打印True
6. 总结:predict参数的本质,是控制“输入-处理-输出”三环节
回看开头那个让人纠结的model.predict(),它从来就不是黑盒。source是入口,决定喂给模型什么;save是出口,决定结果是否留存;show是观察窗,决定是否实时反馈;model是处理器,决定用什么能力干活。
你不需要记住所有参数,只要抓住这四点:
source填对路径或设备号,就能喂进去;save=True,结果就落盘,不怕丢失;show按需开关,开发开、生产关;model用镜像预置的.pt,省心又可靠。
YOLO26不是越复杂越好,而是越简单越能落地。当你不再纠结“参数怎么设”,而是专注“我要解决什么问题”,才算真正入门。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。