soft-nms代码解读

nms算法常用在目标检测算法中,而soft-nms算法可以说是nms算法的一种改进或者替代。思考可以应用于其他目标检测算法中,以提高检测精度

论文中说明,soft-nms算法提高了检测准确率,并且计算复杂度与传统nms算法相同。

soft-nms的提出

nms算法很简单,简单来说,就是将不是极大值的框抑制掉,也就是删除为0,只保留下置信度最大的那个框。而问题就出在这里,论文中的话来说,这个方法太hard,下面上图来说

 

上图中,有两匹马,都是待检测目标,也有两个检测到的框,得分分别是0.80和0.95
如果用nms算法,得分最高的框是红色框,得分0.95,而绿色框与红色框通过计算iou,肯定是大于一般我们设置的0.5的,那么绿色框就会被删除,导致少检测到一匹马的情况。此外,nms算法设置阈值也比较麻烦,如果设置过小,那么会出先这样的事情,少检测到目标;如果设置过大,又会经常出先误检。

所以,提出了可以用来代替nms算法的soft-nms算法,算法伪代码如下,详细说一下我对它的理解:

论文中的图片描述可以看出,B是检测出的框的集合,D用来存放最终的结果框,S是框的得分的集合,Nt是阈值,就是Nms算法里设置的阈值。

然后开始代码,

D刚开始是空,若B不是空,则开始接下来的流程,
从S中找到得分最大的框,用m下标来表示,则bm就是当前所有框中,表示得分最大的一个框,用M表示,D与M取交集,从B中去除M,
从剩下的B中,开始循环,红色部分表示nms算法,若最大框M和bi计算出的iou大于阈值,则按nms原理,从B中删除当前bi框,得分S中删除当前si这个分值。绿色部分表示soft-nms算法,最大得分框M和当前框bi的iou值,用来当作函数f(x)的输入,乘bi所对应的得分si,得到最终所需要的si。

然后一直一直,就返回最终的D和S啦~

原nms算法可以表示如下公式:

很容易看出,就是M和bi的iou,如果大于阈值,则删除bi框,得分si为0,反之,还是si

soft-nms算法:

如果小于阈值,那么还是得分si不变,如果大于阈值,si就变成si乘1减最大框M和当前框bi的iou值。

但论文中说它是不连续的,会出现断层,(不知道为啥,没看懂)
所以更多的用高斯加权:

这个公式,满足了 在没有重叠时,这个惩罚函数没有惩罚,在高重叠时,惩罚函数很高。

总之,nms算法直接将大于阈值的框删除,简单粗暴,但是可能会出先上述例子中的问题,检测不够准确。
而soft-nms算法,对于一个与得分最大框的iou大于阈值的框,不是将其删除,而是用较低的分数取代原来较高的分数,取得更好的效果。
(就像我们打扑克一样,两张牌叠的太靠近了,即iou过大,nms算法就直接把后面挡住的牌丢掉了;而soft-nms算法,将牌慢慢的搓出来,效果肯定比丢掉好,不考虑先出完牌赢的情况 哈哈哈哈哈哈)

 
posted @ 2022-06-28 19:00  海_纳百川  阅读(144)  评论(0编辑  收藏  举报
本站总访问量