目标检测IOU指标的python实现

IOU指标是目标检测中重要的评价指标,即交集与并集的比值。
如图:
目标检测IOU指标的python实现_第1张图片
IOU的计算公式如下:
在这里插入图片描述
即预测框与真实框的交并比。先计算交集的面积,在计算并集的面积,然后求两者的比值。
计算代码如下:
其中ground truth的坐标为(x0,y0,w0,h0),bounding box的坐标分别为(x1,y1,w1,h1)

W = (min((x0+w0),(x1+w1))-max(x0,x1))
H = (min((y0+h0),(h1+h1))-max(y0,y1))
Intersection = W*H
Union = w0*h0 + w1*h1 -Intersection

这里跟上图的表示不一致,上图中的bbox和gtbox的坐标表示为(x1,y1,x2,y2),分别表示bbox的左上角坐标和右下角坐标。
如果将上述代码适应于上图,则代码可改写为:

w0 = gx2 - gx1
w1 = cx2 - cx1
h0 = gy1 - gy2
h1 = cy1 - cy2

W = (min((x0+w0),(x1+w1))-max(x0,x1))
H = (min((y0+h0),(h1+h1))-max(y0,y1))
Intersection = W*H
Union = w0*h0 + w1*h1 -Intersection

例子:

# 真实框的坐标,宽高
gt_box = [gt_x, gt_y,gt_w,gt_h] = 1,1,4,5
# 预测框的坐标,宽高
c_box = [c_x, c_y,c_w,c_h] = 3,2,3,6

# IOU 计算函数
def IOU(gt_box, c_box):
    W = (min((gt_box[0]+gt_box[2]), (c_box[0]+c_box[2])) - max(gt_box[0], c_box[0]))
    H =  (min((gt_box[1]+gt_box[3]), (c_box[1]+c_box[3])) - max(gt_box[1], c_box[1]))
    inter = W * H
    iou = inter / (gt_box[2] * gt_box[3] + c_box[2] * c_box[3] - inter)
    print('iou is {}'.format(iou))
    return iou
if __name__ = '__main__':
	IOU(gt_box, c_box)

结果是:
iou is 0.26666666666666666

你可能感兴趣的:(Python,计算机视觉,python,计算机视觉)