6.14.1 EP06_01 🟢 Evaluación de Segmentación por IoU (Intersection over Union)
A lo largo de este capítulo, diversas etapas del pipeline producen máscaras binarias, como en la segmentación de documentos, la localización de QRCodes y la detección de defectos. Para evaluar objetivamente la calidad de estas segmentaciones, es necesario compararlas con una máscara de referencia (ground truth).
Una de las métricas más utilizadas para este fin es la IoU (Intersection over Union, o Intersección sobre Unión), definida como la razón entre el área de intersección y el área de unión de dos máscaras binarias. Cuanto mayor sea el valor de la IoU, mayor será la concordancia entre la segmentación producida por el algoritmo y la referencia.
6.14.1.1 📋 Directrices de Implementación
- Dimensiones: Leer los enteros \(L\) (número de filas) y \(C\) (número de columnas).
- Máscara de referencia: Leer los \(L \times C\) elementos binarios (0 o 1) de la matriz
ref. - Máscara predicha: Leer los \(L \times C\) elementos binarios (0 o 1) de la matriz
pred. - Intersección: Contar el número de posiciones \((i,j)\) para las cuales
ref[i][j] = 1ypred[i][j] = 1. - Unión: Contar el número de posiciones \((i,j)\) para las cuales
ref[i][j] = 1opred[i][j] = 1. - Caso degenerado: Si la unión es igual a \(0\), definir \(\mathrm{IoU}=1{,}0\), ya que ambas máscaras están vacías.
- Cálculo: Si la unión es mayor que cero, calcular
\[ \mathrm{IoU}= \frac{|\mathrm{Interseccion}|} {|\mathrm{Union}|}. \]
- Clasificación: Determinar la clasificación cualitativa utilizando el valor de IoU antes del redondeo.
- Redondeo: Mostrar la IoU con cuatro decimales.
- Salida: Imprimir, en este orden, la intersección, la unión, la IoU y la clasificación.
6.14.1.2 📌 Restricciones Computacionales
- Si la unión es igual a \(0\), no se debe realizar la división; la IoU debe definirse como \(1{,}0\).
- Los rangos de clasificación utilizan comparaciones no estrictas (\(\geq\)).
- La clasificación debe realizarse utilizando el valor de la IoU en precisión completa, antes del redondeo para la visualización.
6.14.1.3 🧠 Fundamentación Teórica
La IoU se define por
\[ \mathrm{IoU}= \frac{|R\cap P|} {|R\cup P|}, \]
donde:
- \(R\) representa el conjunto de píxeles que pertenecen a la máscara de referencia;
- \(P\) representa el conjunto de píxeles que pertenecen a la máscara predicha;
- \(|R\cap P|\) corresponde al número de píxeles que pertenecen simultáneamente a ambas máscaras;
- \(|R\cup P|\) corresponde al número de píxeles que pertenecen al menos a una de las máscaras.
| Rango de IoU | Clasificación | Interpretación |
|---|---|---|
| \(\mathrm{IoU}\geq0{,}90\) | EXCELENTE |
Concordancia muy elevada entre las máscaras. |
| \(0{,}70\leq\mathrm{IoU}<0{,}90\) | BUENO |
Pequeñas diferencias entre las máscaras. |
| \(0{,}50\leq\mathrm{IoU}<0{,}70\) | ACEPTABLE |
Concordancia parcial entre las máscaras. |
| \(\mathrm{IoU}<0{,}50\) | MALO |
Baja concordancia entre las máscaras. |
La IoU depende únicamente de la superposición entre las máscaras y, por lo tanto, es independiente del tamaño de la imagen.
6.14.1.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: entero \(L\).
- Línea 2: entero \(C\).
- Siguientes \(L\) líneas: elementos binarios (0 o 1) de la matriz
ref. - Siguientes \(L\) líneas: elementos binarios (0 o 1) de la matriz
pred.
Salida:
- Línea 1:
Interseccion: X - Línea 2:
Union: Y - Línea 3:
IoU: Z - Línea 4:
Clasificacion: NOMBRE
El valor de IoU debe imprimirse con cuatro decimales.
6.14.1.5 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 2 2 1 1 0 0 1 0 0 0 |
Interseccion: 1 Union: 2 IoU: 0.5000 Clasificacion: ACEPTABLE |
La mitad de la región de referencia fue segmentada correctamente. |
| 2 2 0 0 0 0 0 0 0 0 |
Interseccion: 0 Union: 0 IoU: 1.0000 Clasificacion: EXCELENTE |
Ambas máscaras están vacías; por convención, \(\mathrm{IoU}=1{,}0\). |
%%writefile EP06_01.py
# Código PythonOverwriting EP06_01.py
TestSuite("EP06_01.py").run()✔️ EP06_01.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP06_01.cases
🔍 Probando Python: EP06_01.py
⚠️ EP06_01.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.