目标检测的 Anchor-Free 和 NMS 到底是什么?
目标检测这几年有两个非常容易混淆的概念: 很多人会误以为: 答案是:不一定。 本文将系统讲清楚: 在 Anchor-Based 方法中: 本质是: 在 YOLOv8 中: 看起来像是: 但事实并非如此。 关键在于一个概念: YOLO 系列本质是: 假设一个目标覆盖 3×3 个特征点: 结果: Anchor-Free 解决的是: NMS 解决的是: 两者不是同一个问题。 YOLOv8 采用: 意思是: 总结: YOLOv10 的核心创新是: 但它不是简单替换,而是采用 Dual Assignment Strategy(双分配机制)。 两个分支同时训练。 总结: DETR 不是密集网格预测。 训练时: 未匹配的 query 被监督为背景。 因此: 虽然两者都不需要 NMS,但实现方式完全不同。 核心区别: 区别在于: 判断是否需要 NMS 的核心问题是: Anchor-Free 与是否需要 NMS 没有直接因果关系。既然 Anchor-Free 直接回归框,那是不是就不需要 NMS 了?
一、Anchor-Based vs Anchor-Free
1.Anchor-Based(以 YOLOv5 为例)
先给一个“初始框模板”,再在这个模板上微调。
2.Anchor-Free(以 YOLOv8 为例)
直接预测框 → 应该不会重复 → 不需要 NMS?
二、为什么 Anchor-Free 仍然需要 NMS?
Dense Prediction(密集预测)
核心结论
框的定义方式
多个预测指向同一个目标的问题
三、YOLOv8:One-to-Many 训练机制
One-to-Many Label Assignment
YOLOv8 = Anchor-Free + Dense Prediction + One-to-Many + NMS
四、YOLOv10:为什么可以去掉 NMS?
引入 One-to-One 分配机制
训练阶段
推理阶段
YOLOv10 = Dense 结构 + One-to-One 输出 + 无 NMS
五、DETR
DETR 的核心机制
每个 GT 只匹配一个 query
六、DETR vs YOLOv10 本质区别
七、三种范式演进总结
第一阶段:Anchor-Based
第二阶段:Anchor-Free(YOLOv8)
第三阶段:End-to-End(YOLOv10 / DETR)
八、最终理解框架
训练阶段是否允许多个预测同时学习同一个 GT?
九、总结
Anchor-Free 解决的是“框怎么定义”,One-to-One 解决的是“是否重复预测”,DETR 重构的是“检测问题本身”。