从零开始复现ai论文代码:YOLOv8代码复现
🧭 1. 背景与研究动机
YOLO 系列自 YOLOv1(2015)提出“端到端单阶段检测”思想以来,经历了数次迭代:
版本 | 作者 | 时间 | 核心贡献 |
YOLOv1–v3 | Redmon | 2015–2018 | 单阶段检测框架确立 |
YOLOv4 | Bochkovskiy | 2020 | CSPDarknet、Mosaic、CIOU等优化 |
YOLOv5 | Ultralytics | 2020 | 工程化PyTorch版本,广泛应用 |
YOLOv7 | WongKinYiu | 2022 | E-ELAN结构,性能极高 |
YOLOv8 | Ultralytics | 2023 | Anchor-free + Decoupled Head + 通用多任务框架 |
Ultralytics 在 YOLOv5 之后发现:
- anchor-based 检测虽然成熟,但 锚框数量多、匹配复杂、计算浪费大;
- head 耦合导致分类与回归互相干扰;
- 多任务(检测、分割、姿态)无法共享统一框架。
于是,YOLOv8 被设计为:
“A next-generation, anchor-free, decoupled-head, multi-task YOLO model.”
🧩 2. 网络架构(Architecture)
总体结构:
Input → Backbone → Neck → Head → Predictions(1) Backbone:CSP-ELAN 架构
- 继承自 YOLOv5 的 CSP(Cross Stage Partial)设计;
- 加入 ELAN(Efficient Layer Aggregation Network)思想,以平衡深度与梯度流;
- 激活函数改为 SiLU(Swish-1);
- 更深层次的特征通过跨层连接融合(Dense-like结构)。
优点:
- 保持轻量化的同时,增强梯度流;
- 特征表达更稳定,尤其在小目标场景。
(2) Neck:PAN-FPN 融合
- 继续使用 YOLOv5/YOLOv7 的 FPN+PAN 结构;
- 自顶向下、再自底向上双向特征融合;
- 输出三个尺度特征:
P3, P4, P5。
(3) Head:Decoupled Head(解耦检测头)
传统 YOLO(如 v5)Head 是“耦合式”:
一个卷积层同时输出分类 + 回归。
YOLOv8 采用“解耦式”:
分类分支 与 回归分支 分开设计,各自独立卷积层,最后再融合置信度。
优点:
- 分类和定位任务的梯度互不干扰;
- 提升收敛速度和最终精度(尤其对小目标);
- 与 FCOS、YOLOX 等现代检测器一致。
🚫 3. Anchor-Free 检测机制
YOLOv5 是 anchor-based,每个 grid cell 会预测多个锚框。
YOLOv8 改为 anchor-free,即:
- 每个格点只预测一个目标;
- 网络直接回归中心点偏移 + 宽高;
- 不需要手动设计/聚类 anchor 尺寸;
- 正负样本匹配基于 距离中心的动态匹配。
优势:
- 减少计算量;
- 训练更稳定;
- 适配任意分辨率数据;
- 更易迁移到新数据集(无需重新计算 anchors)。
⚙️ 4. 预测输出与后处理
对于每个预测点,YOLOv8 输出:
- (x, y, w, h):边框坐标;
objectness score;class probabilities。
推理阶段:
- 应用 NMS(Non-Maximum Suppression) 去除重叠框;
- 支持多种 NMS:普通 NMS、DIoU-NMS、Soft-NMS;
- Ultralytics 提供
conf与iou阈值调节接口。
🧮 5. 损失函数(Loss)
YOLOv8 的损失由三部分组成:
类型 | 名称 | 说明 |
分类损失 | BCE Loss | 对每类独立使用二值交叉熵 |
定位损失 | CIoU / SIoU Loss | 改进的 IoU 距离度量,更平滑 |
置信度损失 | BCE Loss | 预测框与目标框重叠度作为监督 |
🎯 6. 训练与优化策略
YOLOv8 的训练部分融合了业界经验:
数据增强:
- Mosaic Augmentation(随机拼接4张图像);
- MixUp(线性混合两张图);
- HSV色彩抖动、平移、缩放、翻转;
- 训练后期关闭 Mosaic,以稳定收敛。
优化器:
- 默认使用 SGD + Momentum 或 AdamW;
- 学习率策略:Cosine Annealing;
- EMA(Exponential Moving Average)用于权重平滑。
📊 7. 实验结果与性能
Ultralytics 在 COCO 2017 数据集上给出的实验结果:
模型 | 输入尺寸 | 参数量 | [email protected]:0.95 | FPS(Tesla T4) | |
YOLOv8n | 640×640 | 3.2M | 37.3 | 26.8 | 150+ |
YOLOv8s | 640×640 | 11.2M | 44.9 | 31.8 | 120 |
YOLOv8m | 640×640 | 25.9M | 50.2 | 35.9 | 90 |
YOLOv8l | 640×640 | 43.7M | 52.9 | 37.6 | 60 |
YOLOv8x | 640×640 | 68.2M | 53.9 | 38.7 | 45 |
与 YOLOv5 相比:
- 同尺寸模型 mAP 提升约 1.5–3%;
- 推理速度略快(由于 anchor-free 简化)。