9.10.4 EP09_04 🟡 Intersección sobre Unión (IoU) y Supresión de No-Máximos (NMS)
Los modelos de detección de objetos pueden producir varias cajas delimitadoras candidatas para un mismo objeto, con diferentes posiciones y puntuaciones de confianza. La etapa de posprocesamiento responsable de eliminar esas detecciones redundantes es la Supresión de No-Máximos (NMS), cuya operación fundamental utiliza la métrica de Intersección sobre Unión (IoU).
La NMS utiliza esta medida para decidir qué cajas deben mantenerse. En general, la caja con mayor confianza se selecciona primero; a continuación, las cajas que presentan una IoU por encima de un determinado umbral con la caja seleccionada se consideran redundantes y se eliminan. El proceso se repite hasta que no queden cajas candidatas.
En este ejercicio, deberás implementar el algoritmo de NMS desde cero, calculando la IoU entre cajas y aplicando sucesivamente el criterio de selección y supresión para producir el conjunto final de detecciones.
9.10.4.1 📋 Directrices de Implementación
Entrada: Leer el entero \(N\) (número de cajas candidatas) y el umbral real \(\tau\) (umbral de IoU para la supresión), en la misma línea.
Cajas: Leer \(N\) líneas, cada una con cinco valores reales:
x1 y1 x2 y2 scoredonde \((x_1,y_1)\) representa la esquina superior izquierda, \((x_2,y_2)\) la esquina inferior derecha y
scorela puntuación de confianza.Intersección sobre Unión: Para dos cajas \(A\) y \(B\),
\[ IoU(A,B)= \frac{\operatorname{Área}(A\cap B)} {\operatorname{Área}(A\cup B)}. \]
El área de intersección debe calcularse a partir de la superposición de los intervalos en \(x\) e \(y\). Si no hay superposición, el área de intersección es cero.
Algoritmo voraz de NMS:
Ordena las cajas por
scoredescendente. En caso de empate, mantén el orden original de lectura.Selecciona la caja de mayor puntuación entre las cajas restantes y añádela al conjunto de salida.
Calcula la IoU entre la caja seleccionada y todas las cajas aún restantes. Suprime las cajas para las cuales
\[ \text{IoU} > \tau. \]
- Repite los pasos (b) y (c) hasta que no queden cajas.
Salida: Para cada caja mantenida, en el orden en que fue seleccionada, imprimir su índice original (posición de lectura, comenzando en \(0\)) y su
score, formateado con 4 decimales. Al final, imprimir:Total mantenidas: X
9.10.4.2 📌 Restricciones Computacionales
- Supresión estricta: solo las cajas con \(\text{IoU} > \tau\) se suprimen. Las cajas con \(\text{IoU} = \tau\) se mantienen.
- Índices originales: la salida hace referencia a la posición en que cada caja fue leída en la entrada (comenzando en \(0\)), y no a su posición después de la ordenación.
- Ordenación estable: en caso de
scoreiguales, debe preservarse el orden original de lectura. - Rectángulos alineados a los ejes: todas las cajas se especifican mediante dos esquinas, con \(x_1 < x_2\) e \(y_1 < y_2\) garantizados en la entrada.
- Coordenadas y puntuaciones: los valores reales pueden ser positivos o negativos, según los límites definidos por la entrada, pero las dimensiones de las cajas son siempre positivas.
9.10.4.3 🧠 Fundamentación Teórica
| Elemento | Papel en el posprocesamiento de detección |
|---|---|
| IoU | Cuantifica la superposición espacial entre dos cajas; \(\text{IoU}=1\) para cajas idénticas y \(\text{IoU}=0\) para cajas sin superposición |
| Ordenación por confianza | Hace que la caja de mayor score se analice primero |
| Umbral \(\tau\) | Define la cantidad de superposición necesaria para que una caja se considere redundante |
| Supresión | Elimina cajas que presentan una gran superposición con una caja ya seleccionada |
| Cajas distantes | Poseen IoU cercana a cero y, en general, no se suprimen por esta regla |
9.10.4.4 🧩 Métodos de morph.py que pueden ayudar
mm.IoU(boxA, boxB)— calcula la métrica de IoU, pero espera las cajas en el formato \((x,y,w,h)\), es decir, esquina superior izquierda, ancho y alto. La entrada de este ejercicio utiliza el formato \((x_1,y_1,x_2,y_2)\). La conversión es directa:\[ w=x_2-x_1,\qquad h=y_2-y_1. \]
El uso de esta función es opcional. El objetivo principal del ejercicio es implementar correctamente el proceso de selección y supresión de la NMS.
9.10.4.5 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: entero \(N\) y real \(\tau\).
- Siguientes \(N\) líneas: \(x_1\ y_1\ x_2\ y_2\ \text{score}\).
Salida:
- Una línea por caja mantenida, en el orden de selección:
índice score. - Última línea:
Total mantenidas: X.
%%writefile EP09_04.py
# Código PythonOverwriting EP09_04.py
TestSuite("EP09_04.py").run()✔️ EP09_04.cases ya existe en casos/
📋 3 caso(s) cargado(s) de casos/EP09_04.cases
🔍 Probando Python: EP09_04.py
⚠️ EP09_04.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.