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