1. 环境准备与基础配置

在Ubuntu系统上搭建YOLO训练环境需要先完成基础依赖的安装。我推荐使用Python虚拟环境来隔离项目依赖,避免与系统Python环境产生冲突。

1.1 系统依赖安装

首先更新系统包管理器并安装基础工具:

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv git wget unzip

注意:建议在干净的Ubuntu 20.04/22.04 LTS系统上进行操作,避免因系统版本差异导致依赖冲突

1.2 创建虚拟环境

为YOLO项目创建专用虚拟环境:

mkdir -p ~/yolo_projects && cd ~/yolo_projects
python3 -m venv yolov8_env
source yolov8_env/bin/activate

激活虚拟环境后,终端提示符前会出现 (yolov8_env) 标识。建议将以下命令添加到 ~/.bashrc 中方便后续使用:

echo "alias yoloenv='source ~/yolo_projects/yolov8_env/bin/activate'" >> ~/.bashrc
source ~/.bashrc

1.3 安装Ultralytics YOLOv8

使用清华镜像源加速安装:

pip install ultralytics --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple

验证安装是否成功:

python -c "from ultralytics import YOLO; print(YOLO('yolov8n.pt'))"

2. 数据集准备与标注

2.1 数据集目录结构

规范的目录结构对后续训练至关重要,建议采用以下结构:

my_dataset/
├── images/
│   ├── train/    # 训练集图片
│   └── val/      # 验证集图片
└── labels/
    ├── train/    # 训练集标签
    └── val/      # 验证集标签

2.2 使用LabelImg进行标注

由于最新版LabelImg可能存在兼容性问题,建议使用Python 3.9环境:

sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.9 python3.9-venv

创建标注专用环境:

python3.9 -m venv ~/labelimg_env
source ~/labelimg_env/bin/activate
pip install labelImg==1.8.6 pyqt5==5.15.7

启动LabelImg:

labelImg

标注时注意:

  1. 使用YOLO格式输出
  2. 类别名称使用英文小写
  3. 每个图片对应一个同名的.txt标签文件

2.3 数据集划分脚本

当数据集较大时,手动划分训练/验证集会比较耗时。可以使用以下Python脚本自动划分:

import os
import random
import shutil
from tqdm import tqdm

def split_dataset(image_dir, label_dir, val_ratio=0.2, seed=42):
    random.seed(seed)
    images = [f for f in os.listdir(image_dir) if f.endswith(('.jpg','.png','.jpeg'))]
    val_size = int(len(images) * val_ratio)
    val_samples = random.sample(images, val_size)
    
    os.makedirs(os.path.join(image_dir, '../val'), exist_ok=True)
    os.makedirs(os.path.join(label_dir, '../val'), exist_ok=True)
    
    for img in tqdm(val_samples):
        # 移动图片
        src_img = os.path.join(image_dir, img)
        dst_img = os.path.join(image_dir, '../val', img)
        shutil.move(src_img, dst_img)
        
        # 移动标签
        label_file = os.path.splitext(img)[0] + '.txt'
        src_label = os.path.join(label_dir, label_file)
        if os.path.exists(src_label):
            dst_label = os.path.join(label_dir, '../val', label_file)
            shutil.move(src_label, dst_label)

3. 模型训练实战

3.1 准备配置文件

创建 dataset.yaml 配置文件:

path: /path/to/your/dataset
train: images/train
val: images/val
test:  # 可选测试集路径

# 类别信息
names:
  0: person
  1: car
  2: dog
  3: cat

3.2 基础训练命令

使用预训练模型开始训练:

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

关键参数说明:

  • imgsz : 输入图像尺寸,建议保持640x640
  • batch : 批大小,根据GPU显存调整
  • epochs : 训练轮次,简单数据集100-300轮足够
  • device : 指定使用CPU( cpu )或GPU( 0 )

3.3 高级训练配置

创建自定义训练脚本 custom_train.py :

from ultralytics import YOLO

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

results = model.train(
    data='dataset.yaml',
    epochs=300,
    patience=50,  # 早停轮次
    batch=32,
    imgsz=640,
    device='0',  # 使用第一块GPU
    workers=8,   # 数据加载线程数
    optimizer='AdamW',
    lr0=0.001,
    weight_decay=0.0005,
    hsv_h=0.015,  # 图像增强参数
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=10.0,
    translate=0.1,
    scale=0.5,
    shear=2.0,
    perspective=0.0001,
    flipud=0.5,
    fliplr=0.5,
    mosaic=1.0,
    mixup=0.1,
    copy_paste=0.1,
    name='custom_exp'
)

4. 模型评估与优化

4.1 评估指标解读

训练完成后,在 runs/detect/train/ 目录下会生成以下关键文件:

  • results.png : 训练过程指标可视化
  • confusion_matrix.png : 混淆矩阵
  • val_batchX_labels.jpg : 验证集预测示例

重点关注以下指标:

  1. mAP@0.5 (PASCAL VOC标准)
  2. mAP@0.5:0.95 (COCO标准)
  3. Precision-Recall曲线
  4. 各类别的F1分数

4.2 模型导出与优化

将训练好的模型导出为不同格式:

yolo export model=runs/train/exp/weights/best.pt format=onnx  # ONNX格式
yolo export model=runs/train/exp/weights/best.pt format=tflite  # TFLite格式

对于边缘设备部署,建议进行量化:

from ultralytics import YOLO

model = YOLO('runs/train/exp/weights/best.pt')
model.export(format='onnx', dynamic=True, simplify=True, opset=12)  # 动态量化

5. 常见问题排查

5.1 训练问题速查表

问题现象 可能原因 解决方案
CUDA out of memory 批大小过大 减小batch参数
NaN损失值 学习率过高 降低lr0参数
mAP不提升 数据标注质量差 检查标签文件
训练速度慢 CPU瓶颈 增加workers参数

5.2 性能优化技巧

  1. 混合精度训练 :添加 amp=True 参数可加速训练
  2. 数据加载优化 :使用 cache=ram/disk 参数缓存数据集
  3. 早停机制 :设置 patience=50 避免过拟合
  4. 学习率调度 :尝试 cos linear 调度器

5.3 实际部署建议

  1. 生产环境推荐使用TensorRT加速:
yolo export model=best.pt format=engine device=0
  1. 对于视频流处理,建议使用多线程流水线
  2. 考虑使用OpenVINO优化Intel CPU上的推理性能

我在实际项目中发现,对于小目标检测,将 imgsz 增加到1280可以显著提升效果,但会大幅增加显存消耗。一个折中方案是保持640分辨率但使用 rect=True 参数启用矩形训练。

更多推荐