先放本文的范例代码:https://gitee.com/ppov-nuc/nms
什么是NMS算法?
NMS,全称:Non Max Suppression,是一种广泛用于目标标检测算法中,把最优边界框找出来的技术,即通过迭代的形式,不断的以最大得分的框去与其他框做IoU操作,并过滤那些IoU较大(即交集较大)的框。


NMS算法具体实现
- 输入: 带有置信分数的候选框(Proposal boxes with corresponding confidence scores S)列表和重叠阈值(overlap threshold)
- 输出: 最终保留的检测框.
参考Ross Girshick大神的代码实现nms.py
# --------------------------------------------------------
# Fast R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick
# --------------------------------------------------------
import numpy as np
# dets:带有置信分数的候选框列表
# thresh: 重叠度阈值
def nms(dets, thresh):
x1 = dets[:, 0] # 候选框x1
y1 = dets[:, 1] # 候选框y1
x2 = dets[:, 2] # 候选框x2
y2 = dets[:, 3] # 候选框y2
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) # 选出某一类中置信度最高的候选框BBox1
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.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h
ovr = inter / (areas[i] + areas[order[1:]] - inter) # 计算置信度最高的候选框与其余所有候选框的IOU
inds = np.where(ovr <= thresh)[0] # 若IOU(BBox1, BBox2)>thresh,说明BBox2与BBox1重叠度比较大,需要抛弃。
order = order[inds + 1]
return keep
NMS的执行结果:

NMS缺点
- NMS算法中的最大问题就是它将相邻检测框的分数均强制归零(即将重叠部分大于重叠阈值thresh的检测框移除)。在这种情况下,如果一个真实物体在重叠区域出现,则将导致对该物体的检测失败并降低了算法的平均检测率。
- NMS的阈值也不太容易确定,设置过小会出现误删,设置过高又容易增大误检。
Soft-NMS算法
NMS算法是略显粗暴,因为NMS直接将删除所有IoU大于阈值的框。soft-NMS吸取了NMS的教训,在算法执行过程中不是简单的对IoU大于阈值的检测框删除,而是降低得分。算法流程同NMS相同,但是对原置信度得分使用函数运算,目标是降低置信度得分。
其优点:
- Soft-NMS可以很方便地引入到object detection算法中,不需要重新训练原有的模型、代码容易实现,不增加计算量(计算量相比整个object detection算法可忽略)。并且很容易集成到目前所有使用NMS的目标检测算法。
- Soft-NMS在训练中采用传统的NMS方法,仅在推断代码中实现soft-NMS。作者应该做过对比试验,在训练过程中采用soft-NMS没有显著提高。
-
NMS是Soft-NMS特殊形式,当得分重置函数采用二值化函数时,Soft-NMS和NMS是相同的。soft-NMS算法是一种更加通用的非最大抑制算法。
source:Improving Object Detection With One Line of Code
所以:8 out of top 15 submissions used Soft-NMS in the COCO 2017 detection challenge!
Soft-NMS的执行结果:
参考资料:
网友评论