本文来源公众号“DeepDriving”,仅用于学术分享,侵权删,干货满满。
原文链接:目标检测中的非极大值抑制(NMS)算法
0 导读
经典的Anchor-Based目标检测算法(YOLO、SSD、Faster-RCNN)中都包含一个生成候选边界框的过程,出于提高目标检测召回率的目的,通常会生成数量众多的候选边界框,这些候选边界框有不同的长宽比,同时每个候选边界框都会被分配一个置信度分数。在目标检测的后处理阶段,可以先通过阈值过滤掉大部分置信度低于阈值的候选边界框,但是对于同一个目标,还是有可能会有好几个置信度高于阈值的边界框会留下来,这时候就需要通过非极大值抑制(Non-Max Suppression, NMS)算法来去掉重复的边界框。下图展示了目标检测算法中从生成候选边界框到用NMS算法筛选边界框的过程。
1 NMS算法的原理
由于目标在图像中的形状和大小可能是各种各样的,所以为了能够较好地在图像中检测这些目标,通常会设计去生成数量众多、长宽各异的候选边界框。但是对于一个目标检测任务来说,理想的情况是一个目标只需输出一个最准确的边界框即可。
为了从多个候选边界框中选择一个最佳边界框,通常会使用非极大值抑制(NMS)算法,这种算法用于“抑制”置信度低的边界框并只保留置信度最高的边界框。
NMS算法的伪代码如下:
算法的实现过程为:
输入:候选边界框集合B(每个候选框都有一个置信度)、IoU阈值N
输出:最终的边界框集合D(初始为空集合)
- 1. 对集合B根据置信度进行降序排序;
- 2. 从集合B中选择第一个候选框(置信度最高),把它放入集合D中并从集合B中删除;
- 3. 遍历集合B中的每个候选框,计算它们与D集合中这个候选框的IoU值。如果IoU值大于阈值N,则把它从集合B中删除;
- 4. 重复步骤2~3直到集合B为空。
下图展示了NMS算法的过程及效果:
从NMS算法的原理,可以比较容易想到该算法的缺点:
1. 仅依据边界框的置信度评价边界框的质量好坏,但是在目标检测任务中需要的是能准确框出目标的边界框,而边界框的置信度与其是否框得准确这二者之间并没有强相关,可能会出现框的更准但置信度低的边界框被其他置信度更高但框不准的边界框抑制掉;
2. 如果目标之间出现大面积重叠,目标A边界框的置信度大于目标B边界框的置信度,它们之间的IoU大于阈值,那么目标B的边界框就会被抑制,导致目标B被漏检。
2 Soft-NMS算法
针对NMS算法简单粗暴地删除IoU大于阈值的候选框这一缺点,Soft-NMS算法选择了另外一个方法,那就是降低这些候选框的置信度而不是直接删除。比如针对上图的情况,并不是直接删除置信度为0.8的那两个框,而是将它们的置信度降低。
原始的NMS算法的置信度重置函数可表示为:
Soft-NMS算法的置信度重置函数有两种方式,一种采用线性加权:
另一种采用高斯加权:
Soft-NMS算法的伪代码如下:
相比于原始的NMS算法,Soft-NMS算法改变的只是当IoU大于阈值时的置信度重置方式,但是却可以提升目标检测的召回率,而且Soft-NMS算法只需应用在推理阶段,不需要重新训练模型,修改一行代码即可实现,可以非常方便地集成到所有使用NMS算法的目标检测算法中。
NMS算法和Soft-NMS算法的效果对比,左边蓝色框为NMS算法的结果,右边红色为Soft-NMS算法的结果。
3 参考资料
[1] Soft-NMS – Improving Object Detection With One Line of Code.
[2]https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c
[3] https://www.analyticsvidhya.com/blog/2020/08/selecting-the-right-bounding-box-using-non-max-suppression-with-implementation/
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。