在目标检测任务中,常用IOU作为评价指标,它的含义就是交并比,如下图:
代码如下:
def iou_2d(box1,box2):
'''
box [x1,y1,x2,y2] 分别是两对角定点的坐标
'''
area1 = (box1[2]-box1[0])*(box1[3]-box1[1])
area2 = (box2[2]-box2[0])*(box2[3]-box2[1])
area_sum = area1 + area2
#计算重叠部分 设重叠box坐标为 [x1,y1,x2,y2]
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
x2 = min(box1[2], box2[2])
y2 = min(box1[3], box2[3])
if x1 >= x2 or y1 >= y2:
return 0
else:
inter_area = (x2-x1)*(y2-y1)
return inter_area/(area_sum-inter_area)
def iou_3d(box1, box2):
'''
box [x1,y1,z1,x2,y2,z2] 分别是两对角定点的坐标
'''
area1 = (box1[3]-box1[0])*(box1[4]-box1[1])*(box1[5]-box1[2])
area2 = (box2[3]-box2[0])*(box2[4]-box2[1])*(box2[5]-box2[2])
area_sum = area1 + area2
#计算重叠部分 设重叠box坐标为 [x1,y1,z1,x2,y2,z2]
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
z1 = max(box1[2], box2[2])
x2 = min(box1[3], box2[3])
y2 = min(box1[4], box2[4])
z2 = min(box1[5], box2[5])
if x1 >= x2 or y1 >= y2 or z1 >= z2:
return 0
else:
inter_area = (x2-x1)*(y2-y1)*(z2-z1)
return inter_area/(area_sum-inter_area)
2D和3D代码几乎完全一样,都是先算两个框各自面积/体积,再算重叠部分,最后计算IOU。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务