Tic商业评论

关注微信公众号【站长自定义模块】,定时推送前沿、专业、深度的商业资讯。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

  • QQ空间
  • 回复
  • 收藏

IOU (Intersection over Union)

lijingle 目标检测 2022-1-3 19:07 2278人围观

什么是IOU,用在什么地方?
IOU(Intersection over Union)是一个术语,用于描述两个框的重叠程度。 重叠区域越大,IOU 越大。
IOU 主要用于与物体检测相关的应用中,我们训练一个模型来输出一个完美地围绕一个物体的box。 例如在下图中,我们有一个绿色框和一个蓝色框。 绿色框代表正确的框,蓝色框代表我们模型的预测。 该模型的目标是不断改进其预测,直到蓝色框和绿色框完美重叠,即两个框之间的 IOU 变为等于 1。

图 13:物体检测任务的描述


IOU也用于非最大抑制,用于消除围绕同一对象的多个框,基于哪个框具有更高的置信度。 我将在下一篇文章中更详细地讨论非最大抑制。


计算IOU:

让我们假设框 1 由 [x1, y1, x2, y2] 表示,框 2 由 [x3, y3, x4, y4] 表示。 (稍后我们将使用此约定来计算面积。)

图 2:计算 IOU 的公式的图示


1.计算框相交的面积

图 3:box可以以多种不同的方式相交,甚至完全重叠


让我们将相交矩形的坐标表示为

[x_inter1, y_inter1, x_inter2, y_inter2 ],表示交点左上角和右下角的坐标。


图 4:命名需要计算的坐标


让我们从定义参考坐标系开始。 我们使用 +X 轴向右移动,+Y 轴向下移动的计算机图形约定。

图 5:参考坐标轴


为了计算交点的左上角,我们比较每个框的左上角。 我们可以从上面的例子中看到,x_inter1 可以通过查看哪个box的左上角更靠右来找到。 类似地,可以通过查看哪个框的左上角低于另一个框来找到 y_inter1。 在数学上,它们可以计算为:

图 6:计算交点的左上角


为了计算交点的右下角,我们比较每个框的右下角。 x_inter2 可以通过查看哪个框的右下角更靠左来找到。 类似地,可以通过查看哪个框的右下角高于另一个框来找到 y_inter2。 在数学上,它们可以计算为:

图 7:计算交点的右下角


例如,图 4 中的框完全重叠,或者对于特定坐标具有相同的值。 在这种情况下,将值与其自身进行比较的最小或最大操作就是值本身。

图 8:比较具有相同坐标值的框的示例


现在我们有了交点的坐标,交点的面积就是形成的矩形的面积。 (在实践中我们会取宽度和高度的模数,以确保即使box的顺序改变,宽度和高度仍然是正的;即如果 x_inter1>x_inter2 ,我们仍然会得到一个正值 宽度)

图 8:计算交叉点的面积


2. 计算box的并集面积

box的并集是两个box覆盖的总面积,如图 2 所示。

为了找到总面积,我们首先计算单个box的面积。

图 9:计算两个box的面积


如果我们查看两个框覆盖的总面积,我们会看到交叉点的部分被两个框覆盖,即交叉点的面积同时包含在 area_box1 和 area_box2 中。

图 10:描绘被两个框覆盖的交叉区域。


由于我们只想计算一次公共交叉区域,我们可以从两个框的总面积中减去我们计算的交叉区域。

图 11:box的并集面积


3.计算IOU

图 12:计算 IOU 的公式


IOU 的取值范围是多少?

两个box的 IOU 可以是 0 到 1 之间的任何值。

如果有 2 个不相交的框,则它们相交的面积将为 0,因此 IOU 也将为 0。

如果有 2 个box完全重叠,则交集的面积将等于它们并集的面积,因此 IOU 将为 1。


在python中为IOU编写一个函数:

对于上面显示的相同图像,让我们在 python 中编写一个函数来计算绿色和蓝色框的 IOU

图14:python中实现IOU的函数


  • 函数 IOU 接受 2 个box,box1 和 box2 作为输入。 每个框中的数据是一个包含[x1, y1, x2, y2]的列表,分别是左上、右下坐标。
  • 如前所述,我们找到交集的面积,然后是并集的面积。
  • abs 函数是python 中的一个内置函数,用于计算模数。 这确保我们永远不会得到负的宽度或高度。
  • 返回的 IOU 是一个 float 类型的值,介于 0 和 1 之间。
 完整代码的链接在这里


路过

雷人

握手

鲜花

鸡蛋
我有话说......

TA还没有介绍自己。

电话咨询: 135xxxxxxx
关注微信