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的概念和详细的图示,并给出了完整的代码.
您学废了吗?
关注公众号,后台回复 交并比 , 即可获取源码.
关注公众号《AI算法之道》,获取更多AI算法资讯。
参考链接
版权声明:本文为CSDN博主「赵卓不凡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sgzqc/article/details/121494018
暂无评论