🧠 YOLO 核心概念详解
1. 目标检测基础
什么是目标检测
同时解决两个问题:物体在哪里(定位)+ 物体是什么(分类)
输出形式:
1 | (x, y, w, h, confidence, class_probs...) |
Two-Stage vs One-Stage
| 方法 | 流程 | 代表 | 特点 |
|---|---|---|---|
| Two-Stage | 提取候选区 → 分类回归 | R-CNN, Faster R-CNN | 精度高,速度慢 |
| One-Stage | 一步到位直接预测 | YOLO, SSD | 速度快,端到端 |
YOLO 的本质:把检测变成回归问题,整张图输入,一次性输出所有预测。
2. 核心机制
2.1 Grid Cell(网格划分)
1 | 输入图像 448×448 → 划分为 S×S 网格 (v1: S=7) |
v1 例子:
- 7×7 = 49 个网格
- 每个网格预测 2 个 bounding box
- 每个 box: (x, y, w, h, confidence) = 5 个值
- 每个网格预测 C 个类别 (VOC: 20)
- 输出张量: 7×7×(5×2+20) = 7×7×30
⚠️ v1 限制: 每个网格只能预测一个类别,小物体/密集场景效果差
2.2 Anchor Box(锚框)
从 v2 开始引入,借鉴 Faster R-CNN。
思想: 不再直接预测坐标,而是预测相对于预设锚框的偏移。
1 | 直接预测: (x, y, w, h) ← v1 做法 |
为什么用 Anchors?
- 网络更容易收敛
- 一个网格可以预测多个不同形状的物体
- K-means 聚类找到最优锚框尺寸
v2 公式:
1 | bx = σ(tx) + cx # 中心 x 约束在网格内 |
2.3 Anchor-Free(无锚框)
v8 开始引入,彻底抛弃手工设计的锚框。
做法: 直接预测边界框的关键点或中心点。
- 简化模型设计
- 减少超参数
- 更适合非标准长宽比的目标
3. IoU 系列详解
IoU(交并比)
衡量预测框与真实框重叠程度的核心指标。
$$\text{IoU} = \frac{A \cap B}{A \cup B}$$
IoU 进化史
| 变体 | 全称 | 特点 | 引入版本 |
|---|---|---|---|
| IoU | Intersection over Union | 基础版本 | — |
| GIoU | Generalized IoU | 考虑最小外接矩形,解决不相交时梯度为零 | v4 |
| DIoU | Distance IoU | 加入中心点距离惩罚 | v4 |
| CIoU | Complete IoU** | 加入长宽比一致性 | v4(最常用) |
| SIoU | SCYLLA-IoU | 考虑角度代价 | v6 |
CIoU 公式(最常用)
$$\mathcal{L}_{CIoU} = 1 - IoU + \frac{\rho^2(b, b^{gt})}{c^2} + \alpha v$$
ρ²(b,bgt): 中心点欧氏距离c²: 最小外接矩形对角线距离αv: 长宽比惩罚项
4. NMS(非极大值抑制)
为什么需要 NMS?
同一个目标可能被多个边界框检测到,NMS 去重,保留最佳的那个。
算法流程
1 | 1. 按置信度得分排序所有预测框 |
NMS-Free(v10 创新)
YOLOv10 通过一致双重分配训练策略,在推理时直接产生无冗余的预测,完全消除 NMS。
训练时:一对多 Head(丰富监督信号)+ 一对一 Head
推理时:只用一对一 Head,无需 NMS
5. Backbone / Neck / Head 架构
标准三段式(v4 确立)
1 | 输入图像 |
Backbone(骨干网络)
作用: 从原始图像中提取多层级特征。
| 架构 | 代表 | 特点 |
|---|---|---|
| Darknet | v1~v3 | YOLO 专属轻量网络 |
| CSPDarknet | v4~v5 | 跨阶段部分连接,减少计算 |
| EfficientRep | v6 | 硬件感知结构设计 |
| GELAN | v9 | 广义高效层聚合 |
| Attention-Centric | v12~ | 注意力机制替代CNN |
Neck(颈部)
作用: 融合 Backbone 不同层级的特征,增强多尺度表达能力。
1 | FPN (Feature Pyramid Network) |
经典组合:FPN + PAN = 双向特征金字塔
Head(检测头)
作用: 基于融合特征,输出最终的检测结果。
| 类型 | 特点 | 代表版本 |
|---|---|---|
| 耦合 Head | 分类和回归共享卷积 | v1~v4 |
| 解耦 Head | 分类和回归分开处理 | v5~v6 |
| Anchor-Free Head | 不依赖锚框 | v8~ |
| 一对一 Head | 每个目标仅一个预测 | v10~ |
6. 关键训练技巧
BoF(Bag of Freebies,免费包)
不增加推理成本,只影响训练的优化方法。
| 方法 | 作用 | 引入 |
|---|---|---|
| Mosaic 数据增强 | 4 张图拼接成 1 张,提升泛化 | v4 |
| MixUp | 两张图加权混合 | v4 |
| 标签平滑 | 软化 one-hot 标签 | v4 |
| SAT 自对抗训练 | 网络”欺骗自己”提升鲁棒性 | v4 |
| CmBN | 跨小批量归一化 | v4 |
BoS(Bag of Specials,特殊包)
略微增加推理成本但大幅提升性能。
| 方法 | 作用 | 引入 |
|---|---|---|
| Mish 激活函数 | 比 ReLU 更平滑 | v4 |
| SPP 金字塔池化 | 多尺度感受野 | v4 |
| SAM 空间注意力 | 增强重要特征 | v4 |
| SE/CBAM 通道注意力 | 通道维度加权 | 魔改 |
7. 损失函数全景
YOLO 损失 = 三类损失之和
$$\mathcal{L}{total} = \mathcal{L}{box} + \mathcal{L}{obj} + \mathcal{L}{cls}$$
| 组成部分 | 含义 | 计算方式 |
|---|---|---|
| L_box | 边界框回归损失 | CIoU / SIoU 等 |
| L_obj | 目标置信度损失(是否有物体) | BCE Loss |
| L_cls | 类别分类损失 | BCE Loss (多标签) |
v1 损失函数特点
- 定位误差权重更大 (λ_coord = 5)
- 无目标的网格置信度惩罚降低 (λ_noobj = 0.5)
- w、h 取平方根,抑制大框的误差优势
v3+ 损失函数特点
- 定位仍用差方和
- 置信度和类别改用交叉熵
- 多标签分类用 Sigmoid(非 Softmax)
参考资料
- 📝 [[YOLO 系列总览]] — 版本演进总览
- 📋 [[10.clippings/感知算法/2D检测/单阶段/YOLO/YOLO 详解:从 v1 到 v11]]
- 📋 [[10.clippings/感知算法/2D检测/单阶段/YOLO/YOLO系列算法精讲:从yolov1至yolov8的进阶之路(2万字超全整理)-CSDN博客]]
- 📦 [[30.resources/yolo-master/README]] — Datawhale YOLO Master
