Elaborazione di immagini e Computer Vision

Che cos'è la segmentazione semantica?

La segmentazione semantica è un algoritmo di deep learning che associa un'etichetta o una categoria a ogni pixel di un'immagine. Viene utilizzata per riconoscere una serie di pixel che formano categorie distinte. Ad esempio, un veicolo autonomo deve identificare veicoli, pedoni, segnali stradali, marciapiedi e altri elementi della strada.

La segmentazione semantica viene utilizzata in numerose applicazioni come la guida autonoma, l'imaging medicale e l'ispezione industriale.

Un semplice esempio di segmentazione semantica consiste nella separazione delle immagini in due classi. Ad esempio, nella Figura 1 vediamo un'immagine che mostra una persona in spiaggia e, a fianco, una versione che mostra i pixel dell'immagine segmentati in due classi separate: persona e sfondo.

Segmentazione semantica - Immagine e pixel etichettati

Figura 1: Immagine e pixel etichettati.

La segmentazione semantica non è limitata a due categorie. È possibile modificare il numero di categorie per la classificazione del contenuto dell'immagine. Questa stessa immagine potrebbe essere segmentata in quattro classi: persona, cielo, acqua e sfondo.

In che modo la segmentazione semantica differisce dalla rilevazione di oggetti?

La segmentazione semantica può essere un'alternativa utile alla rilevazione di oggetti poiché consente all'oggetto di interesse di coprire più aree dell'immagine a livello di pixel. Questa tecnica rileva in modo pulito gli oggetti di forma irregolare, a differenza della rilevazione di oggetti, in cui gli oggetti devono rientrare in un rettangolo di delimitazione (Figura 2).

Segmentazione semantica - Rilevazione di oggetti

Figura 2: Rilevazione di oggetti che mostra i rettangoli di delimitazione per identificare gli oggetti.

Come viene utilizzata la segmentazione semantica?

Poiché la segmentazione semantica etichetta i pixel di un'immagine è più precisa rispetto ad altre forme di rilevazione di oggetti. Per questo motivo, la segmentazione semantica è utile per applicazioni in una varietà di settori che richiedono mappe immagine precise, come ad esempio:

  • Guida autonoma: per identificare un percorso percorribile dalle auto separando la strada da ostacoli come pedoni, marciapiedi, pali e altre auto
  • Ispezione industriale: per rilevare difetti nei materiali, come ad esempio nell'ispezione dei wafer
  • Immagini satellitari: per identificare montagne, fiumi, deserti e altri tipi di terreno
  • Imaging medicale: per analizzare e rilevare anomalie cancerose nelle cellule
  • Visione robotica: per identificare e muoversi tra oggetti e terreni
Segmentazione semantica - Immagine satellitare multispettrale

Figura 3. Segmentazione semantica di un'immagine satellitare multispettrale.

Come funziona la segmentazione semantica

Il processo di addestramento di una rete di segmentazione semantica per classificare le immagini prevede i seguenti passaggi:

  1. Analizzare una raccolta di immagini con etichette pixel
  2. Creare una rete di segmentazione semantica
  3. Addestrare la rete per classificare le immagini in categorie di pixel
  4. Valutare la precisione della rete

Esempio: Applicazione per la guida autonoma

La sequenza nella Figura 4 mostra un esempio reale di segmentazione semantica utilizzata per la guida autonoma. Le immagini della strada vengono automaticamente segmentate rispetto agli altri veicoli. La prossima sezione illustra come vengono create queste reti.

Segmentazione semantica per un'applicazione di guida autonoma

Figura 4. Segmentazione semantica per un'applicazione di guida autonoma.

Comprendere l'architettura

Un approccio comune alla segmentazione semantica consiste nel creare una SegNet, basata su un'architettura di rete neurale convoluzionale (CNN). Nella Figura 5 è riportata una tipica architettura CNN.

Questa CNN classifica l'intera immagine in una classe tra varie categorie predefinite.

Segmentazione semantica - Struttura tipica di una CNN

Figura 5. Struttura tipica di una CNN.

Per classificare a livello di pixel invece che dell'intera immagine, è possibile aggiungere un'implementazione inversa della CNN. I processi di sovracampionamento e sottocampionamento vengono eseguiti lo stesso numero di volte per garantire che l'immagine finale abbia le stesse dimensioni dell'immagine di input. Infine, viene utilizzato un layer di output per la classificazione dei pixel, che associa ciascun pixel a una determinata classe. In questo modo si forma un'architettura di codifica/decodifica che consente la segmentazione semantica.

Segmentazione semantica - La CNN esegue funzioni relative all'immagine

Figura 6. La CNN esegue funzioni relative all'immagine su ogni layer, quindi esegue il sottocampionamento dell'immagine utilizzando un livello di pooling (in verde). Questo processo viene ripetuto più volte per la prima metà della rete. L'output della prima metà di questo diagramma è seguito da una quantità uguale di layer di unpooling (in arancione).

Usare MATLAB per la segmentazione semantica

 

In MATLAB, il flusso di lavoro per eseguire la segmentazione semantica prevede questi cinque passaggi:

  1. Etichettare i dati o ottenere dati etichettati
  2. Creare un datastore per le immagini originali e le immagini etichettate
  3. Eseguire la partizione dei datastore
  4. Importare una CNN e modificarla come SegNet
  5. Addestrare e valutare la rete

PASSAGGIO 1: Etichettare i dati o ottenere dati etichettati

I modelli di deep learning si basano su grandi quantità di dati e la segmentazione semantica non fa eccezione. Una possibilità consiste nel trovare dati etichettati su internet. Se si dispone del proprio set di dati, è possibile utilizzare l'app Image Labeler in MATLAB. Il set di dati può essere usato per addestrare una SegNet.

Segmentazione semantica - App Image Labeler

Figura 7: App Image Labeler di MATLAB per l'etichettatura delle immagini per la segmentazione semantica. 

Per saperne di più

PASSAGGIO 2: Creare un datastore per le immagini originali e le immagini etichettate

Quando si lavora con grandi quantità di dati, spesso non è possibile caricare tutte le informazioni in memoria. Per gestire set di dati di grandi dimensioni, è possibile utilizzare un datastore. Un datastore contiene la posizione dei file a cui si desidera accedere e consente di leggerli in memoria solo quando è necessario lavorare su quei file.

Per creare una SegNet, occorrono due datastore:

  1. ImageDatastore, che contiene le immagini originali
  2. PixelLabelDatastore, che contiene le immagini etichettate

PASSAGGIO 3: Eseguire la partizione dei datastore

Quando si crea una SegNet, è necessario suddividere il datastore in due parti:

  1. Il set di addestramento, utilizzato per addestrare la SegNet
  2. Il set di test, utilizzato per valutare l'accuratezza della rete
Segmentazione semantica - Etichettatura della scena di un’autostrada

Figura 8: Scena di un'autostrada che mostra l'immagine a colori (a sinistra) e i pixel etichettati corrispondenti (a destra).

PASSAGGIO 4: Importare una CNN e modificarla come SegNet.

Caricando una rete pre-addestrata, come VGG16, e utilizzando il comando SegNetLayers, è possibile creare l’architettura di codifica/decodifica necessaria per l'etichettatura a livello di pixel.

Segmentazione semantica - Codice per la creazione dell’architettura SegNet

Figura 9: Creazione dell'architettura SegNet con una riga di codice in MATLAB.

PASSAGGIO 5: Addestrare e valutare la rete

Nella fase finale, si impostano gli iperparametri per la rete e si addestra la rete.

Come saperne di più sulla segmentazione semantica

I prodotti che supportano l'uso della segmentazione semantica per l'analisi di immagini includono MATLAB Computer Vision Toolbox per l'etichettatura dei pixel e Deep Learning Toolbox per la creazione e l'addestramento della rete.

L'addestramento e la previsione sono supportate su una GPU CUDA® con capacità di calcolo versione 3.0 o successive. Si consiglia l'uso di una GPU, che richiede Parallel Computing Toolbox.

Riferimenti software

30 giorni di prova gratuita

Per iniziare