Intersection over Union (IoU)
交并比(IoU)以 0 到 1 的分数衡量预测框与真实框的重叠程度。内容涵盖公式、Python 代码、阈值和基于 IoU 的损失。
交并比 (IoU) 用于衡量两个区域的重叠程度:两者共有的面积除以它们覆盖的总面积。IoU 的取值范围为 0 到 1,分别表示区域完全不接触和完全相同;在统计学中,同一指标也称为 Jaccard 指数。在目标检测中,IoU 用于比较预测的边界框与标注的真实框,并决定预测是否正确、哪些重复预测应被移除,以及如何训练边界框预测。
IoU 的计算方式#
IoU = 交集面积 / 并集面积。并集面积等于框 A 的面积加上框 B 的面积,再减去两者的交集,因此重叠部分只计算一次。对于角点格式的两个轴对齐边界框,交集本身是由两个框的内侧边缘界定的矩形;如果两个框没有重叠,其宽度或高度会被限制为零。
# Boxes as [x1, y1, x2, y2] in pixels
label = [100, 100, 200, 200]
pred = [110, 110, 210, 210]
# Intersection rectangle, clamped to zero when the boxes do not overlap
w = max(0, min(label[2], pred[2]) - max(label[0], pred[0]))
h = max(0, min(label[3], pred[3]) - max(label[1], pred[1]))
intersection = w * h
# Union counts the overlap only once
area_label = (label[2] - label[0]) * (label[3] - label[1])
area_pred = (pred[2] - pred[0]) * (pred[3] - pred[1])
union = area_label + area_pred - intersection
print(f"IoU = {intersection} / {union} = {intersection / union:.3f}")脚本会打印 IoU = 8100 / 11900 = 0.681。一个 100 像素的边界框在两个方向上各移动 10 像素后,重叠区域会缩小至 90 × 90 像素,并集面积则增至 11,900,因此仅 10% 的偏移就会使分数下降近三分之一。由于两个面积会同比缩放,IoU 与尺度无关:相同的相对偏移在 20 像素的鸟和 2,000 像素的卡车上会得到相同分数。因此,固定的像素误差对小物体影响最大;在 20 像素的边界框上横向偏移 1 像素会使 IoU 降至 0.905,而在 200 像素的边界框上则会降至 0.990。
评估中的 IoU 阈值#
评估阈值会将 IoU 转换为是或否的判断。当预测类别匹配,且该预测与尚未匹配的真实边界框之间的 IoU 达到阈值时,该预测为真正例;否则就是假正例。PASCAL VOC基准采用 0.5 作为阈值,这个标准比听起来宽松:两个大小相同的边界框横向错开其宽度的三分之一时,IoU 正好为 0.5。COCO 基准会对 0.50 到 0.95 之间的十个阈值取平均,这也是均值平均精度 (mAP)能够奖励精确定位的原因。
训练和后处理中的 IoU#
- 边界框回归损失: 检测器使用 1 − IoU 或其变体训练边界框坐标,因为基于原始坐标的损失会将小框和大框上的 10 像素误差视为相同。普通 IoU 在边界框不重叠时无法提供梯度,因此广义 IoU (GIoU)会根据同时包围两个框的最小外接框增加惩罚,而距离 IoU 和完全 IoU (DIoU、CIoU)则会加入中心距离和宽高比相关项。YOLO26使用 CIoU 损失训练边界框头部,并在训练期间使用 CIoU 将预测分配给各个标注物体。
- 非极大值抑制 (NMS): 推理时,如果某个边界框与同类别、分数更高的边界框之间的 IoU 超过阈值,就会被视为重复预测并移除。
- 目标跟踪: ByteTrack 等跟踪器会使用已有跟踪目标与新检测结果之间的 IoU 作为逐帧匹配代价。
其他形状的 IoU#
相同的比值适用于任意一对区域。分割会针对像素集合计算掩码 IoU:实例分割使用该指标将预测掩码与标签匹配,语义分割基准则会报告各类别 IoU 的平均值,即 mIoU。旋转框需要使用多边形交集或 ProbIoU 等高斯近似方法,而 3D 检测会计算长方体之间的 IoU,可以在完整 3D 空间中计算,也可以计算鸟瞰图中的底面重叠度。
IoU 与相关指标对比#
- Dice 系数: 两倍交集面积除以两个区域的面积之和。Dice 与 IoU 的预测排序相同,因为 Dice = 2 × IoU / (1 + IoU),常用于医学图像分割。
- 准确率: 类别预测正确的比例,但无法说明边界框的位置。
- mAP: 建立在 IoU 阈值之上的检测级汇总指标,综合衡量各类别的定位精度、精确率和召回率。
Dice 关系还可以用于换算阈值:IoU 为 0.5 时,Dice 分数等于 0.667;IoU 为 0.9 时,Dice 分数等于 0.947。










