Segmentazione semantica dell’immagine utilizzando trasformatori di predizione densa

Segmentazione semantica dell'immagine con l'uso di trasformatori di predizione densa

Introduzione

Questo articolo esaminerà una tecnica di visione artificiale chiamata Segmentazione Semantica delle Immagini. Anche se può sembrare complesso, andremo ad affrontarlo passo dopo passo e introdurremo un concetto entusiasmante di segmentazione semantica delle immagini, che fa uso di trasformatori di previsione densa o DPT, per abbreviare, dalla collezione Hugging Face. Utilizzando i DPT, si introduce una nuova fase della visione artificiale con capacità insolite.

Obiettivi di Apprendimento

  • Confronto tra DPT e comprensione convenzionale delle connessioni lontane.
  • Implementazione della segmentazione semantica tramite previsione della profondità con DPT in Python.
  • Esplorazione delle progettazioni dei DPT, comprensione delle loro caratteristiche uniche.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cos’è la Segmentazione Semantica delle Immagini?

Immagina di avere un’immagine e voler etichettare ogni pixel in base a ciò che rappresenta. Questa è l’idea alla base della segmentazione semantica delle immagini. Può essere utilizzata nella visione artificiale, distinguendo ad esempio una macchina da un albero o separando parti di un’immagine; il tutto si basa sull’etichettatura intelligente dei pixel. Tuttavia, la vera sfida risiede nel dare un senso al contesto e alle relazioni tra gli oggetti. Confrontiamo questo con l’approccio, permettetemi di dirlo, vecchio modo di gestire le immagini.

Reti Neurali Convoluzionali (CNN)

La prima svolta è stata utilizzare le Reti Neurali Convoluzionali per affrontare compiti che coinvolgono immagini. Tuttavia, le CNN hanno dei limiti, soprattutto nel catturare connessioni a lunghe distanze nelle immagini. Immagina di dover capire come i diversi elementi di un’immagine interagiscono tra loro attraverso lunghe distanze: è qui che le tradizionali CNN faticano. E qui entra in gioco il DPT. Questi modelli, basati sulla potente architettura dei transformer, mostrano capacità nel catturare associazioni. Vedremo i DPT successivamente.

Cosa sono i Dense Prediction Transformers (DPT)?

Per comprendere questo concetto, immaginiamo di combinare la potenza dei Transformer che conosciamo nei compiti di elaborazione del linguaggio naturale con l’analisi delle immagini. Questo è il concetto alla base dei Dense Prediction Transformers. Sono come super detective del mondo delle immagini. Hanno la capacità non solo di etichettare i pixel delle immagini, ma anche di prevedere la profondità di ogni pixel, che fornisce informazioni su quanto distante ciascun oggetto si trova dall’immagine. Vedremo questo di seguito.

Strumenti dell’Architettura DPT

I DPT si presentano in diversi tipi, ognuno con i suoi strati “encoder” e “decoder”. Vediamo qui due tra i più popolari:

  • DPT-Swin-Transformer: Immagina un mega transformer con 10 strati “encoder” e 5 strati “decoder”. È eccellente nel comprendere le relazioni tra gli elementi a diversi livelli nell’immagine.
  • DPT-ResNet: Questo è come un detective intelligente con 18 strati “encoder” e 5 strati “decoder”. Eccelle nel individuare connessioni tra oggetti lontani mantenendo intatta la struttura spaziale dell’immagine.

Caratteristiche Chiave

Ecco uno sguardo più approfondito su come funzionano i DPT utilizzando alcune caratteristiche chiave:

  • Estrazione Gerarchica delle Caratteristiche: Proprio come le tradizionali Reti Neurali Convoluzionali (CNN), i DPT estraggono caratteristiche dall’immagine di input. Tuttavia, seguono un approccio gerarchico in cui l’immagine è divisa in diversi livelli di dettaglio. È questa gerarchia che aiuta a catturare il contesto sia locale che globale, consentendo al modello di comprendere le relazioni tra gli oggetti a diverse scale.
  • Mechanismo di Auto-Attenzione: Questa è la spina dorsale dei DPT, ispirata all’architettura originale dei Transformer, che consente al modello di catturare dipendenze a lungo raggio all’interno dell’immagine e apprendere relazioni complesse tra i pixel. Ogni pixel considera le informazioni di tutti gli altri pixel, dando così al modello una comprensione olistica dell’immagine.

Dimostrazione in Python della segmentazione semantica delle immagini usando DPTs

Vedremo di seguito un’implementazione dei DPTs. Prima, prepariamo il nostro ambiente installando le librerie non preinstallate su Colab. Puoi trovare il codice per questo qui o su https://github.com/inuwamobarak/semantic-segmentation

Per prima cosa, installiamo e configuriamo il nostro ambiente.

!pip install -q git+https://github.com/huggingface/transformers.git

Successivamente, prepariamo il modello su cui intendiamo allenarci.

## Definisci il modello## Importa DPTForSemanticSegmentation dalla libreria Transformersfrom transformers import DPTForSemanticSegmentation## Crea il modello DPTForSemanticSegmentation e carica i pesi preallenati## Il modello "Intel/dpt-large-ade" è un modello su larga scala allenato sul dataset ADE20Kmodel = DPTForSemanticSegmentation.from_pretrained("Intel/dpt-large-ade")

Ora carichiamo e prepariamo un’immagine che desideriamo utilizzare per la segmentazione.

# Importa la classe Immagine dal modulo PIL (Python Imaging Library)from PIL import Imageimport requests# URL dell'immagine da scaricareurl = 'https://img.freepik.com/free-photo/happy-lady-hugging-her-white-friendly-dog-while-walking-park_171337-19281.jpg?w=740&t=st=1689214254~exp=1689214854~hmac=a8de6eb251268aec16ed61da3f0ffb02a6137935a571a4a0eabfc959536b03dd'# Il parametro `stream=True` garantisce che la risposta non venga scaricata immediatamente, ma venga mantenuta in memoriaresponse = requests.get(url, stream=True)# Crea la classe Immagineimage = Image.open(response.raw)# Visualizza l'immagineimage

from torchvision.transforms import Compose, Resize, ToTensor, Normalize# Imposta l'altezza e la larghezza desiderate per l'immagine di inputnet_h = net_w = 480# Definisci una serie di trasformazioni dell'immaginetransform = Compose([        # Ridimensiona l'immagine        Resize((net_h, net_w)),        # Converti l'immagine in un tensore PyTorch        ToTensor(),        # Normalizza l'immagine        Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),    ])

Il prossimo passo da qui sarà applicare alcune trasformazioni all’immagine.

# Trasforma l'immagine di inputpixel_values = transform(image)pixel_values = pixel_values.unsqueeze(0)

Successivamente effettuiamo un passaggio in avanti.

import torch# Disabilita il calcolo del gradientecon torch.no_grad():    # Esegui un passaggio in avanti attraverso il modello    outputs = model(pixel_values)    # Ottieni i logiti (previsioni grezze) dall'output    logits = outputs.logits

Ora stampiamo l’immagine come un insieme di array. Successivamente convertiremo questo in un’immagine con la previsione semantica.

import torch# Interpola i logiti alle dimensioni dell'immagine originaleprediction = torch.nn.functional.interpolate(    logits,    size=image.size[::-1],  # Inverti le dimensioni dell'immagine originale (larghezza, altezza)    mode="bicubic",    align_corners=False)# Converti i logiti in previsioni di classeprediction = torch.argmax(prediction, dim=1) + 1# Riduci le dimensioni del tensore delle previsioni per rimuovere le dimensioniprediction = prediction.squeeze()# Sposta il tensore delle previsioni sulla CPU e convertilo in un array numpyprediction = prediction.cpu().numpy()

Ora effettuiamo la previsione semantica.

from PIL import Image# Converti l'array di previsione in un'immaginepredicted_seg = Image.fromarray(prediction.squeeze().astype('uint8'))# Applica la mappa dei colori all'immagine di segmentazione previstapredicted_seg.putpalette(adepallete)# Combinare l'immagine originale e l'immagine di segmentazione previstaout = Image.blend(image, predicted_seg.convert("RGB"), alpha=0.5)

Ecco la nostra immagine con la semantica che viene prevista. Puoi sperimentare con le tue immagini. Ora vediamo un po’ di valutazioni che sono state applicate alle DPTs.

Valutazioni delle prestazioni delle DPTs

Le DPTs sono state testate in diversi lavori di ricerca e articoli, e sono state utilizzate su diversi dataset di immagini come Cityscapes, PASCAL VOC e ADE20K, ottenendo prestazioni migliori rispetto ai modelli tradizionali CNN. I link a questi dataset e all’articolo di ricerca verranno forniti nella sezione dei link qui sotto.

Su Cityscapes, DPT-Swin-Transformer ha ottenuto il punteggio del 79,1% nella metrica di mean intersection over union (mIoU). Su PASCAL VOC, DPT-ResNet ha raggiunto un mIoU dell’82,8%, stabilendo un nuovo standard. Questi punteggi testimoniano la capacità delle DPTs di comprendere le immagini in profondità.

Il Futuro delle DPTs e Ciò Che Ci Aspetta

Le DPTs rappresentano una nuova era nella comprensione delle immagini. La ricerca sulle DPTs sta cambiando il modo in cui vediamo e interagiamo con le immagini, aprendo nuove possibilità. In poche parole, la segmentazione semantica delle immagini con le DPTs è una svolta che sta cambiando il modo in cui decodifichiamo le immagini, e sicuramente farà ancora di più in futuro. Dalle etichette dei pixel alla comprensione della profondità, le DPTs rappresentano ciò che è possibile nel campo della visione artificiale. Approfondiamo ulteriormente.

Stima Accurata della Profondità

Uno dei contributi più significativi delle DPTs è la previsione delle informazioni sulla profondità dalle immagini. Questo avanzamento offre applicazioni come la ricostruzione di scene 3D, la realtà aumentata e la manipolazione degli oggetti. Ciò fornirà una comprensione cruciale dell’organizzazione spaziale degli oggetti all’interno di una scena.

Segmentazione Semantica e Previsione della Profondità Simultanee

Le DPTs possono fornire sia la segmentazione semantica che la previsione della profondità in un framework unificato. Ciò consente una comprensione olistica delle immagini, consentendo applicazioni sia per le informazioni semantiche che per le conoscenze sulla profondità. Ad esempio, nell’automazione guida autonoma, questa combinazione è fondamentale per una navigazione sicura.

Riduzione degli Sforzi di Raccolta Dati

Le DPTs hanno il potenziale per alleviare la necessità di un’ampia etichettatura manuale dei dati di profondità. Le immagini di addestramento con mappe di profondità correlate possono imparare a prevedere la profondità senza richiedere annotazioni pixel-wise. Ciò riduce significativamente il costo e lo sforzo associati alla raccolta dati.

Comprensione della Scena

Le DPTs consentono alle macchine di comprendere il loro ambiente in tre dimensioni, il che è cruciale per consentire ai robot di navigare e interagire in modo efficace. In settori come la manifattura e la logistica, le DPTs possono facilitare l’automazione consentendo ai robot di manipolare gli oggetti con una comprensione più profonda delle relazioni spaziali.

Le Dense Prediction Transformers stanno ridefinendo il campo della visione artificiale fornendo informazioni accurate sulla profondità insieme a una comprensione semantica delle immagini. Tuttavia, affrontare le sfide legate alla stima della profondità dettagliata, alla generalizzazione, alla stima dell’incertezza, alla mitigazione dei bias e all’ottimizzazione in tempo reale sarà fondamentale per realizzare pienamente l’impatto trasformativo delle DPTs in futuro.

Conclusioni

La segmentazione semantica delle immagini utilizzando Dense Prediction Transformers è un percorso che combina l’etichettatura pixel con una visione spaziale. L’unione delle DPTs con la segmentazione semantica delle immagini apre una strada affascinante nella ricerca sulla visione artificiale. Questo articolo ha cercato di svelare le intricazioni sottostanti delle DPTs, dalla loro architettura alle loro prestazioni e al loro promettente potenziale per ridefinire il futuro della segmentazione semantica nella visione artificiale.

Punti Chiave

  • Le DPTs vanno oltre i pixel per comprendere il contesto spaziale e prevedere le profondità.
  • Le DPTs superano i modelli tradizionali di riconoscimento delle immagini catturando distanza e informazioni 3D.
  • Le DPTs ridefiniscono la percezione delle immagini, consentendo una comprensione più profonda degli oggetti e delle relazioni.

Domande Frequenti

Link:

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.