文章

07 非极大值抑制(Non-Max Suppression, NMS)

07 非极大值抑制(Non-Max Suppression, NMS)

07 非极大值抑制(Non-Max Suppression, NMS)

一、问题背景

在基于网格(grid cell)的对象检测算法(如 YOLO)中,每个网格单元都会独立预测是否存在目标及其边界框(bounding box)。
但由于目标可能跨越多个网格,多个相邻网格可能都预测了同一个目标,导致对同一对象产生多个重复的检测结果

💡 目标:确保每个真实对象只被检测一次


二、非极大值抑制(NMS)的核心思想

保留置信度最高的检测框,抑制与其高度重叠的其他检测框。

  • “非极大值”:不保留局部最大值以外的相近高分预测。
  • “抑制”:通过交并比(IoU)判断重叠程度,移除冗余框。

三、NMS 算法步骤(单类别情况)

假设我们只检测一种对象(如“汽车”),每个网格输出:

  • $p_c$:该网格包含对象的概率(confidence score)
  • $(b_x, b_y, b_h, b_w)$:边界框的中心坐标与宽高(相对于网格或图像)

步骤 1:过滤低置信度框

设定阈值 $\tau$(例如 $\tau = 0.6$),丢弃所有满足:

\[p_c \leq \tau\]

的边界框。

✅ 保留高置信度候选框集合 $B = { \text{bbox}_i \mid p_c^{(i)} > \tau }$

步骤 2:迭代选择最优框并抑制重叠框

1
2
3
4
5
6
7
8
9
10
while B 非空:
    1. 选出置信度最高的框 $ \text{bbox}_{\text{max}} = \arg\max_{\text{bbox} \in B} p_c $
    2. 将 $ \text{bbox}_{\text{max}} $ 加入最终输出列表
    3. 对 B 中其余每个框 $ \text{bbox}_j $:
        计算 IoU(交并比):
        $$
        \text{IoU}(\text{bbox}_{\text{max}}, \text{bbox}_j) = 
        \frac{|\text{bbox}_{\text{max}} \cap \text{bbox}_j|}{|\text{bbox}_{\text{max}} \cup \text{bbox}_j|}
        $$
        若 $ \text{IoU} > \text{IoU}_{\text{threshold}} $(如 0.5),则从 B 中移除 $ \text{bbox}_j $

🔁 重复直到所有候选框被处理完毕。


四、多类别检测中的 NMS

当检测多个类别(如行人、汽车、摩托车)时:

  • 每个边界框会输出多个类别概率:$p_c \cdot P(\text{class}_k)$,其中 $k = 1,2,\dots,K$
  • 对每个类别独立执行 NMS

    • 分别提取属于该类别的所有边界框(使用该类别的置信度)
    • 在该类别内部运行上述 NMS 流程

✅ 这样可避免不同类别的框互相抑制(例如汽车框不会抑制行人框)。


五、关键概念与公式

1. 置信度(Confidence Score)

通常定义为:

\[\text{score} = p_c \cdot P(\text{class} \mid \text{object})\]

但在单类别检测中简化为 $p_c$。

2. 交并比(Intersection over Union, IoU)

给定两个边界框 $A$ 和 $B$:

\[\text{IoU}(A, B) = \frac{\text{Area of Overlap}(A \cap B)}{\text{Area of Union}(A \cup B)}\]
  • IoU ∈ [0, 1]
  • IoU 越高,重叠越严重
  • 常用阈值:0.5(严格场景可用 0.3~0.7)

六、NMS 的作用与意义

作用说明
✅ 去除重复检测同一目标不再被多个框重复报告
✅ 提升检测精度输出更干净、更准确的边界框
✅ 适用于 YOLO、Faster R-CNN 等是现代目标检测 pipeline 的标准后处理步骤

七、注意事项

  • NMS 是后处理步骤,不参与网络训练。
  • 在密集目标场景(如人群)中,标准 NMS 可能过度抑制,可考虑 Soft-NMS 等改进方法(课程未涉及,但值得了解)。
  • 实际实现中需注意边界框坐标的表示方式(中心点+宽高 vs 左上右下)。

八、小结(一句话)

非极大值抑制(NMS)通过保留高置信度检测框并移除与其高 IoU 重叠的其他框,有效解决同一目标被多次检测的问题,是目标检测中不可或缺的后处理技术。

本文由作者按照 CC BY 4.0 进行授权