要是你刚接触深度学习,第一次听说YOLO26,那我猜你多半是刷到了某个训练实况或者榜单截图,然后兴冲冲地想在本地亲手复现一把。结果呢?大概率卡在环境搭建这关:Python装了好几遍,CUDA版本算不清楚,好不容易把包装上去了,一跑又报“找不到设备”。别问我怎么知道的,我当年搭YOLOv5环境时就走过一整圈弯路。YOLO26这代对依赖版本的要求更细,环境问题更得一次性捋清楚。
这篇教程是我最近在一台新机器上从零搭建YOLO26环境的全记录,直接按实际动手顺序来:版本选择、虚拟环境、PyTorch安装、首次推理、训练自定义数据集,最后附上我踩过的坑和排错思路。不管你是Windows还是Linux,有显卡还是没显卡,照着这套流程基本都能跑通。我尽量把每个操作背后的原因也讲明白,这样你遇到新问题的时候,自己也能推断出该往哪个方向查。
1. 环境搭建的核心是版本匹配,不是“装最新”
很多新手最容易犯的错,就是把所有东西都装到最新版,然后面对一堆兼容性报错一脸懵。YOLO26环境搭建这件事,本质上是让操作系统、显卡驱动、Python、PyTorch、Ultralytics这五层东西互相匹配。任何一层脱节,整体就跑不起来。
1.1 先定 Python 版本再谈其他
YOLO26依托Ultralytics框架运行,这个框架对Python版本有一个明确的区间要求。实测下来,Python 3.10是最省心的选择,3.8到3.11也都兼容,但3.12在某些系统上会和旧版PyTorch出现链接问题,3.13目前太新,很多依赖还没完全跟上。
| Python 版本 | 兼容性 | 推荐度 |
|---|---|---|
| 3.8 | 可用,但部分新版依赖已放弃支持 | 不推荐 |
| 3.9 | 可用 | 可以 |
| 3.10 | 最稳定 | 强烈推荐 |
| 3.11 | 可用 | 推荐 |
| 3.12 | 部分场景有依赖问题 | 谨慎 |
| 3.13 | 兼容风险较高 | 暂不推荐 |
这里有个容易忽略的点:YOLO26环境不光有ultralytics这一个包,背后还有torch、torchvision、opencv-python、numpy、pandas、matplotlib这一串依赖。numpy和torch对Python版本的支持节奏并不完全同步,你选一个太新的Python版本,很可能导致某个关键依赖装不上。
1.2 CUDA、cuDNN 和 PyTorch 到底谁依赖谁
很多教程把CUDA说得很玄乎,其实你可以这么理解:CUDA是NVIDIA显卡的并行计算平台,PyTorch通过调用CUDA来让显卡执行张量运算。cuDNN是CUDA之上的深度神经网络加速库,PyTorch内部用它来加速卷积等操作。
关键认知在于:**PyTorch的GPU版本自带CUDA运行库和cuDNN,不需要你单独安装完整的CUDA Toolkit。**但你的NVIDIA驱动版本必须足够新,能够支持PyTorch对应版本所用的CUDA运行库。
怎么判断?打开命令行执行nvidia-smi,输出最上方会显示显卡驱动版本,右上角会显示这个驱动支持的最高CUDA版本。比如驱动显示“CUDA Version: 12.1”,代表它可以支持CUDA 12.1及以下的所有版本。
你不需要让“驱动支持的最高CUDA版本”和“PyTorch用的CUDA版本”完全一致,只需要让前者大于等于后者。这一点搞明白,你就不会再去折腾那个4GB多的大块头CUDA Toolkit安装包了。
1.3 我在实测中推荐的版本组合
这套组合我在NVIDIA RTX 3060、RTX 4090、纯CPU的老笔记本上都验证过,稳定性和训练速度都能兼顾。
| 组件 | 推荐配置 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11 或 Ubuntu 20.04/22.04 | Ubuntu环境更省心,Windows也完全可以 |
| NVIDIA驱动 | 530系列或更高 | 至少支持CUDA 12.1 |
| Python | 3.10.x | 兼容性和依赖生态最稳 |
| CUDA运行时 | 由PyTorch自带 | 无需单独安装Toolkit |
| PyTorch | 2.1.0及以上 | 建议走CUDA 12.1版本渠道 |
| Ultralytics | 8.3.x | 使用pip安装最新稳定版 |
如果你手头根本没有NVIDIA独显,也不用慌,PyTorch的CPU版本照样能跑YOLO26,只是训练速度慢不少。后面第3部分我会单聊纯CPU场景的取舍。
2. 动手安装:从虚拟环境到 ultralytics 包全流程
版本组合定好之后,安装流程就简单多了。我强烈建议你不要直接把包装进系统默认的Python环境,否则两三个项目下来,依赖冲突能把人逼疯。
2.1 用 conda 建一个独立的 YOLO26 环境
第一步先安装Anaconda或Miniconda。Miniconda更轻量,够用就行,官网下载安装包后一路默认即可。装好后打开终端(Windows用户建议用Anaconda Prompt),执行:
conda create -n yolo26 python=3.10 -y conda activate yolo26这两条命令做了什么?第一条创建了一个名为yolo26的独立环境,并指定Python 3.10;第二条把当前终端切换到该环境。之后你在终端看到(yolo26)前缀,就说明已经进来了。
为什么一定要这一步?因为YOLO26及其依赖会安装大量第三方包,如果直接放进系统Python环境,很可能和已有的包版本冲突。比如你原本在做自然语言处理,装了特定版本的numpy,而YOLO26要求另一个numpy版本,两者互相覆盖,最后两个项目都跑不了。conda独立环境相当于给每个项目准备了单独的小房间,互不打扰。
2.2 PyTorch 安装:一条命令里藏着的坑
激活环境后,先确认一下当前是CPU环境还是GPU环境。有NVIDIA独显并安装了驱动的情况下,建议走GPU渠道:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121如果你使用的是老版本驱动,只支持CUDA 11.8,那么可以换成cu118:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118没有NVIDIA显卡的用户,直接执行:
pip install torch torchvision torchaudio这里多说一句为什么是PyTorch仓库而不是PyPI默认源。PyTorch官方把GPU版本发布在自己的索引源上,如果你直接用pip install torch,默认装到的往往是CPU版本,显卡等于白瞎了。这个问题在Windows用户里尤其常见。
安装完成后,第一时间验证GPU是否可用。在Python交互环境里执行:
import torch print(torch.__version__) print(torch.cuda.is_available())如果输出True,说明显卡已经被PyTorch正确识别,环境搭建最核心的一环已经通过。如果输出False,请检查是否安装的是CPU版本,或者显卡驱动是否有问题。
2.3 安装 ultralytics 并验证基础依赖
PyTorch就绪后,剩下就很简单了:
pip install ultralytics执行完成后,输入yolo命令,如果出现ultralytics的帮助提示,说明CLI工具正常可用。这个包会把推理、训练、导出所需的全部依赖自动装齐,包括opencv-python、pandas、matplotlib等。
这里有个细节:pip install ultralytics会自动匹配机器现有环境,如果检测到合适的torch就不重复安装,但如果你前面跳过了torch安装,它也会自动补上。不过自动补上的torch往往是默认源里的CPU版,所以我建议还是先手动装好PyTorch,再装ultralytics,这样你能明确掌控整个环境。
3. 第一次推理:让 YOLO26 真正跑起来
环境装完后,别急着上训练,先跑一次推理。这一步能快速暴露绝大部分环境问题,而且边际成本最低。
3.1 最小推理代码与结果解析
在yolo26环境里创建一个test_infer.py文件,内容如下:
from ultralytics import YOLO # 使用 YOLO26 nano 模型,首次执行会自动下载权重 model = YOLO("yolo26n.pt") # 直接用官方示例图片做测试 results = model.predict( source="https://ultralytics.com/images/bus.jpg", save=True, conf=0.25, ) # 输出检测框坐标 boxes = results[0].boxes if boxes is not None: print("检测到目标数量:", len(boxes)) print("坐标信息:", boxes.xyxy[:2])执行:
python test_infer.py如果一切正常,你会在runs/detect/predict/目录下看到带检测框的结果图片,终端打印出检测到的人数、车的数量等。这张图的意义不只是“跑通了”,更代表从数据加载、模型加载到前向推理的整条链路全部打通。
yolo26n.pt是YOLO26系列的nano版本,尺寸最小、速度最快。其他尺寸包括s、m、l、x,分别对应从小到大。首次执行会联网下载权重文件,网络环境正常的话几秒就完成。
3.2 首次运行最常见的三个报错
我自己在不同机器上测试过,以下几个报错出现频率最高:
| 报错信息 | 根本原因 | 解决方案 |
|---|---|---|
ModuleNotFoundError: No module named 'torch' | 没有安装PyTorch或环境未激活 | 先执行conda activate yolo26 |
AssertionError: CUDA unavailable | 显卡驱动过旧或装成了CPU版 | 用nvidia-smi查驱动,重新安装匹配的GPU版PyTorch |
ImportError: libGL.so.1: cannot open shared object file | Linux下OpenCV缺少系统图形库 | sudo apt update && sudo apt install libgl1 libglib2.0-0 -y |
第三个报错在Ubuntu服务器上尤其常见。OpenCV依赖系统的图形接口库,但轻量的服务器版系统默认不装这些库,遇到时直接装就行,别去重装opencv-python,那样往往更麻烦。
3.3 没有独立显卡的 CPU 推理方案
纯CPU环境也能跑YOLO26,但速度和GPU比有明显差距。我用一台i7-12700H处理器的老笔记本测过,对640x640的输入图像做一次推理大约需要600到1500毫秒,而GPU上只需几毫秒。如果你只是验证模型效果或者做少量图片推理,这个速度完全能接受。
代码和GPU版本基本一致,只要在predict参数里显式指定设备:
results = model.predict(source="bus.jpg", device="cpu")如果你明确自己只有CPU,却在等待时发现速度异常慢,可以关注一下是否触发了OpenMP线程数限制。设置一下环境变量能让多核CPU利用率明显提升:
export OMP_NUM_THREADS=8不过归根结底,CPU只适合学习验证和轻量推理,真正做训练,还是建议想办法搞一块显卡。
4. 从推理到训练:自定义数据集才是环境的真正考验
推理跑通只是幼儿园阶段,环境是不是真的稳,得丢一个自定义数据集进去训练才知道。训练过程中的显存分配、数据加载、算子兼容性,都会直接考验你环境配置的完整性。
4.1 YOLO 格式数据集与 data.yaml
先准备数据集。YOLO格式标注的核心是:图片和对应的txt标注文件放在各自目录下,每行标注代表一个目标,格式为类别id x_center y_center width height,后四个值都是归一化后的0到1之间的小数。
目录结构推荐这样做:
dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yamldata.yaml是数据集的配置文件,内容大概这样:
path: dataset train: images/train val: images/val nc: 2 names: ['cat', 'dog']其中path是相对于当前工作目录的路径,nc是类别总数,names是类别名称列表。位置信息用的是相对路径,这样整个数据集目录可以随意挪动,只要path改成正确的相对位置就行。
如果你已经有标注好的COCO格式或其他格式数据,可以用ultralytics自带的转换工具或脚本转成YOLO格式。这一步的错误率很高,建议转换后随机抽查几张图片,确认标注框在目标上。
4.2 训练命令和显存的关系
数据集准备好后,执行训练命令:
yolo detect train \ data=data.yaml \ model=yolo26n.pt \ epochs=100 \ imgsz=640 \ batch=8这里的四个关键参数,基本决定了你的显卡能不能扛住训练:
| 参数 | 作用 | 显存不足时的对策 |
|---|---|---|
imgsz | 输入图像尺寸 | 从640降到512或416,显存压力骤减 |
batch | 每次迭代处理图片数 | 从8降到4或2 |
model | 模型复杂度 | nano占用最少,x最大 |
epochs | 训练轮数 | 和显存无关,和训练时长有关 |
Ultralytics框架在指定batch=-1时能自动探测合适的batch大小,新手可以直接用:
yolo detect train data=data.yaml model=yolo26n.pt epochs=100 imgsz=640 batch=-1但别完全依赖它。自动探测逻辑相对保守,有时候给出来的batch太小,导致训练速度偏慢。先让它自动跑一次,观察显存占用情况,再手动调整。
如果训练过程中报CUDA out of memory,不要慌。优先把batch降到4,imgsz降到512,这两个操作能解决绝大部分OOM问题。如果还不行,试试model=yolo26s.pt换更小的预训练模型。
还有一个容易忽略的点:workers参数控制数据加载的进程数。Windows下设置过大容易引发多进程加载报错,常规建议是设成0或2:
yolo detect train data=data.yaml model=yolo26n.pt epochs=100 imgsz=640 workers=24.3 验证训练结果并找到权重文件
训练完成后,结果保存在runs/detect/train/目录下。你可以看到weights/best.pt和weights/last.pt两个权重文件。best.pt是验证集上表现最好的模型,last.pt是最后一轮结束时的模型。绝大多数实际使用场景,直接拿best.pt就行。
验证一下训练出的模型效果:
from ultralytics import YOLO best_model = YOLO("runs/detect/train/weights/best.pt") results = best_model.predict(source="test_image.jpg", save=True, conf=0.25)这一步能同时检验训练权重是否完整、推理链路是否正常、类别映射是否正确。如果你在results[0].names里看到的类别和数据集定义不一致,回头检查data.yaml的names顺序,YOLO格式标注里类别id是和names列表索引一一对应的。
5. 环境出问题时的排错思路和自保手段
训练跑通了不代表以后就不会出问题。深度学习环境本质上是无数个版本约束的叠加,任何一个变动都可能牵一发动全身。我把自己常用的排错思路和环境管理习惯分享出来,遇到问题能少走很多弯路。
5.1 一个典型报错的完整排查链路
某次我在Ubuntu服务器上重装YOLO26环境,首次推理时报了个AttributeError: 'NoneType' object has no attribute 'shape'。乍一看像代码问题,实际排查后发现是多层因素叠加导致的。
我的排查链路是这样的:先检查模型文件是否完整,确认没问题后检查输入图片是否能正常读取,用cv2.imread测了一下发现返回None,说明OpenCV读图失败。继续往下查,发现是Python的OpenCV版本和numpy版本不兼容,读图时直接静默返回空对象。
最终解决办法是固定兼容版本:
pip install numpy==1.26.4 opencv-python==4.9.0.80这种问题最坑的地方在于:它不直接报“版本冲突”,而是报一个看起来毫无关联的NoneType错误。所以我总结出一个原则:**推理或训练链路中出现的奇怪报错,先检查依赖版本,再怀疑代码逻辑。**用pip list查一遍版本组合,比逐行读代码有效得多。
5.2 锁版本:环境复现的关键习惯
很多人习惯pip install ultralytics装完就跑,等项目过几个月要重新部署到另一台机器时,发现怎么都复现不了。原因很简单:你当时装的是当时的最新版,几个月后升级的新版本可能改变了接口行为。
我现在的做法是,每次环境跑通后立刻生成一份依赖清单:
pip freeze > requirements.txt这份文件记录了当前环境所有包及其精确版本。换机器时一条命令复现:
pip install -r requirements.txtconda环境下还可以导出完整的创建信息:
conda env export > environment.yml之后用conda env create -f environment.yml恢复整个环境。不过这个文件包含包管理器的具体版本,跨操作系统可能会有小范围不适配,需要留意。
5.3 多环境切换和磁盘清理的实用经验
环境用久了,conda里会积攒一堆用不到的包,占用几十GB磁盘空间。当你切换到某个环境报No space left on device时,先看看是不是环境目录爆了。几个常用命令:
conda env list conda remove -n unused_env --all conda clean -a -yconda clean能清理所有缓存安装包,腾出大量空间且不影响已有环境。
如果你同时维护多个深度学习项目,建议为每个项目建独立环境,并明确在项目根目录放一个README.md,记录环境名称、Python版本、关键依赖版本和复现命令。这个习惯能让你半年后再看这个项目时完全不卡壳。