YOLOv8 是 Ultralytics 发布的 YOLO 系列最新力作,在精度和速度上都有显著提升。本文深入解析其核心架构和关键模块,以及实用的训练技巧。
整体架构
YOLOv8 架构图
1 | ┌─────────────────────────────────────────────────────────────┐ |
核心组件一览
1 | # YOLOv8 核心组件 |
Backbone 详解
Conv 模块
1 | # 基础卷积模块 |
C2f 模块(核心创新)
C2f 是 YOLOv8 的核心模块,替代了 YOLOv5 的 C3:
1 | class C2f(nn.Module): |
C2f vs C3 对比
1 | # YOLOv5 C3: |
SPPF 模块
1 | # 空间金字塔池化 |
SPP vs SPPF
1 | # SPP:并行多个不同尺寸的 MaxPool |
Neck 结构
PANet (Path Aggregation Network)
1 | # YOLOv8 Neck 采用 PANet 结构 |
Neck Forward 流程
1 | # 简化流程 |
Head 结构
Decoupled Head
YOLOv8 采用分类和回归分支完全解耦的 Head:
1 | class Detect(nn.Module): |
Decoupled vs Coupled
1 | # Coupled Head (YOLOv3-v5): |
输出张量
1 | # YOLOv8 COCO (80 类) 输出 |
损失函数
BFLoss (Box Loss)
YOLOv8 使用 CIoU + DFL 的组合损失:
1 | class BboxLoss(nn.Module): |
DFL (Distribution Focal Loss)
1 | # DFL 将连续回归转为离散分类 |
完整 Loss
1 | class YOLOv8Loss: |
训练技巧
数据增强
1 | # YOLOv8 主要数据增强: |
训练配置
1 | # YOLOv8 训练超参(yolov8s.yaml) |
训练策略
1 | # 1. 预热 (Warmup) |
验证技巧
1 | # 1. 使用 Val mode |
常见问题排查
1 | # 问题1:训练 loss 不下降 |
总结
YOLOv8 核心要点:
| 组件 | 改进 | 效果 |
|---|---|---|
| Backbone | C2f 模块 | 更好的梯度流 |
| Neck | C2f + SPPF | 高效多尺度融合 |
| Head | Decoupled + TAL | 分类回归解耦 |
| Loss | BFLoss (CIoU + DFL) | 更稳定训练 |
| Anchor | Anchor-free | 简化设计 |
训练建议:
- 数据集:确保标注准确,小目标标注完整
- 增强:默认配置足够强,不要过度增强
- 学习率:默认 SGD 效果好,可尝试 AdamW
- Epoch:300 epoch 通常足够
- Batch:根据显存调整,最大化利用