NMS(non maximum suppression)非极大抑制
基本过程
-
首先将概率进行排序
-
以概率最大的框为基准,检查重叠率
-
若重叠率超过一个阈值,就剔除后面的框
-
若重叠率小于阈值,就保留这个框
-
接下来,以次大概率的框继续比较IOU
# INPUT:所有预测出的bounding box (bbx)信息(坐标和置信度confidence), IOU阈值(大于该阈值的bbx将被移除)
for object in all objects:
(1) 获取当前目标类别下所有bbx的信息
(2) 将bbx按照confidence从高到低排序,并记录当前confidence最大的bbx
(3) 计算最大confidence对应的bbx与剩下所有的bbx的IOU,移除所有大于IOU阈值的bbx
(4) 对剩下的bbx,循环执行(2)和(3)直到所有的bbx均满足要求(即不能再移除bbx)
NMS的缺点
-
需要手动设置阈值,阈值的设置会直接影响重叠目标的检测,太大造成误检,太小达不到理想情况。
-
低于阈值的直接设置score为0,做法太hard。
-
只能在CPU上运行,成为影响速度的重要因素。
-
通过IoU来评估,IoU的做法对目标框尺度和距离的影响不同。
NMS的改进思路
-
根据手动设置阈值的缺陷,通过自适应的方法在目标系数时使用小阈值,目标稠密时使用大阈值。例如Adaptive NMS
-
将低于阈值的直接置为0的做法太hard,通过将其根据IoU大小来进行惩罚衰减,则变得更加soft。例如Soft NMS,Softer NMS。
-
只能在CPU上运行,速度太慢的改进思路有三个,一个是设计在GPU上的NMS,如CUDA NMS,一个是设计更快的NMS,如Fast NMS,最后一个是掀桌子,设计一个神经网络来实现NMS,如ConvNMS。
-
IoU的做法存在一定缺陷,改进思路是将目标尺度、距离引进IoU的考虑中。如DIoU。
改进方法
-
Soft-NMS(ICCV2017)、Softer-NMS(CVPR2019)、Weighted NMS(ICMEW2017)
后处理方法NMS、Soft-NMS、Softer-NMS、WBC、DIoUNMS 、NMS替代算法Confluence_wbc nms 检测-CSDN博客
分类置信度优先NMS总结:NMS、soft-NMS及Weighted NMS的局限性:
-
对于IOU≥NMS阈值的相邻框,传统NMS的做法是将其得分暴力置0,相当于被舍弃掉了,这就有可能造成边框的漏检,尤其是有遮挡的场景。(在目标检测中)
-
对IOU大于阈值的边框,Soft-NMS采取得分惩罚机制,降低该边框的得分,即使用一个与IoU正相关的惩罚函数对得分进行惩罚。(当邻居检测框b与当前框M有大的IoU时,它更应该被抑制,因此分数更低。而远处的框不受影响。)
-
如果前面讲的soft NMS是通过抑制机制来改善剔除结果(降低超阈值的得分策略),那么Weighted NMS(W-NMS)则是从极大值这个方面进行改进。W-NMS认为Traditional NMS每次迭代所选出的最大得分框未必是精确定位的,冗余框也有可能是定位良好的。因此,W-NMS通过分类置信度与IOU来对同类物体所有的边框坐标进行加权平均,并归一化。其中,加权平均的对象包括M自身以及IoU≥NMS阈值的相邻框。
-
缺点:仍为顺序处理模式,且运算效率比Traditional NMS更低;加权因子是IOU与得分,前者只考虑两个框的重叠面积;而后者受到定位与得分不一致问题的限制。
-
都是以分类置信度优先的NMS,未考虑定位置信度,即没有考虑定位与分类得分可能出现不一致的情况,特别是框的边界有模棱两可的情形时。
-
采用的都是传统的IOU,只考虑两包围盒子之间的重叠率,未能充分反映两包围盒子之间相对位置关系。
-
-
IOU-Guided NMS/IOU-Net(ECCV2018)
-
Adaptive NMS(CVPR2019)
-
DIoU NMS(AAAI2020)
后面一部分转自这篇文章: