IOU定义
在目标检测的评价体系中,有一个参数叫做 IoU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。具体我们可以简单的理解为: 即检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU :
根据定义,IOU的取值范围是[0,1].
python 代码实现(坐标系以图像左上角为原点)
# encoding: utf-8
def compute_IOU(rec1,rec2):
"""
计算两个矩形框的交并比。
:param rec1: (x0,y0,x1,y1) (x0,y0)代表矩形左上的顶点,(x1,y1)代表矩形右下的顶点。下同。
:param rec2: (x0,y0,x1,y1)
:return: 交并比IOU.
"""
left_column_max = max(rec1[0],rec2[0])
right_column_min = min(rec1[2],rec2[2])
up_row_max = max(rec1[1],rec2[1])
down_row_min = min(rec1[3],rec2[3])
#两矩形无相交区域的情况
if left_column_max>=right_column_min or down_row_min<=up_row_max:
return 0
# 两矩形有相交区域的情况
else:
S1 = (rec1[2]-rec1[0])*(rec1[3]-rec1[1])
S2 = (rec2[2]-rec2[0])*(rec2[3]-rec2[1])
S_cross = (down_row_min-up_row_max)*(right_column_min-left_column_max)
return S_cross/(S1+S2-S_cross)
#测试样例1
r1=(2,3,10,12)
r2=(12,5,20,24)
IOU = compute_IOU(r1,r2)
print("测试样例1,IOU:%f"%IOU)
#测试样例2
r1=(2,2,4,4)
r2=(3,3,5,5)
IOU = compute_IOU(r1,r2)
print("测试样例2,IOU:%f"%IOU)
测试样例输出:
测试样例1,IOU:0.000000
测试样例2,IOU:0.142857