将NMS就必须先讲IOU,
IOU就是交并比,两个检测框的交集除以两个检测框的并集就是IOU
为什么要做NMS操作,因为要去除同一个物体的多的冗余检测框
那么NMS算法是如何做的呢?
以上是算法的流程图
下面讲解算法的流程
首先输入是预测框的集合B,置信度分数S,IoU的阈值
τ
\tau
τ,以及置信度的阈值T
①首先我们创建一个过滤后的检测框的集合F
将这个集合设为空集进行初始化
②根据置信度的阈值过滤已有的预测框,根据我们设置的置信度的阈值T,假设我们现在设置阈值T为0.7,那么现有的置信度小于0.7的检测框就都被排除掉了,剩下的大于0.7的才能入选到预测框的集合B中去。
比如对于上面这张图,设置置信度阈值为0.7的话,这个左边的置信度为0.3的检测框就不可能作为B集合中的一部分了。
③对于入选B集合的检测框,我们按照置信度分数进行排序,因为如果要保留检测框,肯定是希望保留置信度更高的。
④做一个while循环,只要B集合不为空
⑤从B集合中选择置信度最高的检测框b,放到我们最终需要的返回结果F集合中,b肯定有冗余框,但是不要紧,为什么呢?因为b是置信度分数最高的,就算要删除冗余框,b也是会被保留下来的。
⑥对于B集合中剩下的检测框,我们逐个将其与b做IoU的计算,这个计算结果只要大于IoU的阈值
τ
\tau
τ,就可以视作是b的冗余检测框,从B中删除
循环重复上面的过程,直至B变为一个空集合