YOLOv8 完全指南:从零开始训练自定义目标检测模型

一、环境配置与安装

1.1 创建专用虚拟环境(推荐)

conda create -n yolo_env python=3.9
conda activate yolo_env

1.2 安装核心库

pip install ultralytics opencv-python matplotlib pandas

1.3 验证安装

import ultralytics
ultralytics.checks()  # 检查环境依赖

二、数据集准备与标注

2.1 数据集结构

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

2.2 标注工具推荐

  • LabelImg:简单易用的图形界面工具
  • Roboflow:在线标注平台(免费版可用)
  • CVAT:高级工业级标注工具

2.3 YOLO标注格式

每个标签文件(.txt)对应一张图片,格式如下:

<class_id> <center_x> <center_y> <width> <height>
  • 归一化坐标:所有值在0-1之间
  • 每行一个对象

2.4 创建数据集配置文件

custom_data.yaml

path: /path/to/custom_dataset
train: images/train
val: images/val

nc: 3  # 类别数量
names: ['cat', 'dog', 'bird']  # 类别名称

三、模型训练全流程

3.1 训练脚本

train_custom.py

from ultralytics import YOLO

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

# 开始训练
results = model.train(
    data='custom_data.yaml',
    epochs=100,              # 训练轮数
    batch=16,                # 批大小
    imgsz=640,               # 图像尺寸
    device='cuda',           # 使用GPU
    name='my_custom_model',  # 实验名称
    patience=20,             # 早停机制
    lr0=0.01,                # 初始学习率
    augment=True,            # 自动增强
    hsv_h=0.015,             # 色调增强
    flipud=0.1,              # 垂直翻转概率
    copy_paste=0.2           # 复制粘贴增强
)

3.2 关键训练参数解析

参数说明推荐值
batch批大小8-64(根据GPU显存)
imgsz输入尺寸320/640/1280
lr0初始学习率0.01-0.001
patience早停等待20-50
augment自动增强True
device训练设备‘cuda’或’cpu’

3.3 监控训练过程

  1. TensorBoard

    tensorboard --logdir runs/detect
    

    访问 http://localhost:6006

  2. 训练控制台输出

    Epoch   gpu_mem       box       obj       cls    labels  img_size
      0/99     2.1G      1.23      1.05      0.98        22       640
      1/99     2.1G      1.05      0.93      0.85        18       640
      ...
    

四、模型评估与优化

4.1 验证模型性能

# 加载最佳模型
best_model = YOLO('runs/detect/my_custom_model/weights/best.pt')

# 评估指标
metrics = best_model.val(
    data='custom_data.yaml',
    split='val',
    conf=0.25,  # 置信度阈值
    iou=0.6     # IoU阈值
)

print(f"mAP50-95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.precision:.4f}")

4.2 关键评估指标

  • mAP50:IoU=0.5时的平均精度
  • mAP50-95:IoU从0.5到0.95的平均精度
  • Precision:查准率
  • Recall:查全率

4.3 模型优化技巧

  1. 数据增强

    model.train(
        ...
        mosaic=1.0,      # Mosaic增强
        mixup=0.1,       # Mixup增强
        degrees=10.0,    # 旋转角度
    )
    
  2. 迁移学习

    model = YOLO('yolov8x.pt')  # 使用更大的预训练模型
    
  3. 超参数调优

    from ultralytics import YOLO
    import optuna
    
    def objective(trial):
        params = {
            'lr0': trial.suggest_float('lr0', 1e-5, 1e-2),
            'weight_decay': trial.suggest_float('weight_decay', 1e-6, 1e-3)
        }
        model = YOLO('yolov8n.pt')
        results = model.train(data='custom_data.yaml', epochs=50, **params)
        return results.results_dict['metrics/mAP50-95(B)']
    

五、模型推理与应用

5.1 图像推理

results = best_model.predict(
    source='test_image.jpg',
    conf=0.25,        # 置信度阈值
    save=True,         # 保存结果
    show_labels=True,  # 显示标签
    line_width=2       # 框线宽度
)

# 显示结果
results[0].show()

5.2 视频流处理

# 实时摄像头检测
results = best_model.predict(
    source=0,          # 摄像头ID
    stream=True,       # 流模式
    show=True,         # 实时显示
    save=True,         # 保存视频
    conf=0.5
)

5.3 导出部署模型

# 导出为ONNX格式
best_model.export(format='onnx')

# 导出为TensorRT引擎
best_model.export(
    format='engine',
    device=0,         # GPU设备
    half=True,        # FP16精度
    workspace=4       # 显存大小(GB)
)

六、常见问题解决

6.1 内存不足错误

  • 降低 batch 大小
  • 减小 imgsz(如640→416)
  • 添加 cache='ram'cache='disk'

6.2 训练不收敛

  • 检查数据集标注质量
  • 降低学习率(lr0=0.001
  • 增加 warmup_epochs(3→10)

6.3 类别不平衡

model.train(
    ...
    class_weights=[1.0, 2.5, 0.8]  # 根据类别频率调整
)

6.4 模型过拟合

  • 增加数据增强强度
  • 添加Dropout(dropout=0.2
  • 使用更小的模型(yolov8n→yolov8s)

七、最佳实践总结

  1. 数据质量优先:确保标注准确、多样性强
  2. 渐进式训练
    • 先用小模型(yolov8n)快速迭代
    • 再用大模型(yolov8x)精细调优
  3. 版本控制:每次训练创建独立实验目录
  4. 监控指标:重点关注mAP50-95和验证损失
  5. 生产部署:导出为TensorRT加速推理

八、资源推荐

  1. 官方文档Ultralytics YOLOv8 Docs
  2. 预训练模型YOLOv8 Model Zoo
  3. 公开数据集
  4. 标注工具

通过本教程,你已掌握YOLOv8自定义模型训练的核心技能。实践是学习的最佳方式,立即开始你的第一个目标检测项目吧!遇到问题欢迎在评论区交流讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值