专栏感知目标检测的 Anchor-Free 和 NMS 到底是什么?

目标检测的 Anchor-Free 和 NMS 到底是什么?

YCJ2026-02-28
58
1

目标检测的 Anchor-Free 和 NMS 到底是什么?

目标检测这几年有两个非常容易混淆的概念:

  • Anchor-Free

  • 无需 NMS(End-to-End)

很多人会误以为:

既然 Anchor-Free 直接回归框,那是不是就不需要 NMS 了?

答案是:不一定。

本文将系统讲清楚:

  1. Anchor-Free 到底解决了什么问题

  2. 为什么 YOLOv8 还是需要 NMS

  3. YOLOv10 为什么可以去掉 NMS

  4. DETR 和 YOLOv10 的本质区别

  5. 三种范式的核心思想差异


一、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 分配机制

但它不是简单替换,而是采用 Dual Assignment Strategy(双分配机制)

训练阶段

  • 一个分支使用 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 重构的是“检测问题本身”。

感知
杂谈
评论1
0/1000
  • ؤ72448
    Lv.1

    1

    2026-03-02
    0
    0