Deep Learning per la Segmentazione Semantica

[Slide](C:\UNI\Magistrale\visione\14 - Deep learning for semantic segmentation.pdf)

Indice


Tipi di Segmentazione

Segmentazione Semantica

Definizione

La segmentazione semantica assegna una etichetta di classe a ogni pixel dell’immagine. L’output è una mappa della stessa risoluzione dell’input dove ogni pixel è colorato con la classe corrispondente (strada, cielo, persona, auto…).

In pratica: in un’immagine di guida autonoma, la segmentazione semantica colora ogni pixel di rosso se è strada, blu se è cielo, verde se è vegetazione. Non distingue però tra la persona a sinistra e quella a destra — entrambi i pixel sono semplicemente “persona”.

Instance Segmentation

Definizione

La instance segmentation distingue non solo le classi ma anche le istanze individuali di ogni classe. Due persone diverse nell’immagine vengono segmentate separatamente, ciascuna con la propria maschera.

La instance segmentation combina object detection (trovare e distinguere le istanze) e segmentazione semantica (classificare ogni pixel). È un task più difficile di entrambi.

Note

Semantic aggregation (o panoptic segmentation) è una variante che unifica entrambi i tipi: assegna a ogni pixel sia la classe che l’id dell’istanza, coprendo sia le classi “stuff” (sfondo, strada, cielo — non numerabili) sia le classi “things” (persone, auto — numerabili).


Valutazione delle Prestazioni

Accuratezza e Errore

Le metriche più semplici per valutare una segmentazione pixel-per-pixel:

  • Accuratezza: proporzione di pixel classificati correttamente —
  • Errore:

Warning

L’accuratezza pixel-wise è spesso fuorviante in presenza di classi sbilanciate. Se il 90% dei pixel è sfondo, una rete che predice sempre “sfondo” ha 90% di accuratezza — ma è completamente inutile. Servono metriche più robuste.

Confusion Matrix

Definizione

La confusion matrix per la segmentazione è una matrice (dove è il numero di classi) in cui l’elemento conta quanti pixel della classe reale sono stati predetti come classe .

La diagonale rappresenta le predizioni corrette. Gli elementi fuori diagonale mostrano dove la rete sbaglia e quali classi vengono confuse tra loro.

Intersection over Union (IoU) — Jaccard Index

Definizione

L’IoU (o Jaccard Index) per la segmentazione misura la sovrapposizione tra la maschera predetta e quella reale per una data classe: dove sono i pixel predetti come classe e sono i pixel reali di classe .

In pratica: un IoU di 1.0 significa overlap perfetto, 0.0 significa nessuna sovrapposizione. La metrica standard è la mean IoU (mIoU) — media dell’IoU su tutte le classi.

L’IoU penalizza sia i falsi positivi (pixel predetti come che non lo sono) sia i falsi negativi (pixel di non rilevati), ed è robusto allo sbilanciamento delle classi.

Dice Index — F1-Score

Definizione

Il Dice Index (equivalente all’F1-score) misura la similarità tra maschera predetta e reale:

Il Dice è molto usato in ambito medico (es. segmentazione di tumori) perché è più sensibile alle strutture piccole rispetto all’IoU. La relazione con IoU è: .


Struttura Encoder-Decoder

La maggior parte delle reti per la segmentazione segue una struttura encoder-decoder:

  • Encoder: una CNN classica che comprime progressivamente l’immagine in una rappresentazione densa ad alta semantica ma bassa risoluzione spaziale. Solitamente è una backbone pre-addestrata (VGG, ResNet).
  • Decoder: riporta la rappresentazione alla risoluzione originale, recuperando i dettagli spaziali necessari per la segmentazione pixel-per-pixel.

Il decoder deve affrontare un problema fondamentale: le operazioni di pooling della CNN comprimono l’informazione spaziale. Per produrre una mappa densa, questa informazione deve essere recuperata.

Unpooling

Definizione

L’unpooling è l’operazione inversa del pooling: espande una feature map a bassa risoluzione in una a risoluzione più alta.

Due varianti principali:

  • Nearest neighbor / bed of nails: i valori vengono copiati o inseriti in posizioni fisse, con il resto riempito di zeri. Semplice ma produce artefatti.
  • Max unpooling: durante il max pooling dell’encoder si memorizzano le posizioni dei massimi (switch). Durante l’unpooling, i valori vengono reinseriti esattamente in quelle posizioni originali, con zeri altrove.

In pratica: il max unpooling usando le switch produce output più nitidi perché i valori tornano esattamente dove erano stati prelevati. Richiede però di memorizzare le posizioni dei massimi durante l’encoding.

Transposed Convolution

Definizione

La transposed convolution (detta anche deconvoluzione o fractionally strided convolution) è un’operazione apprendibile che aumenta la risoluzione spaziale. È l’operazione “inversa” di una convoluzione con stride > 1 nel senso delle dimensioni.

In pratica: invece di avere pesi fissi come nell’unpooling, la transposed convolution ha pesi apprendibili che la rete ottimizza durante il training. Questo la rende più flessibile ma può produrre artefatti a scacchiera se non usata con cura (tipicamente si preferisce upsample + conv ).

Skip Connection

Definizione

Le skip connection nell’encoder-decoder collegano direttamente i layer dell’encoder ai layer corrispondenti del decoder, passando feature ad alta risoluzione che sarebbero andate perse durante la compressione.

In pratica: l’encoder al livello 3 ha feature map ; quando il decoder raggiunge la stessa risoluzione , le due feature map vengono concatenate (o sommate). Il decoder ottiene così sia la semantica profonda (dal percorso decoder) sia i dettagli spaziali fini (dall’encoder).


Architetture per la Segmentazione

Fully Convolutional Network (FCN)

Definizione

La FCN (Long et al., 2015) è la prima architettura di successo per la segmentazione semantica basata su CNN. Converte una rete di classificazione (es. VGG) in una rete fully convolutional sostituendo i layer fully connected finali con layer convoluzionali equivalenti.

Il risultato è una rete che può ricevere immagini di qualsiasi dimensione e produce una mappa di score per ogni classe a risoluzione ridotta (es. dell’originale). La mappa viene poi portata alla risoluzione originale con transposed convolution.

Varianti per recuperare i dettagli spaziali — FCN-32, FCN-16, FCN-8 (i numeri indicano il fattore di upsampling del decoder):

  • FCN-32s: unico upsampling ×32 — veloce ma coarse
  • FCN-16s: combina prediction finale con feature del pool4 (×16 upsampling) — più dettagliata
  • FCN-8s: combina anche le feature del pool3 — ancora più fine

Note

Le varianti FCN-16s e FCN-8s sono essenzialmente skip connection: le feature degli strati intermedi dell’encoder vengono sommate alla mappa finale prima dell’upsampling. Il pattern è lo stesso che verrà formalizzato in U-Net.

DeconvNet

DeconvNet (Noh et al., 2015) è un encoder-decoder simmetrico dove al percorso di encoding (conv + max pooling) corrisponde un percorso di decoding speculare (max unpooling + layer convoluzionali).

L’encoder è VGG-16. Il decoder usa max unpooling con le switch memorizzate dall’encoder per recuperare la struttura spaziale degli oggetti. I layer convoluzionali del decoder affinano le feature dopo ogni unpooling.

In pratica: l’architettura speculare e l’uso delle switch rendono DeconvNet molto efficace nel recuperare i contorni precisi degli oggetti. Di contro, è più costosa computazionalmente e di memoria rispetto a FCN.

U-Net

Definizione

U-Net (Ronneberger et al., 2015) è un encoder-decoder a forma di “U” con skip connection a ogni livello tra encoder e decoder corrispondenti. Le feature map dell’encoder vengono concatenate (non sommate) con quelle del decoder.

Architettura:

  • Encoder (contracting path): 4 blocchi di due conv + ReLU + max pooling
  • Bottleneck: due conv alla risoluzione minima
  • Decoder (expansive path): 4 blocchi di transposed conv ×2 + concatenazione skip + due conv
  • Output: conv con softmax per ogni pixel

Danger

La caratteristica fondamentale di U-Net sono le skip connection a ogni livello: la concatenazione porta al decoder sia i dettagli spaziali fini (dall’encoder) sia il contesto semantico profondo (dal percorso decoder). Questo permette di ricostruire contorni molto precisi.

In pratica: U-Net è nata per la segmentazione di immagini medicali dove i dataset sono piccoli. La sua architettura funziona bene con pochi dati e produce segmentazioni molto precise grazie alle skip connection dense. È diventata il modello di riferimento in ambito biomedico.


Confronto tra Modelli di Segmentazione

Le architetture per la segmentazione possono essere lette come una progressiva soluzione al problema centrale del task: recuperare una predizione pixel-wise precisa dopo che l’encoder ha compresso l’immagine e perso risoluzione spaziale.

Modello / MetodoTipoArchitetturaConcetto nuovoDifferenza principale
FCNSemantic segmentationCNN di classificazione convertita in fully convolutional + upsamplingSostituzione dei fully connected con convoluzioniPrima rete end-to-end per segmentazione pixel-wise
FCN-32s / 16s / 8sSemantic segmentationFCN con skip da layer intermediSkip connection per recupero spazialeMigliora progressivamente la risoluzione della segmentazione
DeconvNetSemantic segmentationEncoder VGG-16 + decoder simmetricoMax unpooling con switchRicostruisce contorni più precisi, ma è più costosa
U-NetSemantic segmentationEncoder-decoder a U con skip a ogni livelloConcatenazione encoder-decoderOttima per pochi dati e contorni precisi, molto usata in ambito medicale
Transposed ConvolutionOperazione decoderUpsampling apprendibileRicostruzione spaziale con pesi appresiPiù flessibile dell’unpooling, ma può creare artefatti
Skip ConnectionCollegamento encoder-decoderCollegamento tra feature encoder e decoderFusione dettagli spaziali + semanticaRecupera informazione persa dal downsampling
Mask R-CNNInstance segmentationFaster R-CNN + branch mascheraMask head paralleloSegmenta istanze individuali, non solo classi pixel-wise
RoI AlignOperazione per istanzeCampionamento continuo con interpolazione bilineareEliminazione quantizzazione di RoI PoolingMigliora l’allineamento e la qualità delle maschere
Mask HeadBranch di segmentazionePiccola FCN per ogni RoIMaschera binaria per istanzaSepara classificazione, box regression e segmentazione

Lettura Comparativa dei Modelli

FCN è la prima architettura di successo per la segmentazione semantica con CNN. Prende una rete di classificazione, ad esempio VGG, e sostituisce i layer fully connected finali con layer convoluzionali equivalenti. In questo modo la rete diventa fully convolutional: può ricevere immagini di dimensione variabile e produrre una mappa spaziale di score per classe, invece di una singola etichetta.

FCN-32s, FCN-16s e FCN-8s affrontano il problema della bassa risoluzione della mappa finale. FCN-32s usa solo la prediction finale e fa un upsampling molto ampio, quindi produce segmentazioni grossolane. FCN-16s combina la prediction finale con feature intermedie, ad esempio pool4. FCN-8s aggiunge feature ancora più superficiali, ad esempio pool3. Queste varianti usano di fatto skip connection per combinare semantica profonda e dettaglio spaziale.

DeconvNet usa un encoder-decoder simmetrico. L’encoder, basato su VGG-16, comprime progressivamente l’immagine; il decoder usa max unpooling e convoluzioni per ricostruire la mappa di segmentazione. La novità è l’uso delle switch: durante il max pooling si memorizzano le posizioni dei massimi e, nel decoder, i valori vengono reinseriti in quelle stesse posizioni. Questo aiuta a recuperare contorni più precisi, ma aumenta memoria e costo computazionale.

U-Net porta la struttura encoder-decoder a una forma più efficace. A ogni livello del decoder concatena le feature del livello corrispondente dell’encoder. Il decoder riceve quindi sia il contesto semantico profondo sia i dettagli spaziali fini. Questa architettura è particolarmente efficace con pochi dati e in ambito medicale, dove servono contorni precisi e spesso i dataset sono piccoli.

Transposed convolution è un’operazione di upsampling apprendibile. A differenza dell’unpooling, che usa regole fisse, ha pesi ottimizzati durante il training e può imparare come aumentare la risoluzione delle feature map. È più flessibile, ma può generare artefatti a scacchiera se non viene usata con cura.

Skip connection encoder-decoder risolvono la perdita di informazione spaziale causata da pooling e stride. Le feature profonde dicono bene cosa c’è nell’immagine, ma sono poco precise sul dove; le feature superficiali hanno alta risoluzione ma meno semantica. Collegarle permette al decoder di combinare entrambe le informazioni.

Mask R-CNN estende Faster R-CNN alla instance segmentation. Per ogni RoI produce tre output paralleli: classe, bounding box rifinita e maschera binaria dell’istanza. In questo modo non assegna solo una classe a ogni pixel, ma distingue anche oggetti diversi della stessa classe, ad esempio due persone diverse.

RoI Align è una novità chiave di Mask R-CNN. Il RoI Pooling arrotonda le coordinate delle regioni sulla feature map, introducendo errori di quantizzazione. Per una bounding box questo errore può essere accettabile, ma per una maschera pixel-wise anche pochi pixel di disallineamento peggiorano il risultato. RoI Align evita l’arrotondamento e usa interpolazione bilineare in coordinate continue, migliorando l’allineamento tra feature e oggetto reale.

Mask Head è il ramo di segmentazione di Mask R-CNN. Riceve le feature allineate dal RoI Align e produce una maschera binaria, tipicamente , per ogni RoI. È una piccola FCN composta da convoluzioni, transposed convolution e una convoluzione finale con sigmoid. La classe viene decisa dal branch di classificazione, mentre il mask head si concentra solo sulla forma dell’istanza.

Sintesi dei Concetti Nuovi

ConcettoDove compareProblema risoltoPerché migliora
Fully convolutionalFCNLe CNN di classificazione producono una sola etichettaProduce mappe spaziali e accetta input di dimensione variabile
UpsamplingFCNFeature map finale a bassa risoluzioneRiporta la predizione alla dimensione originale
Skip connection intermedieFCN-16s / FCN-8sSegmentazione troppo grossolanaRecuperano dettagli spaziali dagli strati intermedi
Max unpooling con switchDeconvNetPerdita della posizione nei poolingRicostruisce meglio la struttura spaziale
Transposed convolutionDecoder / U-NetUpsampling fisso poco flessibileImpara come aumentare la risoluzione
Skip dense encoder-decoderU-NetNecessità di contorni precisiCombina semantica profonda e dettagli fini
RoI AlignMask R-CNNQuantizzazione del RoI PoolingAllinea meglio feature e oggetto
Mask headMask R-CNNDetection senza maschera pixel-wiseProduce maschera binaria per ogni istanza
Branch paralleliMask R-CNNClasse, box e maschera sono task diversiOgni ramo si specializza nel proprio output

Instance Segmentation con Mask R-CNN

Mask R-CNN (He et al., 2017) estende Faster R-CNN aggiungendo un terzo ramo parallelo che predice una maschera binaria per ogni istanza rilevata.

Per ogni region proposal, Mask R-CNN produce in parallelo:

  1. La classe dell’oggetto (branch di classificazione)
  2. Le coordinate della bounding box (branch di regressione)
  3. Una maschera binaria che segmenta l’oggetto dentro la sua box (branch di segmentazione)

RoI Align

Definizione

Il RoI Align è una versione migliorata del RoI Pooling di Fast R-CNN che elimina le approssimazioni di quantizzazione usando interpolazione bilineare per campionare valori in posizioni non intere della feature map.

In pratica: il RoI Pooling arrotonda le coordinate della regione alla cella più vicina della feature map — un errore di anche 1-2 pixel può disallineare la maschera dall’oggetto reale. Il RoI Align campiona esattamente nelle posizioni continue calcolate e interpola i valori tra i pixel della feature map. Questo migliora significativamente la qualità delle maschere.

Mask Head

Definizione

Il mask head è il terzo ramo di Mask R-CNN: riceve il RoI Align in output e produce una maschera binaria (tipicamente ) per ogni classe — in modo class-agnostic (predice maschere, una per classe, e usa solo quella della classe predetta dal branch di classificazione).

Il mask head è una piccola FCN: alcune conv + transposed conv per l’upsampling + conv finale con sigmoid.

Note

La separazione tra classificazione e segmentazione (il mask head non deve decidere la classe, si occupa solo della forma) è una scelta progettuale chiave di Mask R-CNN. Permette a ogni maschera di concentrarsi sulla forma dell’oggetto senza competere con il task di classificazione.