EDI+VA · Esercizio di Programmazione

EP06_01 — 🟢 Valutazione della Segmentazione tramite IoU ( Intersection over Union )

6.14.1 EP06_01 🟢 Valutazione della Segmentazione tramite IoU (Intersection over Union)

Nel corso di questo capitolo, diverse fasi del pipeline producono maschere binarie, come nella segmentazione di documenti, nella localizzazione di QRCodes e nel rilevamento di difetti. Per valutare oggettivamente la qualità di queste segmentazioni, è necessario confrontarle con una maschera di riferimento (ground truth).

Una delle metriche più utilizzate a questo scopo è la IoU (Intersection over Union, o Intersezione su Unione), definita come il rapporto tra l’area di intersezione e l’area di unione di due maschere binarie. Quanto maggiore è il valore della IoU, tanto maggiore è la concordanza tra la segmentazione prodotta dall’algoritmo e il riferimento.

6.14.1.1 📋 Linee Guida di Implementazione

  1. Dimensioni: Leggere gli interi \(L\) (numero di righe) e \(C\) (numero di colonne).
  2. Maschera di riferimento: Leggere gli \(L \times C\) elementi binari (0 o 1) della matrice ref.
  3. Maschera predetta: Leggere gli \(L \times C\) elementi binari (0 o 1) della matrice pred.
  4. Intersezione: Contare il numero di posizioni \((i,j)\) per le quali ref[i][j] = 1 e pred[i][j] = 1.
  5. Unione: Contare il numero di posizioni \((i,j)\) per le quali ref[i][j] = 1 o pred[i][j] = 1.
  6. Caso degenere: Se l’unione è uguale a \(0\), definire \(\mathrm{IoU}=1{,}0\), poiché entrambe le maschere sono vuote.
  7. Calcolo: Se l’unione è maggiore di zero, calcolare

\[ \mathrm{IoU}= \frac{|\mathrm{Intersezione}|} {|\mathrm{Unione}|}. \]

  1. Classificazione: Determinare la classificazione qualitativa utilizzando il valore di IoU prima dell’arrotondamento.
  2. Arrotondamento: Visualizzare la IoU con quattro cifre decimali.
  3. Output: Stampare, in quest’ordine, l’intersezione, l’unione, la IoU e la classificazione.

6.14.1.2 📌 Vincoli Computazionali

  • Se l’unione è uguale a \(0\), non deve essere eseguita la divisione; la IoU deve essere definita come \(1{,}0\).
  • Le fasce di classificazione utilizzano confronti non stretti (\(\geq\)).
  • La classificazione deve essere eseguita utilizzando il valore della IoU a piena precisione, prima dell’arrotondamento per la visualizzazione.

6.14.1.3 🧠 Fondamento Teorico

La IoU è definita da

\[ \mathrm{IoU}= \frac{|R\cap P|} {|R\cup P|}, \]

dove:

  • \(R\) rappresenta l’insieme dei pixel appartenenti alla maschera di riferimento;
  • \(P\) rappresenta l’insieme dei pixel appartenenti alla maschera predetta;
  • \(|R\cap P|\) corrisponde al numero di pixel appartenenti simultaneamente a entrambe le maschere;
  • \(|R\cup P|\) corrisponde al numero di pixel appartenenti ad almeno una delle maschere.
Fascia di IoU Classificazione Interpretazione
\(\mathrm{IoU}\geq0{,}90\) ECCELLENTE Concordanza molto elevata tra le maschere.
\(0{,}70\leq\mathrm{IoU}<0{,}90\) BUONO Piccole differenze tra le maschere.
\(0{,}50\leq\mathrm{IoU}<0{,}70\) ACCETTABILE Concordanza parziale tra le maschere.
\(\mathrm{IoU}<0{,}50\) SCARSO Bassa concordanza tra le maschere.

La IoU dipende solo dalla sovrapposizione tra le maschere e, pertanto, è indipendente dalla dimensione dell’immagine.

6.14.1.4 📦 Specifica di Input e Output (VPL)

Input:

  • Riga 1: intero \(L\).
  • Riga 2: intero \(C\).
  • Prossime \(L\) righe: elementi binari (0 o 1) della matrice ref.
  • Prossime \(L\) righe: elementi binari (0 o 1) della matrice pred.

Output:

  • Riga 1: Intersezione: X
  • Riga 2: Unione: Y
  • Riga 3: IoU: Z
  • Riga 4: Classificazione: NOME

Il valore di IoU deve essere stampato con quattro cifre decimali.

6.14.1.5 📌 Esempi

Input Output Osservazione
2
2
1 1
0 0
1 0
0 0
Intersezione: 1
Unione: 2
IoU: 0.5000
Classificazione: ACCETTABILE
La metà della regione di riferimento è stata segmentata correttamente.
2
2
0 0
0 0
0 0
0 0
Intersezione: 0
Unione: 0
IoU: 1.0000
Classificazione: ECCELLENTE
Entrambe le maschere sono vuote; per convenzione, \(\mathrm{IoU}=1{,}0\).
🎮 Simulatore EP06_01: IoU (Intersection over Union) IoU = |A ∩ B| / |A ∪ B|
0
0
6
Sposta e ridimensiona la maschera prevista per valutare l'allineamento.
Riferimento (A)
Prevista (B)
Sovrapposizione (A ∩ B)
–
Figura 6.21: Simulatore EP06_01: IoU tra maschera di riferimento e maschera predetta
%%writefile EP06_01.py
# Codice Python
Overwriting EP06_01.py
TestSuite("EP06_01.py").run()
✔️ EP06_01.cases esiste già in casos/
📋 5 caso/i caricato/i da casos/EP06_01.cases

🔍 Test di Python: EP06_01.py
⚠️ EP06_01.py: file vuoto (meno di 3 righe). Test saltati.