对于一个检测器,我们需要制定一定的规则来评价其好坏,从而选择需要的检测器。常用的评价指标是交并比(IOU)。
物体检测模型的输出是非结构化的,事先并无法得知输出物体的数量、位置、大小等,因此物体检测的评价算法就稍微复杂一些。对于具体的某个物体来讲,我们可以从预测框与真实框的贴合程度来判断检测的质量,通常使用IoU(Intersection of Union)来量化贴合程度。
IoU的取值区间是[0,1],IoU值越大,表明两个框重合越好。
计算过程如下:
代码实现:
def IoU(BBox_A,BBox_B):
'''
Bbox: xmin ymin xmax ymax
'''
WA = BBox_A[2] - BBox_A[0]
HA = BBox_A[3] - BBox_A[1]
WB = BBox_B[2] - BBox_B[0]
HB = BBox_B[3] - BBox_B[1]
Xmax = max(BBox_A[2],BBox_B[2])
Xmin = min(BBox_A[0],BBox_B[0])
Ymax = max(BBox_A[3],BBox_B[3])
Ymin = min(BBox_A[1],BBox_B[1])
HI = HA + HB - (Ymax - Ymin)
WI = WA + WB - (Xmax - Xmin)
iou = (WI * HI) / (HA * WA + HB * WB)
return iou
if __name__ == "__main__":
BBoX_A = [0,0,2,2]
BBox_B = [1,1,3,3]
iou = IoU(BBoX_A,BBox_B)
print(iou)