在目标检测的评价体系中,有一个参数叫做 IoU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。具体我们可以简单的理解为: 即检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU :
IOU=DetectionResult⋂GroundTruthDetectionResult⋃GroundTruth
如下图所示:GT = GroundTruth; DR = DetectionResult; 黄色边框框起来的是:
GT⋂DR 绿色框框起来的是: GT⋃DR
应该够详细了,上幅图直观些。当然最理想的情况就是 DR 与 GT 完全重合,即
IoU=1 下面附上图例说明,及 IOU 的python实现,已经测试无误,自行取用。
原图:
# -*- coding: utf-8 -*- """ Created on Sun Aug 07 14:26:51 2016 @author: Eddy_zheng """ def IOU(Reframe,GTframe): """ 自定义函数,计算两矩形 IOU,传入为均为矩形对角线,(x,y) 坐标。· """ x1 = Reframe[0]; y1 = Reframe[1]; width1 = Reframe[2]-Reframe[0]; height1 = Reframe[3]-Reframe[1]; x2 = GTframe[0]; y2 = GTframe[1]; width2 = GTframe[2]-GTframe[0]; height2 = GTframe[3]-GTframe[1]; endx = max(x1+width1,x2+width2); startx = min(x1,x2); width = width1+width2-(endx-startx); endy = max(y1+height1,y2+height2); starty = min(y1,y2); height = height1+height2-(endy-starty); if width <=0 or height <= 0: ratio = 0 # 重叠率为 0 else: Area = width*height; # 两矩形相交面积 Area1 = width1*height1; Area2 = width2*height2; ratio = Area*1./(Area1+Area2-Area); # return IOU return ratio,Reframe,GTframe