IoU计算
什么是IoU
(Intersection over Union),测量检测物体准确度的标准,用来衡量真实与预测之间的相关度
IoU公式:
I o U = A r e a O f O v e r l a p / A r e a O f U n i o n IoU = Area Of Overlap / AreaOfUnion IoU=AreaOfOverlap/AreaOfUnionI o U = 两 个 区 域 重 叠 的 交 集 / 两 个 区 域 重 叠 的 并 集 IoU = 两个区域重叠的交集/两个区域重叠的并集 IoU=两个区域重叠的交集/两个区域重叠的并集
两个区域指的是真实标注框与预测标注框的面积
举例:
两个区域重叠的交集:比如上图的灰色部分A
两个区域重叠的并集:比如上图的灰色部分A + 黄绿色部分B
def bbox_iou(cor_1, cor_2): ''' cor_1: 第一个区域的坐标 (左上, 右下) cor_2: 第二个区域的坐标 (左上, 右下) ''' xA = max(cor_1[0], cor_2[0]) yA = max(cor_1[1], cor_2[1]) xB = min(cor_1[2], cor_2[2]) yB = min(cor_1[3], cor_2[3]) # 交集面积 overlap_area = max(0, xB - xA) * max(0, yB - yA) # cor_1 和 cor_2的面积 cor_1_area = (cor_1[2] - cor_1[0]) * (cor_1[3] - cor_1[1]) cor_2_area = (cor_2[2] - cor_2[0]) * (cor_2[3] - cor_2[1]) # 计算IOU 并集为两个区域面积之和 - 交集面积 iou = overlap_area / float(cor_1_area + cor_2_area - overlap_area) return iou if __name__ == "__main__": iou = bbox_iou((100,100,200,200),(130,120,230,220)) print(iou) # 0.3888888888888889