0 NMS介绍
NMS(Non-maximum suppression)是非极大值抑制, 目的是过滤掉重复的框。 为了保证检测的准确性, 检测网络的输出框一般都比较密集, 对一个物体, 会有多个预测框,NMS就是为了过滤掉这些重复的框, 保留质量最好的那一个框。
NMS的效果如下:
可能初看这个算法的同学会问, 为什么不直接取置信度最大的呢?这是不行的, 从上图可以直观的看出来, 如果直接取最大值,最终选取的2个框都是左边这位女士。NMS本质上要取的是局部的极大值, 而并不是最大值。
1 算法
1 首先对所有检测框按分类置信度进行排序, 选取置信度最高的那个框, 加入候选框集合;
2 删除掉与候选框IoU大于某个阈值的框(大于阈值的说明与候选框是重复的,而已经选出来的候选框质量更高被保留);
3 对剩余的框重复执行步骤1和2, 直到剩余的框为空。
算法描述如下:
2 存在的问题
1 从上面的算法过程描述可以看出, 检测框的置信度是按分类置信度来确定的, 但是这两个并无直接关联, 分类置信度高不一定意味着框的质量好。
2 直接过滤掉与已有候选检测框IoU大于某个阈值的框, 可能会误过滤原本靠的非常近的物体的检测框。
针对问题2, 有人提出了soft-NMS, 对于IoU大于阈值的框, 不是直接过滤掉, 而是降低它的置信度。这样在下一轮比较中可以继续进行处理, 最后对置信度小于某一阈值的进行过滤。 如上图中所示, soft-NMS 与NMS的区别只在于对重叠框的处理。