交并比IoU——衡量定位精确度
在对象检测任务中,我们希望能够同时定位对象。
人们定义IoU这个概念,是为了评价你的对象定位算法是否精准,但更一般地说,IoU衡量了两个边界框重叠的相对大小。
如果实际边界框是红色的,我们的算法给出这个紫色的边界框,那么这个结果是好还是坏?
交并比(IoU)函数做的是:计算两个边界框交集和并集之比。
在这里,绿色部分为并集,黄色部分为交集。
交并比函数的计算公式如下:
一般约定,在计算机检测任务中,如果IoU大于或等于0.5 就说检测正确。如果预测器和实际边界框完美重叠,IoU就是1。
非极大值抑制
到目前为止你们学到的对象检测中的一个问题是,你的算法可能对同一个对象做出多次检测。
非极大值抑制算法的功能
非最大值抑制这个方法可以确保你的算法对每个对象只检测一次。
在上图中,理论上这辆车只有一个中点,所以它应该只分配到一个格子里,所以理论上应该只有一个格子作出有车的预测。
实践中当你跑对象分类和定位算法时,会对于每个格子都跑一次。所以不仅中点所在的这个格子会认为它里面有车,也许其他相邻的格子也会认为它里面有车。
算法的具体步骤 + 实例演示
- 查看每次报告每个检测结果相关的概率p_c
- 看概率最大的那个(这个例子中是0.9),然后说这是最可靠的检测
- 之后,非最大值抑制会逐一审视剩下的矩形。
所有和这个最大的边界框有很高交并比(高度重叠)的其他边界框的输出就会被抑制 - 接下来,逐一审视剩下的矩形,重复上面的操作
(找出概率最高 p_c最高的一个,然后非最大值抑制算法去掉其他IoU值很高的矩形),直到每个矩形都会被高亮显示或者变暗 - 只输出概率最大的分类结果(高亮显示)
非极大值抑制算法的细节
首先这个19×19网格上跑一下算法,会得到19×19×8的输出尺寸。
对于这个例子,我们简化一下只做汽车检测,去掉c1、c2、c3。
要实现非最大值抑制:
- 去掉p_c小于或等于某个阈值的所有边界框(抛弃所有概率低于0.6的输出边界框)
- 一直选择概率p_c最高的边界框,把它输出成预测结果(lighten)
- 去掉所有与输出边界框IoU大于0.5的边界框(darken)
- 循环第二步和第三步,直到把没处理完的都处理完
对于多目标检测,就跑相应次数的独立的非极大值抑制。