【评估指标】IoU 交并比
IoU(交并比,Intersection over Union)
IoU(Intersection over Union)是计算机视觉和目标检测中最常用的评估指标之一,用于衡量预测边界框(Bounding Box) 与 真实边界框(Ground Truth) 之间的重叠程度。它在目标检测、实例分割、语义分割等任务中广泛应用。
1. IoU 的定义
IoU 计算的是两个边界框的**交集(Intersection)与并集(Union)**的比值:
其中:
- A 是预测框(Predicted Box)
- B 是真实框(Ground Truth Box)
取值范围:0(完全不重叠) ~ 1(完全重合)
2. IoU 的计算步骤
假设有两个矩形框:
-
预测框(Predicted Box):坐标
-
真实框(Ground Truth Box):坐标
计算过程:
-
计算交集(Intersection):
-
计算并集(Union):
其中:
-
计算 IoU:
3. IoU 的直观理解
- IoU = 1:预测框和真实框完全重合(理想情况)。
- IoU ≈ 0.5:部分重叠(通常作为目标检测的阈值,如 PASCAL VOC 使用 0.5)。
- IoU = 0:完全不重叠(预测错误)。
示例:
预测框 § | 真实框 (G) | IoU 计算 |
---|---|---|
(10, 10, 50, 50) | (20, 20, 60, 60) | IoU ≈ 0.5 |
(10, 10, 50, 50) | (10, 10, 50, 50) | IoU = 1 |
(10, 10, 20, 20) | (30, 30, 40, 40) | IoU = 0 |
4. IoU 的应用
(1) 目标检测中的评估
- 判定预测框是否正确(True Positive, TP):
- 如果 IoU ≥ 阈值(如 0.5),则认为是正确检测(TP)。
- 否则,认为是误检(False Positive, FP)。
- 计算 mAP(Mean Average Precision):
- 不同 IoU 阈值(如 0.5:0.95)下的 AP 平均值(COCO 标准)。
(2) 非极大值抑制(NMS, Non-Maximum Suppression)
- 用于去除冗余检测框:
- 如果多个预测框 IoU > 阈值(如 0.5),只保留置信度最高的一个。
(3) 损失函数(IoU Loss)
- 直接优化 IoU 以提高检测精度:
- IoU Loss = 1 - IoU
- 变种:GIoU、DIoU、CIoU(解决 IoU 的梯度问题)。
5. IoU 的局限性
问题 | 说明 | 改进方法 |
---|---|---|
不相交时 IoU=0 | 无法区分不同距离的预测框 | GIoU(考虑最小外接矩形) |
尺度不变性 | 对小目标和大目标的 IoU 敏感性不同 | DIoU(考虑中心点距离) |
梯度消失 | IoU=0 时无法优化 | CIoU(结合中心点和长宽比) |
6. 代码实现(Python)
def calculate_iou(box1, box2):# box1: [x1, y1, x2, y2]# box2: [x1, y1, x2, y2]# 计算交集x_left = max(box1[0], box2[0])y_top = max(box1[1], box2[1])x_right = min(box1[2], box2[2])y_bottom = min(box1[3], box2[3])intersection = max(0, x_right - x_left) * max(0, y_bottom - y_top)# 计算并集area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])union = area1 + area2 - intersectioniou = intersection / (union + 1e-6) # 避免除零return iou# 示例
box_p = [10, 10, 50, 50]
box_g = [20, 20, 60, 60]
iou = calculate_iou(box_p, box_g)
print(f"IoU: {iou:.2f}") # 输出 IoU: 0.50
7. 总结
- IoU 是衡量目标检测框重叠度的核心指标,广泛应用于 TP/FP 判定、NMS、损失函数等。
- 标准 IoU 存在局限性,改进版本如 GIoU、DIoU、CIoU 能优化不同场景下的检测性能。
- 代码实现简单,可直接用于自定义目标检测任务。