目标检测的 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 是 训练策略上避免重复

七、三种范式演进总结

第一阶段: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 重构的是"检测问题本身"。

相关推荐
海上小飞龙5 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂6 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i6 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
乐迪信息7 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
Sirens.8 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕8 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
tangguofeng9 小时前
不带头结点的链队操作集(不含InitFlag)(C语言版)
算法
苏打豆10 小时前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
蛋蛋的就会顺顺的11 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙11 小时前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头