在机器学习中,特别是在计算机视觉和目标检测领域,IoU(Intersection over Union,交并比)是一个常用的评估指标。它衡量的是预测边界框(predicted bounding box)与真实边界框(ground truth bounding box)的交叠程度。
IoU的计算公式如下:
IoU = 重叠面积/面积和
具体步骤如下:
计算交集的面积:找到预测框和真实框相交的部分,计算该相交区域的面积。
计算并集的面积:计算预测框和真实框合并起来的总面积。
求IoU值:将交集的面积除以并集的面积。
IoU的值范围从0到1,其中:
-IoU = 0 表示预测框和真实框没有重叠。
- IoU = 1 表示预测框和真实框完全重叠。
- 通常在目标检测任务中,设定一个阈值(比如0.5),只有当IoU大于这个阈值时,才认为检测是正确的。
IoU是目标检测中非常重要的一个概念,因为它简单直观,可以有效地反映预测框与真实框的匹配程度。在许多目标检测算法中,如Faster R-CNN、SSD和YOLO等,都会用到IoU来进行训练和评估。
输入两个box列表,列表的值为预测框和真实框的中点坐标和长和宽。先通过列表数据得到两框的左上角和右下角的坐标,之后分别选取重叠区域的左上角和右下角坐标,之后计算重叠部分面积 积/两框面积的和
import numpy as np
def Iou(box1, box2):
x_1 = box1[0]
y_1 = box1[1]
w_1 = box1[2]
h_1 = box1[3]
x_2 = box2[0]
y_2 = box2[1]
w_2 = box2[2]
h_2 = box2[3]
x_1_1 = x_1 - w_1/2
x_1_2 = x_1 + w_1/2
y_1_1 = y_1 - h_1/2
y_1_2 = y_1 + h_1/2
x_2_1 = x_2 - w_2/2
x_2_2 = x_2 + w_2/2
y_2_1 = y_2 - h_2/2
y_2_2 = y_2 + h_2/2
if x_1_1 > x_2_1:
a1 = x_1_1
else:
a1 = x_2_1
if y_1_1 > y_2_1:
b1 = y_2_1
else:
b1 = y_1_1
if x_1_2 > x_2_2:
a2 = x_2_2
else:
a2 = x_1_2
if y_1_2 > y_2_2:
b2 = y_1_2
else:
b2 = y_2_2
s1 = (a2 - a1) * (b2 - b1)
s = (w_1 * h_1) * (w_2 * h_2) - s1
return s1/s
box1 = [3, 3, 4, 6]
box2 = [4, 2, 4, 6]
Iou(box1, box2)