3.7 非极大值抑制(Non-max suppression)
Last updated
Last updated
对象检测中的一个问题是算法可能对同一个对象做出多次检测,非极大值抑制可以确保算法对每个对象只检测一次
实践中当运行对象分类和定位算法时,对于每个格子都运行一次,编号1、2、3可能会认为这辆车中点应该在格子内部
这个算法做的是:
1.首先看哪个检测结果相关的概率(实际上是乘以、或)概率最大,右边车辆中是0.9,即最可靠的检测,用高亮标记,之后非极大值抑制逐一审视剩下的矩形,所有和这个最大的边框有很高交并比,高度重叠的其他边界框输出就会被抑制
2.逐一审视剩下的矩形,找出概率最高的一个,在这种情况下是0.8,就认为检测出一辆车(左边车辆),然后非极大值抑制算法就会去掉其他loU值很高的矩形。现在每个矩形都会被高亮显示或者变暗,如果直接抛弃变暗的矩形,就剩下高亮显示的那些是最后得到的两个预测结果
非最大值意味着只输出概率最大的分类结果,但抑制很接近,不是最大的其他预测结果
算法的细节:
首先在19×19网格上执行算法,会得到19×19×8的输出尺寸。简化成只做汽车检测,会得到输出预测概率()和边界框参数(、、和)
1.将所有的预测值小于或等于某个阈值,如的边界框去掉
2.剩下的边界框就一直选择概率最高的边界框,把它输出成预测结果,取一个边界框,让它高亮显示,就可以确定输出有一辆车的预测
3.去掉所有剩下的边界框
如果同时检测三个对象,比如说行人、汽车、摩托,输出向量就会有三个额外的分量。正确的做法是独立进行三次非极大值抑制,对每个输出类别都做一次