Intersection over Union (IoU)
La intersección sobre unión (IoU) puntúa cuánto se solapa un cuadro predicho con el cuadro real, de 0 a 1. Fórmula, código Python, umbrales y pérdidas basadas en IoU.
La intersección sobre unión (IoU) mide cuánto se solapan dos regiones: el área que comparten dividida entre el área total que cubren juntas. Su valor va de 0 para regiones que no se tocan a 1 para regiones idénticas; en estadística, esta misma cantidad se conoce como índice de Jaccard. En la detección de objetos, IoU compara una caja delimitadora predicha con la caja de referencia etiquetada y determina si una predicción cuenta como correcta, qué predicciones duplicadas se eliminan y cómo se entrenan las predicciones de cajas.
Cómo se calcula IoU#
IoU = área de intersección / área de unión. La unión es el área de la caja A más el área de la caja B menos su intersección, por lo que la región compartida solo se cuenta una vez. Para dos cajas alineadas con los ejes y expresadas mediante sus esquinas, la intersección es un rectángulo delimitado por los bordes interiores de ambas cajas. Su anchura o altura se limita a cero cuando las cajas no se solapan.
# 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}")El script imprime IoU = 8100 / 11900 = 0.681. Desplazar una caja de 100 píxeles 10 píxeles en cada dirección reduce la zona de solapamiento a 90 × 90 píxeles y aumenta la unión a 11.900, así que un desplazamiento del 10 % resta casi un tercio de la puntuación. Como ambas áreas se escalan a la vez, IoU no depende de la escala: la misma desalineación relativa da la misma puntuación en un pájaro de 20 píxeles y un camión de 2.000 píxeles. Por tanto, un error fijo en píxeles afecta más a los objetos pequeños: un desplazamiento lateral de un píxel reduce IoU a 0,905 en una caja de 20 píxeles y a 0,990 en una de 200 píxeles.
Umbrales de IoU en la evaluación#
Un umbral de evaluación convierte IoU en una decisión binaria. Una predicción es un verdadero positivo si su clase coincide y su IoU con una caja de referencia aún no emparejada alcanza el umbral; en caso contrario, es un falso positivo. El benchmark PASCAL VOC usaba 0,5, un umbral menos estricto de lo que parece: dos cajas iguales desplazadas lateralmente un tercio de su anchura tienen un IoU de exactamente 0,5. El benchmark COCO calcula el promedio de los resultados en diez umbrales, del 0,50 al 0,95. Así es como la precisión media promedio (mAP) recompensa la precisión de la localización.
IoU en el entrenamiento y el posprocesamiento#
- Funciones de pérdida para la regresión de cajas: Los detectores entrenan las coordenadas de las cajas con 1 − IoU o una variante, porque una pérdida sobre coordenadas sin procesar considera igual un error de 10 píxeles en una caja pequeña y en una grande. IoU simple no proporciona gradiente cuando las cajas no se solapan, así que IoU generalizada (GIoU) añade una penalización basada en la caja más pequeña que contiene ambas. IoU de distancia e IoU completa (DIoU, CIoU) añaden términos para la distancia entre centros y la relación de aspecto. YOLO26 entrena el cabezal de cajas con una pérdida CIoU y también usa CIoU para decidir qué predicciones se asignan a cada objeto etiquetado durante el entrenamiento.
- Supresión no máxima (NMS): Durante la inferencia, se considera duplicada y se elimina una caja cuyo IoU con otra caja de la misma clase y puntuación más alta supera un umbral.
- Seguimiento de objetos: Los rastreadores, como ByteTrack, usan el IoU entre los seguimientos existentes y las nuevas detecciones como coste de emparejamiento entre fotogramas.
IoU para otras formas#
La misma proporción se aplica a cualquier par de regiones. La segmentación calcula IoU de máscaras sobre conjuntos de píxeles: la segmentación de instancias lo usa para emparejar las máscaras predichas con las etiquetas, y los benchmarks de segmentación semántica informan de su promedio entre clases como mIoU. Las cajas rotadas requieren una intersección de polígonos o una aproximación gaussiana, como ProbIoU. La detección 3D calcula IoU entre cuboides, ya sea en 3D completo o como el solapamiento de sus huellas en una vista cenital.
IoU frente a métricas relacionadas#
- Coeficiente Dice: el doble de la intersección dividido entre la suma de las dos áreas. Clasifica las predicciones en el mismo orden que IoU, porque Dice = 2 × IoU / (1 + IoU), y es habitual en la segmentación de imágenes médicas.
- Precisión: proporción de predicciones de clase correctas, que no indica la posición de una caja.
- mAP: resumen a nivel de detección basado en umbrales de IoU, que combina la localización con la precisión y la exhaustividad entre clases.
La relación con Dice también permite convertir umbrales: un IoU de 0,5 equivale a una puntuación Dice de 0,667, y un IoU de 0,9 equivale a una puntuación Dice de 0,947.










