共计 2018 个字符,预计需要花费 6 分钟才能阅读完成。
技术背景
目标检测是计算机视觉中的核心任务,广泛应用于自动驾驶、工业质检、安防监控等领域。YOLOv8 作为 YOLO 系列的最新版本,相比前代具有以下优势:

- 更高的检测精度(尤其对小目标)
- 更快的推理速度(支持 TensorRT 加速)
- 更友好的开发者接口(兼容 PyTorch 生态)
- 支持分类 / 分割 / 检测多任务
环境准备
硬件建议
- GPU:至少 6GB 显存(RTX 2060 及以上)
- RAM:16GB 及以上
- 存储:SSD 硬盘加速数据读取
Python 环境(推荐 conda 创建)
conda create -n yolov8 python=3.8
conda activate yolov8
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip install ultralytics albumentations
数据准备
数据集选择原则
- 领域匹配:交通场景选 BDD100K,工业缺陷选 NEU-DET
- 数据规模:至少 500 张标注图像(简单场景可适当减少)
- 标注质量:检查边界框是否紧密贴合目标
标注工具实操(以 LabelImg 为例)
# 安装与启动
pip install labelImg
labelImg # 图形界面启动
标注流程:
1. 创建 PascalVOC 格式的 Annotations 文件夹
2. 使用矩形框工具标注目标
3. 保存为 XML 文件(YOLOv8 也支持直接导出 TXT 格式)
数据增强策略
# 示例:使用 albumentations 库
import albumentations as A
transform = A.Compose([A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
A.Cutout(max_h_size=20, max_w_size=20, p=0.3)],
bbox_params=A.BboxParams(format='yolo'))
模型训练
完整训练代码
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt') # 可选择 yolov8s/m/l/ x 不同尺寸
# 训练配置
results = model.train(
data='custom_dataset.yaml',
epochs=100,
imgsz=640,
batch=16,
device=0, # 使用 GPU
optimizer='AdamW',
lr0=0.01,
augment=True
)
关键参数解析
imgsz: 输入图像尺寸(越大精度越高但显存消耗越大)batch: 根据显存调整(可用nvidia-smi监控显存)patience: 早停机制等待轮数
训练监控
训练后会在 runs/detect/train 目录生成:
– results.png: 损失函数曲线
– confusion_matrix.png: 混淆矩阵
模型评估
指标解读
- mAP@0.5: IoU 阈值为 0.5 时的平均精度
- FPS: 每秒处理帧数(测试用
model.predict(..., stream=True))
测试集验证
metrics = model.val(
data='custom_dataset.yaml',
split='test',
plots=True # 生成 PR 曲线等可视化结果
)
print(f"mAP50-95: {metrics.box.map}")
避坑指南
常见问题排查
- 损失不下降:检查学习率(建议初始 0.01 逐步下调)
- 显存不足:减小
batch或imgsz - 检测框偏移:检查标注是否含坐标超出图像范围
小数据集优化
- 冻结骨干网络:
model.train(..., freeze=10)前 10 轮只训练检测头 - 迁移学习:使用
yolov8x.pt等大模型预训练权重
部署应用
模型导出
model.export(format='onnx', # 可选 torchscript/tensorrt
dynamic=True, # 支持动态输入
simplify=True) # ONNX 简化
推理 Demo
from ultralytics import YOLO
import cv2
model = YOLO('best.onnx')
img = cv2.imread('test.jpg')
results = model(img)[0]
# 绘制检测框
for box in results.boxes:
x1,y1,x2,y2 = map(int, box.xyxy[0])
cv2.rectangle(img, (x1,y1), (x2,y2), (0,255,0), 2)
cv2.imwrite('result.jpg', img)
结语
建议从 COCO 预训练模型开始,在自己的数据集上尝试微调。遇到问题时,可以:
1. 检查数据标注质量
2. 调整学习率和数据增强策略
3. 参考 Ultralytics 官方文档
期待看到大家训练出的有趣模型!
正文完
发表至: 未分类
近一天内
