返回

超越NMS,Softer-NMS带来目标检测新范式

人工智能

超越NMS:Softer-NMS 带来目标检测新范式

在目标检测领域,非极大值抑制 (NMS) 是一种必不可少的技术,用于从一堆重叠的检测框中挑选出最优的框。虽然 NMS 非常有效,但它存在一个主要缺陷:当检测框高度重叠时,它倾向于抑制所有框,导致漏检。

Softer-NMS:解决 NMS 的缺陷

为了解决 NMS 的缺陷,研究人员开发了一种称为 Softer-NMS 的新算法。Softer-NMS 在 NMS 的基础上进行了一些关键改进,使它能够更有效地处理高度重叠的检测框。

Softer-NMS 的原理

Softer-NMS 的工作原理如下:

  1. 排序检测框: 首先,Softer-NMS 根据检测框的置信度对检测框进行排序。
  2. 逐一处理检测框: 算法从置信度最高的检测框开始,逐个处理每个检测框。
  3. 计算重叠度: 对于当前检测框,Softer-NMS 计算它与之前处理过的所有检测框的重叠度。
  4. 衰减置信度: 根据重叠度,Softer-NMS 衰减当前检测框的置信度。重叠度越大,衰减越大。
  5. 保留或丢弃: 如果衰减后的置信度仍然高于阈值,则保留当前检测框;否则,丢弃它。
  6. 重复过程: 算法重复上述过程,直到处理完所有检测框。

Softer-NMS 的优势

与 NMS 相比,Softer-NMS 具有以下优势:

  • 降低漏检率: Softer-NMS 不会像 NMS 那样激进地抑制高度重叠的检测框,从而降低漏检率。
  • 提高召回率: 通过降低漏检率,Softer-NMS 可以提高目标检测模型的召回率。
  • 保持准确率: 尽管降低了漏检率,Softer-NMS 仍然可以保持与 NMS 相当的准确率。
  • 速度快: 与 NMS 相比,Softer-NMS 的计算复杂度几乎相同,不会明显影响目标检测模型的速度。

Softer-NMS 的应用

Softer-NMS 已成功应用于各种目标检测模型,包括 Faster R-CNN、SSD 和 YOLOv3。在这些模型中,Softer-NMS 显著提高了准确率和召回率,同时降低了漏检率。

Softer-NMS 代码示例

如果你想在自己的目标检测模型中使用 Softer-NMS,可以使用以下 Python 代码:

import numpy as np

def softer_nms(boxes, scores, iou_threshold, sigma=0.5):
  """
  执行 Softer-NMS。

  参数:
    boxes:检测框坐标,形状为 [N, 4]。
    scores:检测框置信度,形状为 [N]。
    iou_threshold:IoU 阈值。
    sigma:衰减系数。

  返回:
    保留的检测框索引,形状为 [K]。
  """

  # 对检测框置信度进行排序。
  order = scores.argsort()[::-1]

  # 初始化已选检测框列表。
  selected_boxes = []

  # 遍历所有检测框。
  while len(order) > 0:
    # 选择置信度最高的检测框。
    i = order[0]

    # 将置信度最高的检测框添加到已选检测框列表中。
    selected_boxes.append(i)

    # 计算置信度最高的检测框与其他检测框之间的 IoU。
    ious = bbox_iou(boxes[i], boxes[order[1:]])

    # 计算衰减系数。
    decay_weights = np.exp(-(ious**2) / sigma)

    # 更新其他检测框的置信度。
    scores[order[1:]] = scores[order[1:]] * decay_weights

    # 删除置信度低于阈值的检测框。
    order = order[scores[order] > iou_threshold]

  return selected_boxes

总结

Softer-NMS 是一种功能强大的后处理技术,可以有效地克服 NMS 的缺陷。它可以降低漏检率,提高召回率,同时保持准确率。如果您正在进行目标检测研究或开发,强烈建议您尝试使用 Softer-NMS 来提升模型的性能。

常见问题解答

1. Softer-NMS 与 NMS 的主要区别是什么?

Softer-NMS 引入了可调的衰减系数,该系数根据检测框之间的重叠度对置信度进行平滑衰减。相比之下,NMS 使用严格的阈值来抑制重叠的检测框,导致更激进的抑制。

2. Softer-NMS 在哪些方面优于 NMS?

Softer-NMS 的主要优势包括降低漏检率、提高召回率、保持准确率和速度快。

3. Softer-NMS 有什么缺点吗?

与 NMS 相比,Softer-NMS 的唯一主要缺点是需要额外的计算来计算衰减系数。然而,这种计算成本相对较小,通常不会对目标检测模型的速度产生重大影响。

4. Softer-NMS 可以应用于哪些目标检测模型?

Softer-NMS 可以应用于各种目标检测模型,包括 Faster R-CNN、SSD 和 YOLOv3。

5. 如何在自己的目标检测模型中使用 Softer-NMS?

您可以使用本文提供的 Python 代码示例在自己的目标检测模型中实现 Softer-NMS。