第2章:YOLOv8环境搭建——从零跑通第一个训练脚本

说实话,环境配置这件事,看着简单,但坑是真不少。我带过不少新人,十有八九第一周都卡在「装完跑不起来」这个环节上。我自己也翻过车——有次给一台新服务器配环境,折腾了整整一个下午,最后发现是CUDA和PyTorch版本没对齐。

所以这一章,咱们把每一步都走扎实。你跟着我的习惯来,基本能一次过。

2.1 PyTorch与CUDA环境配置

先搞清楚一件事:YOLOv8依赖PyTorch,而PyTorch需要CUDA来调用GPU。版本匹配是重中之重。

⚠️ 版本对齐警告

我曾经见过有人装了CUDA 12.0,却配了PyTorch 1.10——结果就是GPU根本用不了。记住:PyTorch版本必须与CUDA驱动版本兼容。

2.1.1 检查硬件与驱动

打开终端,先看看你的显卡和驱动情况:

# 查看显卡型号
nvidia-smi

# 查看CUDA驱动版本(注意是驱动版本,不是toolkit版本)
nvidia-smi | grep "CUDA Version"

输出里会显示类似 CUDA Version: 12.1 这样的信息。这个数字决定了你能装什么版本的PyTorch。

💡 我的建议

别追最新版。CUDA 11.8 + PyTorch 2.0.1 这个组合,我用了大半年,稳得很。最新版往往有兼容性问题,等社区踩完坑再升级不迟。

2.1.2 安装PyTorch

去PyTorch官网(pytorch.org)找到对应的安装命令。以CUDA 11.8为例:

# 创建虚拟环境(强烈推荐)
conda create -n yolov8 python=3.9 -y
conda activate yolov8

# 安装PyTorch(CUDA 11.8版本)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118

装完之后,验证一下:

python -c "import torch; print(torch.cuda.is_available())"

如果输出 True,恭喜你,环境通了。

🔑 关键检查点

如果输出 False,别慌。八成是CUDA版本不对,或者PyTorch装成了CPU版。用 pip list | grep torch 看看版本号里有没有 cu118 字样。

2.2 YOLOv8源码下载与安装

环境配好了,接下来把YOLOv8拉下来。我个人习惯用官方源码,而不是pip包——因为后面做剪枝量化时,需要改源码里的算子。

2.2.1 克隆仓库

git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics

记得切到稳定版本:

git checkout v8.0.0  # 或者你想要的版本

2.2.2 安装依赖

pip install -r requirements.txt
pip install -e .  # 开发者模式安装

-e 参数的意思是「可编辑安装」。你改了源码,不需要重新安装就能生效。后面做剪枝时,这个特性会省很多事。

💡 避坑指南

我曾经直接用 pip install ultralytics 装包,结果想改源码时发现根本找不到文件位置。用 -e 安装,源码就在你克隆的目录里,随便改。

2.3 数据集准备与标注格式解析

YOLOv8用的是标准COCO格式的变体。说白了,就是一张图片配一个同名的txt文件,里面每行是一个目标。

2.3.1 数据集目录结构

我习惯这样组织数据:

datasets/
├── images/
│   ├── train/    # 训练图片
│   └── val/      # 验证图片
├── labels/
│   ├── train/    # 训练标注
│   └── val/      # 验证标注
└── data.yaml     # 数据集配置文件

2.3.2 标注格式详解

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

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

注意:坐标都是归一化的(0~1之间),相对于图片宽高。

举个例子,一张640×480的图片里,有一个目标中心在(320, 240),宽高为(64, 48):

0 0.5 0.5 0.1 0.1
📊 标注格式对比
格式 坐标表示 归一化 YOLOv8支持
YOLO格式 中心点+宽高 是 ✅ 原生支持
COCO JSON 左上角+宽高 否 ✅ 需转换
VOC XML 左上角+右下角 否 ✅ 需转换

2.3.3 data.yaml配置文件

这个文件告诉YOLOv8你的数据在哪、有几类:

train: ./datasets/images/train
val: ./datasets/images/val

nc: 2  # 类别数量
names: ['cat', 'dog']  # 类别名称
⚠️ 路径陷阱

路径用相对路径时,YOLOv8是相对于你执行训练命令的目录来解析的。我吃过这个亏——明明数据在,就是报找不到文件。后来统一用路径,再没出过问题。

2.4 第一个训练脚本

环境有了,数据有了,该跑起来了。YOLOv8的训练接口非常简洁,几行代码就能搞定。

2.4.1 使用命令行训练

最简单的启动方式:

yolo train model=yolov8n.pt data=./datasets/data.yaml epochs=100 imgsz=640 batch=16

参数说明:

  • model:预训练权重,可选 yolov8n.pt(轻量)、yolov8s.pt(小)、yolov8m.pt(中等)
  • data:数据集配置文件路径
  • epochs:训练轮数
  • imgsz:输入图片尺寸
  • batch:批次大小,根据显存调整

2.4.2 使用Python脚本训练

我个人更喜欢用脚本,方便调参和记录:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')

# 开始训练
results = model.train(
    data='./datasets/data.yaml',
    epochs=100,
    imgsz=640,
    batch=16,
    device='0',  # 指定GPU编号
    workers=4,   # 数据加载线程数
    lr0=0.01,    # 初始学习率
    augment=True # 开启数据增强
)

# 训练完成后自动保存权重到 runs/train/exp/weights/
💡 显存不够怎么办?

如果你显存只有4GB,把 batch 降到8,imgsz 降到416。我曾在GTX 1650(4GB)上跑过,batch=8、imgsz=416,虽然慢点,但能跑完。

2.5 本章知识体系总览

下面这张图,把整个环境搭建的流程串起来了。你照着这个顺序走,基本不会迷路。

YOLOv8 环境搭建完整流程 ① 检查硬件与驱动 nvidia-smi → 确认CUDA版本 ② 安装PyTorch pip install torch==2.0.1+cu118 ③ 下载YOLOv8源码 git clone + pip install -e . ④ 准备数据集 images/ + labels/ + data.yaml ⑤ 启动训练 yolo train model=yolov8n.pt ... ⑥ 验证结果 ⚠️ 常见问题 • CUDA版本不匹配 • PyTorch装成CPU版 • 数据集路径错误 💡 我的推荐 • CUDA 11.8 • PyTorch 2.0.1 • Python 3.9

嗯,到这里,你的YOLOv8环境就彻底搭好了。数据集也准备好了,第一个训练脚本也跑通了。后面几章,我们会在这个基础上,开始做精度优化和模型压缩——那才是真正有意思的部分。