IOU(Intersection Over Union)
交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。
最理想情况是完全重叠,即比值为1。
计算
**已知:** 矩形T的左下角坐标(X0,Y0),右上角坐标(X1,Y1); 矩形G的左下角坐标(A0,B0),右上角坐标(A1,B1).先来看一下水平方向上的情况:
根据上图思路,画出给出矩阵x方向可能的三种情况。
交集计算的逻辑
交集上界 :
交集下界 :
- 当水平不重叠:
- 当有重叠或者是内含的情况时:
代码示例
'''
矩形T的左下角坐标(X0,Y0),右上角坐标(X1,Y1);
矩形G的左下角坐标(A0,B0),右上角坐标(A1,B1).
'''
def iou(T, G):
'''
一维 iou 的计算
'''
x0, x1 = T # (left, right)
A0, A1 = G # (left, right)
high = min(x1, A1)
low = max(x0, A0)
# intersection
if high-low<=0:
intersection = 0
else:
intersection = high-low
# union
union = (x1 - x0) + (A1 - A0) - intersection
# iou
iou = intersection / union
return iou
a=iou((0,3),(3,4))
b=iou((0,3),(2,4))
c=iou((0,5),(2,4))
print(a,b,c)
# 0.0 0.25 0.4
计算水平和竖直方向上的情况:
'''
矩形T的左下角坐标(X0,Y0),右上角坐标(X1,Y1);
矩形G的左下角坐标(A0,B0),右上角坐标(A1,B1).
'''
def iou(T, G):
'''
二维 iou 的计算
'''
x0, y0,x1,y1 = T # (left, right)
A0,B0, A1,B1= G # (left, right)
# intersection
H = min(x1, A1)-max(x0, A0)
if H<=0:
H = 0
W = min(y1, B1)-max(y0, B0)
if W<=0:
W = 0
# s
sT=(y1-y0)*(x1-x0)
sG=(B1-B0)*(A1-A0)
intersection=H*W
# union
union = sT+sG - intersection
# iou
iou = intersection / union
return iou
a=iou((0,0,2,2),(0,0,4,1))
b=iou((1,1,3,3),(2,1,4,2))
c=iou((0,0,2,2),(2,2,4,3))
print(a,b,c)
>> 0.3333333333333333 0.2 0.0
这样定义时,有细微不同
Reference
https://blog.youkuaiyun.com/qq_30490125/article/details/52887389
https://blog.youkuaiyun.com/mdjxy63/article/details/79343733
https://blog.youkuaiyun.com/u014061630/article/details/82818112
IOU是目标检测中的重要指标,衡量候选框与真实框的重合程度。文章通过图解和Python代码示例详细解释了IOU的计算过程,包括不同重叠情况的处理,以及如何从水平和竖直方向上求解交集与并集的比值。
1554





