概述
目标检测中的Region Proposal动辄上千,会形成大量有重合的检测框,需要使用某些算法对检测框去重。
常用的两种算法是NMS和Soft-NMS。
NMS
全称‘非极大值抑制(non maximum suppression)’.
算法思想很简单,按照分类概率排序,概率最高的框作为候选框,其它所有与它的IOU高于一个阈值(这是人工指定的超参)的框其概率被置为0。然后在剩余的框里寻找概率第二大的框,其它所有与它的IOU高于一个阈值(这是人工指定的超参)的框其概率被置为0。依次类推。
最终所有的框相互之间的IOU都是小于超参阈值的,或者概率被置为0了。剩下的所有概率非0的框就是最终的检测框。
NMS的缺点
首先,NMS算法需要一个超参,超参这玩意是个玄学,大了不行,小了也不行,很难平衡。
其次,NMS会将相邻的两个大概率目标框去掉一个,造成漏检,比如:
Soft-NMS
NMS算法是略显粗暴,因为NMS直接将删除所有IoU大于阈值的框。soft-NMS吸取了NMS的教训,在算法执行过程中不是简单的对IoU大于阈值的检测框删除,而是降低得分。算法流程同NMS相同,但是对原置信度得分使用函数运算,目标是降低置信度得分,伪代码如下:
其中红框内是NMS的步骤,绿框内是Soft-NMS的步骤(这两个步骤不共存,二选一)。
Soft-NMS没有在上述流程删除任何框,最后如果框的概率还大于一定值(如0.001,这又是一个超参了),则认为是一个有效检测框。
经典的NMS算法将IOU大于阈值的窗口的得分全部置为0,可表述如下:
soft-NMS置信度重置函数f有两种形式改进,一种是线性加权的:
一种是高斯加权的(线性的不平滑,高斯的加权函数是连续且平滑的):
可以说NMS是Soft-NMS特殊形式,当得分重置函数采用二值化函数时,Soft-NMS和NMS是相同的。soft-NMS算法是一种更加通用的非最大抑制算法。
论文作者提供的代码实现:https://github.com/bharatsingh430/soft-nms
Soft-NMS缺点
Soft-NMS的阈值仍然要手动指定,作者提到Soft-NMS对SSD、YOLO v2性能提升不明显。
总结
除了这两者还有很多检测框合并策略,比如Softter-NMS,还有旷视出品的IOU-Net等等。
参考资料
Soft-NMS论文原文: Soft-NMS: Improving object detection with one line of code
csdn博客:Soft-NMS: Improving object detection with one line of code