本文记录使用 YOLOv8 训练自定义目标检测数据集的完整流程,包括数据标注、格式转换、配置编写、训练验证,帮助你快速上手 YOLOv8 自定义训练。
数据集标注
标注工具选择
Labelme(推荐)
1 | # 安装 |
Labelme 特点:
- 支持多边形、矩形、圆形标注
- 支持快捷键,提高标注效率
- 输出 JSON 格式
ROBOFLOW
优点:
- 云端标注,无需安装
- 自动标注辅助
- 直接支持 YOLO 格式导出
- 支持团队协作
标注规范
1 | # 标注注意事项: |
数据集格式转换
YOLO TXT 格式
1 | # YOLO 数据集结构 |
Labelme JSON → YOLO TXT
1 | # labelme2yolo.py |
COCO JSON → YOLO TXT
1 | # coco2yolo.py |
YAML 配置文件编写
data.yaml
1 | # 数据集配置 |
模型配置文件
1 | # yolov8.yaml (使用默认或自定义) |
训练命令与参数
基础训练
1 | # 使用 Python API |
训练参数详解
1 | # 完整参数示例 |
多GPU训练
1 | # 单机多卡训练 |
模型验证
验证命令
1 | # Python API 验证 |
指标解读
1 | # YOLOv8 输出的主要指标 |
每类指标
1 | # 查看每类的 AP |
预测与推理
基础预测
1 | from ultralytics import YOLO |
批量预测
1 | # 批量预测 |
结果可视化
1 | # 绘制结果 |
常见问题排查
数据问题
1 | # 问题1:找不到数据 |
训练问题
1 | # 问题1:GPU 显存不足 |
推理问题
1 | # 问题1:检测框位置偏移 |
总结
YOLOv8 自定义训练流程:
- 数据标注:使用 Labelme 或 ROBOFLOW
- 格式转换:Labelme JSON → YOLO TXT
- 目录结构:
images/和labels/对应 - 编写配置:
data.yaml和模型配置 - 开始训练:
model.train()或 CLI - 验证评估:
model.val()查看 mAP - 推理预测:
model.predict()实际应用
关键参数建议:
| 参数 | 建议值 |
|---|---|
| epochs | 100-300 |
| batch | 16-32(根据显存) |
| imgsz | 640(小目标用 1280) |
| conf | 0.25(推理时) |
| optimizer | SGD(默认效果好) |
| lr0 | 0.01(SGD) |