往期文章:
- AI/CV面试,直达目录汇总
- 【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化
一、NMS
非极大值抑制(Non-Maximum Suppression,NMS
),并不是深度学习时期,目标检测的产物。在传统的图像处理领域,就已经引入了NMS
算法。所以,他是老算法的新使用。
- 目的: 为了消除多余的框,找到最佳的物体检测的位置
- 思想:选取那些邻域里分数最高的窗口,同时抑制那些分数低的窗口
- 本质:搜索局部极大值,抑制非极大值元素
NMS
算法的步骤:
- 按某个数值从高到低进行排序(高低的可以是置信度)
- 低的依次与最高的进行
IOU
的对比,超过指定阈值的,将会被踢除(分数又低,还跟高的长的相近,活该被删除),否则,就先暂时留着 - 留下来的,重复步骤1和2,直到不再发生改变为止
在Canny
边缘检测、霍夫变换圆形检测里面,也都会用到NMS
对多余的点、圆心进行去除。那此事排序用到的值就不再是置信度了,是梯度的值、圆心点的投票数了。
这两个更多细节的,可以参考这里:
- 图像处理笔记3-Canny边缘检测算法与原理
- 图像处理笔记4-霍夫变换直线检测、圆检测
问一个面试官常快问快答的问题:
是阈值低,最后留下的多,还是阈值高,最后留下的多?
答案是:阈值高,留下的多。
因为你的目的是要把次的、不重要的给剔除掉。那么你设定的重复阈值高,自然重复的就少,删除的也就少,最后留下来的自然就变多了。
二、Soft NMS
Soft NMS
是 NMS
的一种变种,改进版本。从名字我们就大概能猜出来一些:没有NMS那么的硬(hard
),比较的软(soft
)。
绝大部分目标检测方法,最后都要用到 NMS-非极大值抑制进行后处理。 通常的做法是将检测框按得分排序,然后保留得分最高的框,同时删除与该框重叠面积大于一定比例的其它框。那为什么还要改进,推出一个Soft NMS
呢?
NMS
的这种贪心式方法存在如下图所示的问题:
红色框和绿色框是当前的检测结果,二者的得分分别是
0.95
和0.80
。如果按照传统的NMS
进行处理,首先选中得分最高的红色框,然后绿色框就会因为与之重叠面积过大而被删掉。
另一方面,NMS的阈值也不太容易确定,设小了会出现绿色框因为和红色框重叠面积较大而被删掉,设置过高又容易增大误检。
我两个都要,那该给个什么思路呢?不要粗鲁地删除所有IOU大于阈值的框,而是降低其置信度。
Soft NMS
思路和做法如下:
- 相邻区域内(IOU超过阈值)的检测框的分数进行调整,而非彻底的抑制,从而提高了高检索率的情况下的准确率;
- 在低检索率时,仍能对物体检测性能有明显提升。
三、NMS和SoftNMS的对比学习
原来的NMS可以描述为:将IOU
大于阈值的窗口的得分全部置为0
。公式如下:
用人话解释下NMS
的公式,就是:
- 分数低的框与分数高的框的
iou
小于阈值的,不变 - 分数低的框与分数高的框的
iou
大于或等于于阈值的,置信度直接置为0
,也就是被踢出了
而SoftNMS可以描述为:将IOU大于阈值的窗口的得分进行改写,iou越大,(1-iou)就越小。线性加权的公式如下:
对比NMS,用人话解释下softNMS
的公式,就是:
- 分数低的框与分数高的框的
iou
小于阈值的,不变,与NMS处理一样 - 分数低的框与分数高的框的
iou
大于或等于于阈值的,置信度不再置为0
,而是通过置信分数*(1-iou),得到新的分数,进行替换.
对比总结:
- 在NMS的算法里面,对于IOU超于阈值的检测框,直接剔除;
- 而Soft NMS,对于IOU超过阈值的检测框,不是直接删除,而是改变该检测框的置信度,踢出的工作留给了置信度阈值来做。
又回到前面两匹马的问题上来。假设框1
的置信度是0.95
,框2
的置信度是0.8
,还有一个框3
的置信度是0.7
。我们最终的目的是将框1和框2保留下来,将框3进行剔除掉。
- 假设使用的是NMS,那么框2和3都会被剔除掉,因为他们与框1的iou都比较高,很大可能性是高于阈值的,都被提除掉了。
- 那假设使用的是softNMS,框2和3的置信度就会被重新改写。2和1的iou较小,改写之后的置信度是0.4;3和1的iou较大,置信度会更低,大概是0.2。那假设筛选阈值正好是0.3,就恰好把2留下,把3踢出了。
- 但是,这里也有一个问题就是置信度的阈值如何选择?作者在这里依然使用手工设置的值,依然存在很大的局限性,所以该算法依然存在改进的空间。
针对这个问题,我也帮你们提前问了chatGPT,也给出了一个较为总结性的回答,如下所示。你们觉得它回答的如何呢?
- Soft-NMS – Improving Object Detection With One Line of Code
- IOU-Net , Acquisition of Localization Confidence for Accurate Object Detection
- Matrix NMS,SOLOv2: Dynamic and Fast Instance Segmentation
通过对chatGPT的询问,我们又知道了两个NMS,分别是IoU NMS
和 Matrix NMS
,这是我们新的收获。后面我们会继续补充这块内容
上图是IoU-Net论文的测试结果,展示了 IoU和召回率的关系,No-NMS是召回率的上界,可以看到IoU-NMS的召回率更高,且在更高的IoU下,IoU-NMS与上界的差距越小。
参考链接:
- NMS和soft-nms算法
- 哔哩哔哩视频