非极大值抑制(NMS)详解
非极大值抑制(Non-Maximum Suppression)
在学习目标检测,我们都会遇到非极大值抑制,什么是非极大值抑制呢?简单的说就是抑制不是极大值的元素。在目标检测中,我们不仅需要识别物体的类别,还需要用边界框把物体圈注。在用训练好的模型进行测试时,就会预测出一系列的候选框,这些候选框显然有很多是多余的,这个时候我们就需要用NMS来删除多余的候选框。
IOU(Intersection over Union)
简单的说就是用两个矩形的交集的面积与两个矩形的并集的面积之比 。
本部分主要是对NMS具体实现的理解 ,故不再叙述其他的地方,网上能找到很多优秀的资料参考。
在tensorflow中已经有封装好的求非极大值抑制的函数,可参考tf.image.non_max_suppression
现在以一个具体的实例来解释:
首先我们选定一个IOU阈值,假设IOU=0.5。然后将所有的bounding box按照得分由高到低进行排序,然后选中得分最高的窗口,遍历计算剩余的窗口与该窗口的重叠面积比例(IOU),如果IOU大于阈值0.5,则将窗口删除。然后,再从剩余的窗口中选中一个得分最高的,重复上述过程。直至所有窗口都被处理。现在用上面给的函数来实现:
我用手写推导过程为:
可以看到经过三轮后,把5号框和2号框删除,与上边的程序的输出结果一致。最终保留1,3,4号框。