目录
一、什么是NMS
二、NMS及其优化版本
1、soft NMS
2、GIoU NMS
3、DIoU NMS
4、CIoU NMS
正文
一、什么是NMS
1、定义:
非极大值抑制算法NMS广泛应用于目标检测算法,其目的是为了消除多余的候选框,找到最佳的物体检测位置。
2、原理:
使用深度学习模型检测出的目标都有多个框,如下图,针对每一个被检测目标,为了得到效果最好的那一个,需要使用一定的过滤技术把多余的框过滤掉。NMS应运而生。
现,假设有一个候选BOXES的集合B和其对应的SCORES集合S:
1、找出分数最高的那个框M;
2、将M对应的BOX从B中删除;
3、将删除的BOX添加到集合D中;
4、从B中删除与M对应的BOX重叠区域大于阈值Nt的其他框;
5、重复上述步骤1到4。
伪代码如下:
其中Si可表述成:
源代码如下:
1、在FastRCNN中的python实现:
def nms(dets,thresh): x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] areas = (x2 - x1 + 1) * (y2 - y1 + 1) order = scores.argsort()[::-1] keep = [] while order.size>0: i=order[0] keep.append(i) xx1=np.maximum(x1[i],x1[order[1:]]) yy1=np.maximum(y1[i],y1[order[1:]]) xx2=np.minimum(x2[i],x2[order[1:]]) yy2=np.minimum(y2[i],y2[order[1:]]) w=np.maximum(0.,xx2-xx1+1) h=np.maximum(0.,yy2-yy1+1) inter=w*h iou=inter/(areas[i]+areas[order[1:]]-inter) inds=np.where(iou<=thresh)[0] order=order[inds+1] return keep
View Code
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标检测后处理之NMS(非极大值抑制算法) - Python技术站