目标检测入门之矩形框IOU计算

1. 引言

在目标检测领域中,我们经常用IOU来衡量检测框和标注真实框之间的重叠程度,那么究竟该如何计算IOU呢?闲话少说,我们直接进入今天的主题...

2. 什么是IOU?

  • IOU(交并比 Intersection over Union)是一个术语,用于描述两个框的重叠程度。重叠区域越大,IOU的值越大.
  • IOU主要用于与对象检测相关的应用程序中,在该应用程序中,我们训练模型输出一个完全包围目标的外接矩形框。例如,在上图中,我们有一个绿色框和一个蓝色框。绿色框表示真实框,蓝色框表示我们模型的预测框。训练模型的目的是不断改进其预测框的输出,直到蓝色框和绿色框完全重叠,即两个框之间的IOU等于1。
  • IOU经常用于非最大值抑制中,基于检测框的置信度消除同一个对象的多个预测框,用以保留置信度最高的预测框.

3. IOU的计算

在目标检测中,我们假设框1由[x1,y1,x2,y2]表示,同样框2由[x3,y3,x4,y4]表示,如下图1所示。

此时IOU的计算公式如下:

用图2表示如下:

接下来我们来一步一步计算相应的矩形框的交集和并集对应的面积.

3.1. 计算交集面积

直观来看,两个矩形框的交集有多种情况,我们直观的来观察下图3,明显右下两个矩形框完全重合交集面积最大.

  • 首先我们将相交矩形的坐标表示为 [x_inter1,y_inter1,x_inter2,y_inter2],分别代表相交矩形的左上角和右下角的坐标。
  • 接着从定义参考坐标系开始。我们使用+X轴向右移动,+Y轴向下移动的计算机图形学惯例。
  • 为了计算相交矩形的左上角坐标,我们比较每个框的左上角。我们可以从上面的例子中看到,x_inter1可以通过查看哪个框的左上角更靠右找到。类似地,可以通过查看哪个框的左上角低于另一个框来找到y_inter1。从数学上讲,它们可以总结为:
  • 为了计算相交矩形的右下角坐标,我们比较每个框的右下角。x_inter2可以通过查看哪个框的右下角更偏左来找到。类似地,可以通过查看哪个框的右下角高于另一个框来找到y_inter2。类似地,它们可以总结为:
  • 现在我们有了相交矩形的坐标,则交集的面积就是矩形的面积。(在实际应用中,我们将采用宽度和高度的绝对值,以确保即使框的顺序发生变化,宽度和高度仍为正值;即,如果x_inter1>x_inter2,我们仍将获得宽度的正值)

3.2. 计算并集面积

  • 框的并集是两个框所覆盖的总面积,如图2所示。
  • 为了找到总面积,我们首先计算各个矩形框的面积。
  • 如果我们查看两个框所覆盖的总面积,我们会看到两个框都覆盖了相交矩形的部分,即相交矩形的面积包括在box1区域和box2区域中。
  • 由于我们只想计算一次公共相交面积,我们可以从两个框的总面积中减去我们计算的相交面积。即:

3.3. 计算交并比

通过上述计算公式,我们计算出了两个矩形框相应的交集和并集的面积,此时矩形框的IOU计算公式如下:

观察上述公式,可以得到如下结论:

  • 两个框的IOU可以取0到1之间的任何值。
  • 如果两个框不相交,则它们的相交区域将为0,因此IOU也将为0。
  • 如果两个完全重叠的矩形框,则交集的面积将等于其并集的面积,因此IOU将为1。

4. 代码实现

接着,让我们用python编写一个函数来计算开篇狸花锚图像中绿色和蓝色框的IOU。

  • 函数IOU接受两个框,即box1和box2作为输入。每个框中的数据都是一个包含[x1,y1,x2,y2]的列表,它表示左上角和右下角的坐标。
  • 如前文所述,我们先计算相交矩形的面积,然后是并集的面积。
  • abs函数是python中用于计算取绝对值的内置函数。这确保了我们永远不会以负宽度或负高度计算结果。
  • 返回的IOU是float类型的值,介于0和1之间。

运行结果如下:

5. 总结

本文介绍了目标检测中最常用的衡量预测框准确度的标注即IOU的概念和详细的图示,并给出了完整的代码.

您学废了吗?

参考链接