什么是非最大抑制,为什么要使用它? 非最大抑制是一种主要用于目标检测的技术,旨在从一组重叠框中选择最佳边界框。 在下图中,非最大抑制的目的是去除黄色和蓝色框,这样我们就只剩下绿色框了。 图 1:同一对象的多个重叠框 计算 NMS 的过程: 为了大致了解什么是边界框,以及 IOU 的含义,我在同一个帖子上发了两篇文章。(边界框和 IOU)。 这两篇文章中描述的术语和参数在这篇文章中得到了继承。 我将首先继续描述这个特定示例的 NMS 过程,然后解释一个更通用的算法,将它扩展到不同的类。 解释使用的术语: 我们将使用的每个边界框的格式如下:
Stage 1(最初移除boxes): 作为 NMS 的第一步,我们按置信度的降序对框进行排序。 这给了我们: bbox_list = [green_box,blue_box,yellow_box] 然后我们定义一个置信度阈值。 任何置信度低于此阈值的框都将被删除。 对于此示例,让我们假设置信阈值为 0.8。 使用此阈值,我们将删除黄色框,因为其置信度 < 0.8。 这给我们留下了: bbox_list = [green_box, blue_box] 图 2:移除黄色框 Stage 2(boxes的 IOU 比较):
图 3:非最大抑制的结果 算法:
代码: 下面的代码是执行非最大抑制的基本功能。 以下代码段中使用的 IOU 函数与上一篇文章中使用的函数相同(代码可在此处找到)。 可以优化以下用于计算 NMS 的代码以提高性能。
该函数将特定图像的框列表、置信阈值和 iou 阈值作为输入。 (我已将它们的默认值分别设置为 0.7 和 0.4)
|