什么是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的函数
完整代码的链接在这里 |