目标检测中的后处理方式 nms和nmm

今天在一个遥感的任务上需要使用到目标检测的后处理方式,并且目标的堆叠非常严重,为了搞定这种情况,需要使用到nms去除一些比较冗余的边界框,sahi这个框架中提供了三种不同的方式进行去除,这里我将他们的去除过程记录一下,方便自己后面使用。

了解每种后处理算法的具体计算步骤,能帮助我们更好地理解它们是如何工作的,以及为何会表现出不同的特性。下面我们依次深入探讨NMS、GREEDYNMM和NMM的计算流程。

🔵 NMS (非极大值抑制)

NMS的核心思想是“胜者为王”,其计算流程旨在保留每个物体最可信的检测框,并果断抑制其周围高度重叠的冗余框。

  1. 按置信度排序:首先,将所有候选边界框(Bounding Box)按照模型预测的置信度(Confidence Score)从高到低进行排序。
  2. 选取并保留最高分框:从排序后的列表中取出当前置信度最高的边界框,将其移出候选列表,并添加到最终的输出结果列表中。
  3. 计算交并比(IoU):计算这个被选中的最高分框与候选列表中所有剩余边界框的交并比(Intersection over Union, IoU)。IoU衡量了两个矩形框的重叠程度。
  4. 抑制冗余框:将IoU值超过预设阈值(例如0.5)的边界框从候选列表中移除(抑制)。这些被抑制的框被认为是与当前最高分框检测到了同一个物体。
  5. 循环迭代:重复步骤2至步骤4,直到候选列表为空。此时,输出结果列表中的边界框就是NMS处理后的最终检测结果。

🟢 NMM (非极大值合并)

NMM的核心思想是“合作共赢”,它并不直接删除重叠的框,而是将它们的信息合并,以期获得更精确的结果。其计算流程侧重于分组与合并。

  1. 按置信度排序:与NMS一样,首先将所有检测框按置信度降序排列。
  2. 构建重叠组
    • 将置信度最高的、尚未被分组的检测框(记为D1)作为一个新组的起始。
    • 遍历所有未分组的框,如果某个框与D1的重叠度(IoU或IOS,即Intersection over Smaller area)超过阈值,则将其加入到D1所在的组中。
    • 重复此过程,直到没有更多的框可以加入该组。这样就形成了一个由高度重叠的检测框组成的“簇”。
  3. 合并组内检测框:对于每个组内的多个检测框,并非简单保留一个,而是进行合并。合并策略通常是加权平均,例如,新的边界框坐标由组内所有框的坐标根据其置信度或面积进行加权平均计算得出。新的置信度也可能是组内所有框置信度的平均值或加权平均值。
  4. 循环迭代:对剩余未分组的检测框重复步骤2和3,直到所有框都被处理完毕。最终输出的是合并后产生的、代表每个物体的一个新边界框。

🟡 GREEDYNMM (贪婪非极大合并)

GREEDYNMM可以看作是NMS和NMM的一种折中方案,它采用一种贪婪的、逐对合并的策略。

  1. 按置信度排序:同样始于按置信度降序排列所有检测框。
  2. 贪婪选择与合并
    • 选取当前置信度最高的框作为基准框。
    • 计算它与剩余每个框的重叠度。
    • 对于重叠度超过阈值的框,并不是直接删除,而是将这个基准框与其逐对合并(通常是加权平均),生成一个新的、更精确的边界框。这个新框的置信度可能会是合并前两个框置信度的加权和(例如,按面积加权平均:New Conf = (Conf1 * Area1 + Conf2 * Area2) / (Area1 + Area2))。
  3. 更新与迭代:用合并后产生的新边界框替换原来的基准框,并将其放回候选列表中(通常需要根据新的置信度重新调整排序位置),然后继续寻找与这个新框重叠度高的框进行下一轮合并。这个过程是递归的,即合并后的新框会继续参与后续的合并。
  4. 终止条件:当某个基准框找不到重叠度超过阈值的其他框时,它将被移入最终输出列表。算法重复此过程,直到所有框都被处理完毕。

核心差异对比

为了让你更直观地把握三者的核心操作差异,可以参考下表:

算法 核心操作 处理重叠框的方式 迭代特点
NMS 选择最高分框,抑制(删除)冗余框 直接删除IoU超过阈值的框 线性处理,被抑制的框不再参与后续计算
NMM 分组合并 将高度重叠的框归为一组,然后合并组内所有框 先全部完成分组,再对每个组独立进行合并
GREEDYNMM 贪婪地逐对合并 将重叠框与当前最高分框两两合并 递归合并,合并产生的新框会继续参与后续合并

所以,结论就是直接使用GREEDYNMM是最好的办法,因为他的策略不是删除,而是合并。

更多推荐