2、环境搭建与工程准备:Ubuntu + CUDA + CUDNN环境配置、PyTorch与TorchVision安装、YOLOv10源码下载与依赖安装、数据集准备(COCO格式说明)

说实话,搞深度学习环境配置这件事,我踩过的坑比写过的代码还多。记得刚入行那会儿,配个CUDA能折腾一整天,最后发现是驱动版本不对。嗯,这节课咱们就把这些坑提前填上,让你能顺顺利利跑起YOLOv10。

2.1 Ubuntu系统基础环境

我个人习惯用Ubuntu 20.04或22.04 LTS。为什么?因为生态最成熟,遇到问题随便一搜就有答案。你非要用18.04也行,但有些新库可能不支持了。

装好系统后,第一件事就是更新软件源:

sudo apt update
sudo apt upgrade -y
sudo apt install build-essential cmake git wget curl -y

这几个基础工具缺一不可。build-essential包含了gcc/g++编译器,cmake是编译必备,git用来拉代码。我在项目里遇到过有人没装build-essential直接装PyTorch,结果编译报错一脸懵——其实就是缺了编译器。

2.2 CUDA与CUDNN安装

这是整个环境里最容易出问题的环节。我建议你装之前先确认一下显卡型号:

lspci | grep -i nvidia

然后去NVIDIA官网查一下你的显卡支持哪个CUDA版本。YOLOv10官方推荐CUDA 11.8,我个人也推荐这个版本,兼容性最好。

⚠️ 重要提醒: 不要装最新的CUDA 12.x!很多第三方库还没适配,你会遇到各种奇奇怪怪的链接错误。我曾经为了尝鲜装CUDA 12.0,结果torchvision死活编译不过,最后乖乖退回11.8。

安装步骤:

  1. 下载CUDA 11.8 runfile(别用deb包,runfile更可控)
  2. 执行安装,不要装驱动(系统自带的NVIDIA驱动就够了)
  3. 配置环境变量
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent --override

# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

验证安装:

nvcc --version
# 应该输出 Cuda compilation tools, release 11.8

CUDNN就简单多了,下载对应CUDA 11.8的deb包,或者直接复制文件:

sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11-archive/include/cudnn*.h /usr/local/cuda-11.8/include/
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64/
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

2.3 PyTorch与TorchVision安装

这里有个小技巧:用pip安装时一定要指定版本号,不要装latest。YOLOv10官方推荐PyTorch 2.0.1 + torchvision 0.15.2:

pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
💡 我的经验: 建议用conda创建独立环境,别把包装到base里。我习惯这样:
conda create -n yolov10 python=3.10
conda activate yolov10
pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cu118
这样就算环境搞坏了,删掉重来也就一分钟的事。

验证PyTorch能否调用GPU:

python -c "import torch; print(torch.cuda.is_available()); print(torch.__version__)"
# 输出 True 和 2.0.1 就对了

2.4 YOLOv10源码下载与依赖安装

从GitHub拉代码:

git clone https://github.com/THU-MIG/yolov10.git
cd yolov10

安装依赖:

pip install -r requirements.txt

requirements.txt里包含了ultralytics、opencv-python、matplotlib这些常用库。不过我发现有时候会漏掉一些包,建议再手动补几个:

pip install seaborn thop pycocotools

pycocotools这个库特别重要,后面评估模型全靠它。我在Windows上装这个库踩过坑,Linux下倒是很顺利。

2.5 数据集准备与COCO格式说明

YOLOv10默认使用COCO数据集格式。说白了,就是每张图片配一个同名的txt标注文件。咱们来看看具体长什么样:

文件 说明 示例
images/train/ 训练图片 000000000139.jpg
labels/train/ 训练标注 000000000139.txt
images/val/ 验证图片 000000000285.jpg
labels/val/ 验证标注 000000000285.txt

每个txt文件里,一行代表一个目标,格式是:

<class_id> <x_center> <y_center> <width> <height>

注意!这里的坐标都是归一化到[0,1]的。x_center和y_center是目标中心点相对于图片宽高的比例,width和height是目标宽高相对于图片宽高的比例。

举个例子,一张640x480的图片里,有个目标中心在(320, 240),宽160,高120,类别是0:

0 0.5 0.5 0.25 0.25

为什么会用归一化坐标?说白了就是为了适配不同分辨率的图片。你训练时用640x640,部署时用1280x1280,标注文件不用改,模型自己会处理。

📁 数据集目录结构(完整版):
datasets/
└── coco/
    ├── images/
    │   ├── train2017/    # 118287张训练图
    │   └── val2017/      # 5000张验证图
    ├── labels/
    │   ├── train2017/    # 对应的标注文件
    │   └── val2017/
    └── train2017.txt     # 训练集图片路径列表
    └── val2017.txt       # 验证集图片路径列表

如果你要用自己的数据集,需要写个脚本把标注转成这个格式。我一般用Python的json库解析原始标注,然后逐行写入txt。这里有个坑:类别ID必须从0开始连续编号,不能跳号。我曾经有个数据集类别是[0, 2, 5],结果训练时loss直接炸了——YOLO的类别索引是连续的,跳号会导致维度不匹配。

2.6 环境验证:跑个demo试试

装完所有东西,咱们跑个推理验证一下:

# 下载预训练权重
wget https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt

# 跑推理
python detect.py --weights yolov10n.pt --source data/images/bus.jpg

如果能看到检测结果输出,恭喜你,环境搭建成功了!

💡 避坑指南: 如果报错说缺少某个so文件,别慌。先试试 ldconfig 刷新库缓存,不行再手动指定LD_LIBRARY_PATH。我曾经被libcudart.so.11.0找不到这个问题卡了半小时,最后发现是CUDNN路径没配对。

好了,环境搭好了,下一节咱们就开始研究YOLOv10的网络结构了。说实话,这部分才是真正有意思的地方。

YOLOv10 环境搭建流程总览 ① Ubuntu 系统准备 ② CUDA 11.8 + CUDNN 8.9 ③ PyTorch 2.0.1 + TorchVision ④ YOLOv10 源码 + 依赖 ⑤ COCO格式数据集准备 ⚠️ 常见坑点 • CUDA版本别追新 • 用conda隔离环境 • 类别ID必须从0开始 • 坐标要归一化到[0,1] ✅ 跑demo验证