3.7 非极大值抑制(Non-max suppression)

对象检测中的一个问题是算法可能对同一个对象做出多次检测,非极大值抑制可以确保算法对每个对象只检测一次

实践中当运行对象分类和定位算法时,对于每个格子都运行一次,编号1、2、3可能会认为这辆车中点应该在格子内部

这个算法做的是:

1.首先看哪个检测结果相关的概率pcp_{c}(实际上是pcp_{c}乘以c1c_{1}c2c_{2}c3c_{3})概率最大,右边车辆中是0.9,即最可靠的检测,用高亮标记,之后非极大值抑制逐一审视剩下的矩形,所有和这个最大的边框有很高交并比,高度重叠的其他边界框输出就会被抑制

2.逐一审视剩下的矩形,找出概率pcp_{c}最高的一个,在这种情况下是0.8,就认为检测出一辆车(左边车辆),然后非极大值抑制算法就会去掉其他loU值很高的矩形。现在每个矩形都会被高亮显示或者变暗,如果直接抛弃变暗的矩形,就剩下高亮显示的那些是最后得到的两个预测结果

非最大值意味着只输出概率最大的分类结果,但抑制很接近,不是最大的其他预测结果

算法的细节:

首先在19×19网格上执行算法,会得到19×19×8的输出尺寸。简化成只做汽车检测,会得到输出预测概率(pcp_{c})和边界框参数(bxb_{x}byb_{y}bhb_{h}bwb_{w}

1.将所有的预测值pcp_{c}小于或等于某个阈值,如pc0.6p_{c}\le 0.6的边界框去掉

2.剩下的边界框就一直选择概率pcp_{c}最高的边界框,把它输出成预测结果,取一个边界框,让它高亮显示,就可以确定输出有一辆车的预测

3.去掉所有剩下的边界框

如果同时检测三个对象,比如说行人、汽车、摩托,输出向量就会有三个额外的分量。正确的做法是独立进行三次非极大值抑制,对每个输出类别都做一次

Last updated