对于目标检测算法Postprocess部分,最早用的是NMS,后面出现了Soft NMS和Softer NMS,本文将分别解释它们的动机和原理,希望能对大家有所帮助。Tensorflow, pytorch等主流框架中均有NMS的实现。
NMS,它的全称为“non-maximum supression”。为什么要使用nms呢?因为在目标检测任务中,不管是one-stage还是two-stage的算法,最终算法都会预测出多个proposals。在后处理部分中,需要对这些proposals做筛选。
(1)优先选择分类score较高的proposal;
(2)跟分类score重叠较多的proposals,可以视为冗余的预测框;
(1)将算法预测出的所有proposals,按照不同的类别标签分组;
(2)对于每一个类别的所有proposals,记作BBB,筛选后的proposals集合记作DDD,执行如下操作,
(a)选择score最高的proposal,记作MMM,加入到DDD中;
(b)计算剩余的proposals与MMM之间的Iou,若大于阈值Nt,则舍弃,否则保留;
(c)若步骤(b)中得到的所有proposals为空,则跳回步骤(2),否则执行步骤(a)。
(3)经过后处理之后,所有类别保留的有效proposals集合为S={D_{1}, D_{2}, …, D_{c},其中c表示目标类别的数量;
伪代码如下图,
由上可见,NMS算法保留score最高的预测框,并将与当前预测框重叠较多的proposals视作冗余,显然,在实际的检测任务中,这种思路有明显的缺点,比如对于稠密物体检测,当同类的两个目标距离较近时,如果使用原生的nms,就会导致其中一个目标不能被召回,为了提高这种情况下目标检测的召回率,Soft-NMS应运而生。对于Faster-RCNN在MS-COCO数据集上的结果,将NMS改成Soft-NMS,mAP提升了1.1%。
Soft-NMS,原文的标题为“Improving Object Detection With One Line of Code”。NMS采用“一刀切”的思想,将重叠较多的proposals全部视作冗余,而Soft-NMS,采用了“迂回”战术,它认为重叠较多的proposals也有可能包含有效目标,只不过重叠区域越大可能性越小。参见下图,NMS会将绿色框的score置0,而Soft-NMS会将绿色框的score由0.8下降到0.4,显然Soft-NMS更加合理。
那么问题来了,怎么建立Iou和score之间的联系呢,文章中给出的公式如下,
其中DDD表示所有保留的有效框集合,bi 表示待过滤的第iii个预测框,si 为第i个预测框对应的分类score。这里使用了高斯函数作为惩罚项,当iou=0时,分类score不变,当0<iou<10<iou<10 因为Soft-NMS和NMS的区别很小,这里就不再详细解释了,引用论文中的伪代码,如下图, 作者使用VGG-16 faster R-CNN测试了MS-COCO数据集中的图片,论文中贴了两张检测失败的代表图片,如下图, 左图存在的问题:检测出来的2个proposals,沿着y坐标轴方向的定位均不准确; 结论:检测算法预测出来的proposals的坐标不一定准确; 右图存在的问题:检测出来的2个proposals,右边的框分类score较高,但是却沿着x坐标轴方向的定位不准确; 结论:分类score高不一定定位score高,也即classification confidence和 localization confidence不具有一致性。 其中,xe 为预测的box位置,σ表示box位置的标准差,衡量了box位置的不确定性。 因为groundtruth位置是确定的,所以groundtruth box的坐标为标准差为0的高斯分布,也即Dirac delta函数,公式如下, 其中,xg 为groundtruth box的坐标。 回归任务的目的是让预测框尽可能逼近真实框,也即Pθ(x)和PD(x)为同一分布,衡量概率分布的相似性,自然而然会想到KL散度,关于KL散度的概念,大家可以参见维基百科,值得一提的是,KL散度本身具有不对称性,通常,在实际应用中为了使用对称性,使用的是KL散度的变形形式,但本文中没有这么做。对公式做化简后,最终的简化形式如下, 显然,softer-NMS基于回归出的定位confidence,对所有与MMM的IoU超过阈值Nt的proposals,使用加权平均更新其位置坐标,从而达到提高定位精度的目的。因为softer-NMS关注的是单个框的定位精度,而NMS和soft-NMS关注的是单个框的冗余性,显然关注点不同,所以softer-NMS可以和soft-NMS组合使用,此时效果更佳。 NMS:只适用于图片中目标比较稀疏的场景,即目标之间的间距较大; soft-NMS:可以部分解决出现稠密目标的情况(ps:Face++提出了RepLoss,从模型的角度解决这一问题,大家感兴趣也可以去读读该论文); softer-NMS:该后处理方法采用"bagging"的思想,通过后处理提高定位精度,可以和soft-NMS组合使用。 https://arxiv.org/pdf/1704.04503.pdf https://arxiv.org/pdf/1809.08545.pdf https://megvii.com/newscenter/1192.3 步骤
3 Softer-NMS3.1 动机
3.1.1 现有方法的问题
3.1.2 本文解决办法
针对上面的问题,(1)既然proposals的坐标不准确,那么即便NMS也无能为力了,所以需要重新设计坐标回归的方式);(2)既然分类score高不一定定位score高,那么NMS和Soft-NMS的做法(只基于分类score对proposals做排序)是不准确的,所以需要同时预测出检测框的定位score。3.2 算法部分
Softer-NMS的算法框架如下图,可以看出,它跟fast R-CNN是非常相似的,区别在于回归任务中多了一个Box std分支,这里需要解释一下,比如预测出的bounding box的坐标为$x_{1}, y_{1}, x_{2}, y_{2} $,该分支会预测出每个坐标的标准差,显然,当坐标的标准差越小时,表明预测得到的坐标值越可信,也即Box std分支用于表征定位任务的置信度。
3.2.1 定位任务
在fast R-CNN中,作者使用的是均方误差函数作为定位损失,总的目的是让定位出的坐标点尽可能逼近groundtruth box。本文中为了在定位坐标同时输出定位score,使用了高斯函数建模坐标点的位置分布,公式如下,3.2.2 定位损失
3.2.3 后处理
经过上面的网络部分,Class分支会输出类别score,Box分支会输出box的4个坐标和这4个坐标对应的标准差(定位score),符号表示如下,
基于这些信息,新的后处理算法如下图,4 总结
5 参考文献
————————————————
版权声明:本文为CSDN博主「diligent_321」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/diligent_321/article/details/85859462