概括NMS的思想(假定是人脸检测bbox NMS):
- 按照置信度将所有的bbox升序排列(或者降序也行,只是后面的操作都相应改一下)作为一个set,然后:
- 选取set的最后一个bbox,并将该bbox加入pick集合
- 将set中该bbox之前的所有bbox与其计算overlap,将那些overlap大于指定threshold的bbox(包括该bbox自己)从set中删除,更新set
- 回到2,直到set中无元素。
- 返回pick集合,作为NMS之后得到的结果。
要注意,最开始的时候按照置信度将所有bbox升序排列这一步很重要,这决定了最后置信度高的bbox会主导pick集合。
比如https://www.pyimagesearch.com/2014/11/17/non-maximum-suppression-object-detection-python一文中就没有这么做,而是按照bottom right的坐标升序排列,这感觉有点莫名其妙。
刚刚自创了一句顺口溜来归纳总结NMS的思想:
既生瑜,何生亮;除非瑜亮不一样(用overlap来判断相似性)! ^_^
参考:
http://blog.csdn.net/shuzfan/article/details/52711706
http://blog.csdn.net/shuzfan/article/details/52711706