从上面这张图可以看出来nms和soft nms的算法原理:
**
经典nms的原理
**设定目标框的置信度阈值,常用的阈值是0.5左右
根据置信度降序排列候选框列表
选取置信度最高的框A添加到输出列表,并将其从候选框列表中删除
计算A与候选框列表中的所有框的IoU值,删除大于阈值的候选框(大于阈值的候选框,表示与置信度最高的勾选框高度重合,所以认为是一个候选框了)
重复上述过程,直到候选框列表为空,返回输出列表**
由此可见,经典nms主要是通过IoU来筛选出候选框。
SoftNMS原理
**
找到置信度最高的Box A,将其置信度不变
计算A与其余所有框的IoU值,利用IoU值,经过f函数,更新其余候选框的置信度值
重复上述过程,直到所有剩余候选框的值被更新
根据置信度的门槛值,过滤出保留的候选框作为Nms的输出
**
Soft-NMS则是在经典nms的基础上增加了一个iou的函数,这个函数主要是来打压每个框的置信度si,对于那些原来置信度不高的Box,一打压,其置信度就会低于置信度门槛值,对于那些置信度很高的Box,即使打压,其置信度依然高,最后得以保留。
由上可见Soft-NMS的IoU主要是用来打压Box的置信度的。
以高斯函数举例,如下所示:
Soft-NMS-高斯
如果iou越大,则对Si的影响越大,使得Si越小,这样就更新了每个Box的Si的值
最后保留Si大于置信度门槛值的方式来筛选出候选框。
SoftNMS最终是保留那些即使iou不是很高,同时置信度不是很低的Box。
Soft-nms有可能导致nms结果增多,效果未必就好
参考文章:
https://blog.csdn.net/lz867422770/article/details/100019587