在目标检测中,很多时候都需要从最后的多个备选框中甄选出最合适的框(box),但是很可能的情况是,对同一个位置的物体,有多个概率差不多的备选框,这时候怎么办?原则就是:用重叠面积来剔除。如果有两个框重叠的部分比较多(这里需要引入一个人为定义的量
,重叠多少才剔除掉),就把概率低的剔除掉(或者叫抑制掉)。具体的方法就叫做极大值抑制,方便记忆的理解:使用极大概率的备选框抑制其它位置相近的备选框。
你可能会说,直接保留一个最大的一个不就得了!那可不行,因为可能一张图像上会有同一类的多个物体,比如说有两辆汽车,你总不能只检测出一辆来吧?
方法的具体实现上,这篇文章的matlab写的很好。
方法的输入:一些备选框,每个备选框包含备选框的坐标和属于相应类别的概率(注意:这里所有类共享这些备选框。换一种说法,假设有20种类别,对于同一个备选框的20个类别的概率之和等于1。这里我也有点糊涂,可能跟Softmax的输出格式有关);一个重叠度的阈值。
输出:每个类别的备选框(们)。
使用20个类别是因为突然想到PASCAL库里面好像就是20个类别
具体:
对于第一个类别:
步骤1
先选个概率极大框加入最终结果(保证至少有一个),然后计算其他框和这个最大框的相交面积占两者总面积的比率(Intersection of Union - IoU),之后把比率比较大的剔除。
举个例子(图片来自 http://www.uco.es/~in1majim/proyectos/libpabod/):
比如说:当前识别的是Person,输入了10个的备选框,这样弄一下,起码先把最大的保留了(起码找到了1个人,比如说person1吧),然后可能剔除了5个(那些绿色的框就都没了)。其实这里想一下就能明白,把重叠度高的剔除掉了,剩下的就比较可能是其他人了。
然后再重复步骤1
:选出剩下的里面概率极大框加入最终结果(选出来了第二个,比如说person2吧),然后计算IoU,然后剔除(那些蓝色的框也没了)……
再重复步骤1
……
……
直到:某一次剔除后,没有剩下的框了,那么这一个类别的框就就找全了。
开始找第二个类别……
好东西再安利一下:Matlab实现