一、环境配置与安装
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 监控训练过程
-
TensorBoard:
tensorboard --logdir runs/detect
访问
http://localhost:6006
-
训练控制台输出:
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 模型优化技巧
-
数据增强:
model.train( ... mosaic=1.0, # Mosaic增强 mixup=0.1, # Mixup增强 degrees=10.0, # 旋转角度 )
-
迁移学习:
model = YOLO('yolov8x.pt') # 使用更大的预训练模型
-
超参数调优:
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)
七、最佳实践总结
- 数据质量优先:确保标注准确、多样性强
- 渐进式训练:
- 先用小模型(yolov8n)快速迭代
- 再用大模型(yolov8x)精细调优
- 版本控制:每次训练创建独立实验目录
- 监控指标:重点关注mAP50-95和验证损失
- 生产部署:导出为TensorRT加速推理
八、资源推荐
- 官方文档:Ultralytics YOLOv8 Docs
- 预训练模型:YOLOv8 Model Zoo
- 公开数据集:
- 标注工具:
通过本教程,你已掌握YOLOv8自定义模型训练的核心技能。实践是学习的最佳方式,立即开始你的第一个目标检测项目吧!遇到问题欢迎在评论区交流讨论。