共计 2009 个字符,预计需要花费 6 分钟才能阅读完成。
为什么选择 YOLOv8
YOLOv8 是 Ultralytics 公司推出的最新目标检测模型,相比前代有三大优势:

- 速度和精度的完美平衡:在 COCO 数据集上,YOLOv8n 模型仅用 1.8ms 就能完成推理,同时保持 35.4 的 mAP
- 开箱即用的易用性:通过 pip 安装即可使用,训练接口仅需 3 行核心代码
- 灵活的模型尺寸 :提供从 nano(n) 到 x -large(x)五种预训练模型,适应不同算力场景
数据集准备
公开数据集推荐
- COCO:包含 80 类常见物体,适合通用场景
- VOC:20 类物体,标注文件为 XML 格式
- Open Images:900 万张图像,适合大规模训练
自定义数据集标注
使用 LabelImg 工具标注的完整流程:
- 安装工具:
pip install labelImg - 启动标注界面:
labelImg [图片文件夹] [预定义类别文件] - 快捷键说明:
W:创建边界框Ctrl+S:保存 PASCAL VOC 格式标注
数据增强策略
YOLOv8 内置的增强方法:
- Mosaic 增强:四图拼接
- 随机 HSV 调整
- 旋转缩放(-10°~10°)
建议自定义augment.yaml:
# 数据增强配置示例
hsv_h: 0.015 # 色调调整幅度
hsv_s: 0.7 # 饱和度调整系数
hsv_v: 0.4 # 明度调整系数
flipud: 0.5 # 垂直翻转概率
环境搭建
基础环境要求
- Python 3.8+(推荐 3.9)
- CUDA 11.3+(GPU 训练必需)
- PyTorch 1.8+
安装步骤
- 创建 conda 环境:
conda create -n yolov8 python=3.9 conda activate yolov8 - 安装 PyTorch:
pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu113 - 安装 Ultralytics:
pip install ultralytics
模型训练实战
模型选择建议
- yolov8n:4.3MB,树莓派可运行
- yolov8s:14.5MB,平衡型首选
- yolov8m:41.2MB,高精度需求
训练代码详解
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8s.pt') # 选择 s 型号
# 训练配置
results = model.train(
data='custom_dataset.yaml',
epochs=100,
batch=16, # 根据显存调整
imgsz=640,
lr0=0.01, # 初始学习率
optimizer='Adam',
device=0 # 0 表示 GPU0
)
关键参数说明:
patience: 早停轮数(默认 50)cos_lr: 使用余弦退火学习率label_smoothing: 缓解过拟合(0-1)
模型评估
指标解读
- mAP@0.5:IoU 阈值为 0.5 时的平均精度
- FPS:每秒处理帧数(需指定测试硬件)
- 参数量:模型大小指标
可视化测试
# 加载训练好的模型
best_model = YOLO('runs/detect/train/weights/best.pt')
# 测试单张图片
results = best_model('test.jpg', save=True)
# 绘制预测框
results[0].show()
六大避坑指南
显存不足
- 降低
batch_size(最小可设 4) - 使用
imgsz=320减小输入尺寸 - 添加
--workers 0禁用数据并行
数据不平衡
- 过采样少数类
- 使用类别权重:
model.train(..., cls_pw=[1.2, 0.8, 1.0]) # 各类别权重
过拟合识别
- 训练集精度持续上升但验证集波动
- 解决方案:
- 增加
dropout=0.2 - 早停
patience=30 - 添加 MixUp 增强
模型部署
ONNX 导出
model.export(format='onnx', dynamic=True)
Flask API 示例
from flask import Flask, request
import cv2
app = Flask(__name__)
model = YOLO('yolov8n.onnx')
@app.route('/detect', methods=['POST'])
def detect():
file = request.files['image']
img = cv2.imdecode(np.frombuffer(file.read(), np.uint8), 1)
results = model(img)
return results[0].tojson()
延伸学习
- YOLOv8 官方文档
- 论文《YOLOv8: The Latest Evolution of Real-Time Object Detection》
- Roboflow 数据集平台
经过完整流程实践后,我的显卡 RTX3060 训练 yolov8s 模型在自定义数据集上达到了 82.3% 的 mAP,整个过程最耗时的部分是数据标注环节。建议初次尝试时先用 100-200 张图片跑通全流程,再逐步扩大数据规模。
正文完
发表至: 未分类
四天前
