超越NMS,Softer-NMS带来目标检测新范式
2023-09-24 21:39:14
超越NMS:Softer-NMS 带来目标检测新范式
在目标检测领域,非极大值抑制 (NMS) 是一种必不可少的技术,用于从一堆重叠的检测框中挑选出最优的框。虽然 NMS 非常有效,但它存在一个主要缺陷:当检测框高度重叠时,它倾向于抑制所有框,导致漏检。
Softer-NMS:解决 NMS 的缺陷
为了解决 NMS 的缺陷,研究人员开发了一种称为 Softer-NMS 的新算法。Softer-NMS 在 NMS 的基础上进行了一些关键改进,使它能够更有效地处理高度重叠的检测框。
Softer-NMS 的原理
Softer-NMS 的工作原理如下:
- 排序检测框: 首先,Softer-NMS 根据检测框的置信度对检测框进行排序。
- 逐一处理检测框: 算法从置信度最高的检测框开始,逐个处理每个检测框。
- 计算重叠度: 对于当前检测框,Softer-NMS 计算它与之前处理过的所有检测框的重叠度。
- 衰减置信度: 根据重叠度,Softer-NMS 衰减当前检测框的置信度。重叠度越大,衰减越大。
- 保留或丢弃: 如果衰减后的置信度仍然高于阈值,则保留当前检测框;否则,丢弃它。
- 重复过程: 算法重复上述过程,直到处理完所有检测框。
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。