欢迎访问宙启技术站
智能推送

mmdet.core中的非极大值抑制(NMS)算法解析

发布时间:2024-01-15 06:59:11

非极大值抑制(NMS)是目标检测算法中常用的一种后处理技术,它用于过滤重叠的候选框,只保留最具代表性的目标框。在mmdet.core模块中,实现了一种高效的NMS算法,以下是对其进行解析,并提供一个使用例子。

NMS算法首先根据目标框的得分对候选框进行排序,然后从得分最高的目标框开始,将其加入最终结果集中。接下来,从余下的目标框中选择一个目标框,并计算该目标框与已加入结果集中目标框的重叠程度,若重叠程度大于设定的阈值,则将该目标框舍弃,否则将其加入结果集中。重复此过程,直到所有目标框都被处理。

mmdet.core中的NMS算法可以使用以下代码进行调用:

from mmdet.core import multiclass_nms

dets = [
    [x1, y1, x2, y2, score, class_id],
    ...
]

result = multiclass_nms(dets,
                        nms_thr=0.3,             # NMS阈值,控制舍弃重叠的目标框的程度
                        score_thr=0.5,           # 目标框得分阈值,低于该阈值的目标框将被忽略
                        max_num=100)             # 最多保留的目标框数量

# 输出NMS处理后的目标框
for r in result:
    print(r[:-1])  # 输出目标框的坐标和得分,不包括类别id

使用此代码,我们可以将目标框列表dets传递给multiclass_nms函数,并设置需要的参数。函数将返回经过NMS处理后的结果列表result,列表中每个元素表示一个目标框,并包含其坐标、得分和类别id。

例如,假设我们有以下目标框列表:

dets = [
    [10, 10, 50, 50, 0.9, 1],
    [20, 20, 60, 60, 0.6, 1],
    [30, 30, 70, 70, 0.8, 2],
    [40, 40, 80, 80, 1.0, 1]
]

我们可以使用NMS算法过滤这些目标框,并只保留最具代表性的目标框。假设我们设置NMS阈值为0.5,得分阈值为0.7,最多保留2个目标框,则经过NMS处理后的结果为:

[[40, 40, 80, 80, 1.0],
 [10, 10, 50, 50, 0.9]]

这是根据目标框的得分对结果列表进行排序得到的,我们只保留了得分最高的两个目标框,并且舍弃了与它们重叠程度较高的目标框。

在mmdet.core中的NMS算法整合了多类别的情况,可以同时处理多个类别的目标框,保证在不同类别之间进行NMS处理,以及选择保留数量最多的目标框。