目标检测的 Anchor-Free 和 NMS 到底是什么?
目标检测这几年有两个非常容易混淆的概念:
Anchor-Free
无需 NMS(End-to-End)
很多人会误以为:
既然 Anchor-Free 直接回归框,那是不是就不需要 NMS 了?
本文将系统讲清楚:
Anchor-Free 到底解决了什么问题
为什么 YOLOv8 还是需要 NMS
YOLOv10 为什么可以去掉 NMS
DETR 和 YOLOv10 的本质区别
三种范式的核心思想差异
一、Anchor-Based vs Anchor-Free
1. Anchor-Based(以 YOLOv5 为例)
在 Anchor-Based 方法中:
每个特征点对应多个预定义宽高比的 anchor
模型学习的是:在某个 anchor 基础上做偏移回归
本质是:
先给一个“初始框模板”,再在这个模板上微调。
2. Anchor-Free(以 YOLOv8 为例)
在 YOLOv8 中:
不再使用预定义 anchor
每个特征点直接回归 bbox(如 l, t, r, b)
不依赖 anchor 的形状
看起来像是:
直接预测框 → 应该不会重复 → 不需要 NMS?
但事实并非如此。
二、为什么 Anchor-Free 仍然需要 NMS?
关键在于一个概念:
Dense Prediction(密集预测)
YOLO 系列本质是:
每个特征点都会预测一个候选框
多尺度特征图(P3 / P4 / P5)都会输出
假设一个目标覆盖 3×3 个特征点:
这 9 个位置都可能成为正样本
都会回归出一个高质量框
结果:
同一个目标 → 多个高分框
推理阶段必须用 NMS 去重
核心结论
Anchor-Free 解决的是:
框的定义方式
NMS 解决的是:
多个预测指向同一个目标的问题
两者不是同一个问题。
三、YOLOv8:One-to-Many 训练机制
YOLOv8 采用:
One-to-Many Label Assignment
意思是:
一个 GT 可以匹配多个预测
多个位置都会学习这个目标
推理阶段会产生多个高分框
必须使用 NMS
总结:
YOLOv8 = Anchor-Free + Dense Prediction + One-to-Many + NMS
四、YOLOv10:为什么可以去掉 NMS?
YOLOv10 的核心创新是:
引入 One-to-One 分配机制
训练阶段
一个分支使用 One-to-Many(保证精度与收敛稳定)
一个分支使用 One-to-One(学习唯一匹配)
两个分支同时训练。
推理阶段
只保留 One-to-One 分支
每个目标只输出一个框
自然不需要 NMS
总结:
YOLOv10 = Dense 结构 + One-to-One 输出 + 无 NMS
五、DETR
DETR 不是密集网格预测。
DETR 的核心机制
固定数量 object queries(例如 100 个)
每个 query 输出一个 bbox
使用 Hungarian Matching 做全局一对一匹配
训练时:
每个 GT 只匹配一个 query
未匹配的 query 被监督为背景。
因此:
一个目标只会有一个预测
不需要 NMS
六、DETR vs YOLOv10 本质区别
虽然两者都不需要 NMS,但实现方式完全不同。
维度 | DETR | YOLOv10 |
|---|---|---|
是否基于网格 | 否 | 是 |
是否有 object query | 是 | 否 |
预测数量 | 固定(如100) | H×W×多尺度 |
匹配方式 | 全局 Hungarian | 局部分配策略 |
主体结构 | Transformer | CNN |
是否需要 NMS | 不需要 | 不需要 |
核心区别:
- DETR 是 结构上避免重复
- YOLOv10 是 训练策略上避免重复
七、三种范式演进总结
第一阶段:Anchor-Based
Anchor-Based
One-to-Many
需要 NMS
第二阶段:Anchor-Free(YOLOv8)
Anchor-Free
仍然 One-to-Many
仍然需要 NMS
第三阶段:End-to-End(YOLOv10 / DETR)
One-to-One
不需要 NMS
区别在于:
YOLOv10:密集检测 + One-to-One 分配
DETR:Query-Based 集合预测
八、最终理解框架
判断是否需要 NMS 的核心问题是:
训练阶段是否允许多个预测同时学习同一个 GT?
允许 → 必须 NMS
不允许 → 不需要 NMS
Anchor-Free 与是否需要 NMS 没有直接因果关系。
九、总结
Anchor-Free 解决的是“框怎么定义”,
One-to-One 解决的是“是否重复预测”,
DETR 重构的是“检测问题本身”。
