在目标检测的评价体系中,有一个参数叫做 IoU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。具体我们可以简单的理解为: 即检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU :
IOU=DetectionResult⋂GroundTruthDetectionResult⋃GroundTruth
如下图所示:GT = GroundTruth; DR = DetectionResult;
import numpy as np
def IoU(box,boxes):
'''
计算detect box和 gt boxes的IoU值
形参:
box:numpy array,shape(5,):x1,y1,x2,y2,score
input box
boxes:numpy array,shape (n,4):x1,y1,x2,y2
input ground truth boxes
返回值:
ovr: numpy.array, shape (n, )
IoU
'''
box_area=(box[2]-box[0]+1)*(box[3]-box[1]+1)
area = (boxes[:, 2] - boxes[:, 0] + 1) * (boxes[:, 3] - boxes[:, 1] + 1)
xx1=np.maximum(box[0],boxes[:,0])
yy1=np.maximum(box[1],boxes[:,1])
xx2=np.maximum(box[2],boxes[:,2])
yy2=np.maximum(box[3],boxes[:,3])
#计算 bounding box的长宽
w=np.maximum(0,xx2-xx1+1)
h=np.maximum(0,yy2-yy1+1)
inter=w*h
ovr= inter/(box_area+area-inter)
return ovr