NMS过滤包含关系的检测框

NMS简介

对于目标检测任务而言,后处理主要包含阈值过滤与NMS两大步。

对于需要进行NMS的一系列检测框,基本的算法思路是:

  1. 选出得分最高的检测框
  2. 抑制掉与选中检测框IoU大于设定的IoU阈值(0.5左右)的其他检测框
  3. 如果还有检测框未被处理,回到第一步
  4. 如果所有检测框都已处理,结束算法

对于不同目标类别的检测框,往往需要按类别分别进行NMS。

存在的问题

对于现有的NMS算法,如果存在大小框为包含关系,但两个检测框的IoU还没有达到阈值(特别是在遥感图像中,俯视视角的图像检测,可能出现这样的情况),导致NMS不能有效抑制掉其中一个,且不能降低IoU的阈值设置。
比如我们面临的检测框如下:
待处理检测框
框的xyxy表示为:
[[ 2. 4. 300. 260. 0.96]
[230. 40. 305. 82. 0.86]
[ 50. 50. 200. 220. 0.57]
[ 10. 150. 270. 290. 0.88]]

当设置IoU阈值为0.5的时候,可以发现每个的IoU都不超过0.5,都过滤不掉,但是我们只想保留这些高度重叠的框里面得分最高的一个。这时候需要额外的过滤条件来滤除这样的检测框。

NMS过滤包含关系的检测框

改进后的函数如下

import numpy as np

def nms(bboxes:np.ndarray, IoU_thre=0.5) -> np.ndarray:
	# [[xmin, ymin, xmax, ymax, conf], [xmin, ymin, xmax, ymax, conf], ...]

    rate_thre = 0.1

    bboxes = bboxes.reshape((-1, 5))
    x1 = bboxes[:, 0]
    y1 = bboxes[:, 1]
    x2 = bboxes[:, 2]
    y2 = bboxes[:, 3]
    scores = bboxes[:, 4]
    order = scores.argsort()
    areas = (x2 - x1) * (y2 - y1)
    picked_boxes = []
    while order.size > 0:
        index = order[-1]
        picked_boxes.append(bboxes[index])
        x11 = np.maximum(x1[index], x1[order[:-1]])
        y11 = np.maximum(y1[index], y1[order[:-1]])
        x22 = np.minimum(x2[index], x2[order[:-1]])
        y22 = np.minimum(y2[index], y2[order[:-1]])

        # 检测框之间的面积比
        rate = areas[index] / areas[order[:-1]]
        rate[rate > 1] = 1 / rate[rate > 1]

        w = np.maximum(0.0, x22 - x11)
        h = np.maximum(0.0, y22 - y11)
        intersection = w * h

        # IoU
        ratio = intersection / (areas[index] + areas[order[:-1]] - intersection)

        # 相交的检测框里IoU与面积比相近(<rate_thre)的认为存在包含或者高度重叠关系
        # 过滤掉上述检测框以及IoU>IoU_threde 
        order = order[:-1][(~((abs(ratio - rate) < rate_thre) * (ratio > 0.))) * (ratio <= IoU_thre)]
    return np.array(picked_boxes)

算法思路在于,计算IoU的同时,计算两个检测框的面积之比。如果两个相交的检测框的面积之比与IoU高度接近(小于一定的阈值),那么这两个框中的小框大部分落在大框范围内,如上图0.86和0.96的两个框。特别的,如果两个检测框面积之比与IoU一致,则是完全的包含关系。
原来只依据IoU进行过滤,新方法添加了IoU和面积比的依据。

下面是过滤结果:
NMS过滤效果

猜你喜欢

转载自blog.csdn.net/YanHS_/article/details/128210035
NMS