Una guida 2021 alla segmentazione semantica

Nodo di origine: 872271

Intro

L'apprendimento profondo ha avuto molto successo quando si lavora con le immagini come dati ed è attualmente in una fase in cui funziona meglio degli umani su più casi d'uso. I problemi più importanti che gli esseri umani sono stati interessati a risolvere con la visione artificiale sono classificazione delle immagini, rilevamento di oggetti e segmentazione nell'ordine crescente della loro difficoltà.

Nel semplice vecchio compito di classificazione delle immagini ci interessa solo ottenere le etichette di tutti gli oggetti presenti in un'immagine. Nel rilevamento degli oggetti si fa un ulteriore passo avanti e si cerca di conoscere insieme a quali oggetti sono presenti in un'immagine, la posizione in cui sono presenti gli oggetti con l'aiuto dei riquadri di delimitazione. La segmentazione dell'immagine la porta a un nuovo livello cercando di scoprire con precisione il confine esatto degli oggetti nell'immagine.

Fonte http://cs224d.stanford.edu/index.html

In questo articolo esamineremo questo concetto di segmentazione delle immagini, discuteremo i casi d'uso rilevanti, le diverse architetture di rete neurale coinvolte nel raggiungimento dei risultati, le metriche e i set di dati da esplorare.

Cos'è la segmentazione dell'immagine

Sappiamo che un'immagine non è altro che una raccolta di pixel. La segmentazione dell'immagine è il processo di classificazione di ogni pixel in un'immagine appartenente a una certa classe e quindi può essere considerata come un problema di classificazione per pixel. Esistono due tipi di tecniche di segmentazione

Source http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf
  1. Segmentazione semantica : - La segmentazione semantica è il processo di classificazione di ogni pixel appartenente a una particolare etichetta. Non è diverso nelle diverse istanze dello stesso oggetto. Ad esempio, se in un'immagine sono presenti 2 gatti, la segmentazione semantica assegna la stessa etichetta a tutti i pixel di entrambi i gatti
  2. Segmentazione delle istanze : - La segmentazione delle istanze differisce dalla segmentazione semantica nel senso che assegna un'etichetta univoca a ogni istanza di un particolare oggetto nell'immagine. Come si può vedere nell'immagine sopra, a tutti e 3 i cani vengono assegnati colori diversi, cioè etichette diverse. Con la segmentazione semantica a tutti sarebbe stato assegnato lo stesso colore.

Quindi arriveremo ora al punto in cui avremmo bisogno di questo tipo di algoritmo

Casi d'uso della segmentazione delle immagini

riconoscimento della scrittura : - Junjo e tutti hanno dimostrato come la segmentazione semantica viene utilizzata per estrarre parole e linee da documenti scritti a mano nei loro file Carta di ricerca 2019 riconoscere i caratteri scritti a mano

Fonte

Modalità verticale di Google : - Ci sono molti casi d'uso in cui è assolutamente essenziale separare il primo piano dallo sfondo. Ad esempio nella modalità ritratto di Google possiamo vedere lo sfondo sfocato mentre il primo piano rimane invariato per dare un effetto fresco

Fonte: - https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

Storie di YouTube : - Google ha recentemente rilasciato una funzione Storie di YouTube per i creatori di contenuti per mostrare sfondi diversi durante la creazione di storie.

Fonte: - https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

Trucco virtuale : - L'applicazione del rossetto virtuale è ora possibile con l'aiuto della segmentazione dell'immagine

Fonte: - https://www.theverge.com/2017/3/16/14946086/sephora-virtual-assistant-ios-app-update-ar-makeup

4. Prova virtuale : - La prova virtuale dei vestiti è una caratteristica interessante che era disponibile nei negozi utilizzando hardware specializzato che crea un modello 3D. Ma con il deep learning e la segmentazione delle immagini lo stesso può essere ottenuto utilizzando solo un'immagine 2d

Fonte: - https://arxiv.org/pdf/1807.07688.pdf

Ricerca visiva di immagini : - L'idea di segmentare i vestiti viene utilizzata anche negli algoritmi di recupero delle immagini nell'eCommerce. Ad esempio Pinterest / Amazon ti consente di caricare qualsiasi immagine e ottenere prodotti simili dall'aspetto simile eseguendo una ricerca di immagini basata sulla segmentazione della parte di stoffa

Fonte: - https://github.com/paucarre/tiefvision

Auto a guida autonoma : - Le auto a guida autonoma richiedono una comprensione completa dell'ambiente circostante a un livello pixel perfetto. Quindi la segmentazione dell'immagine viene utilizzata per identificare corsie e altre informazioni necessarie

Fonte: - https://medium.com/intro-to-artificial-intelligence/semantic-segmentation-udaitys-self-driving-car-engineer-nanodegree-c01eb6eaf9d

Nanonets aiuta le aziende Fortune 500 a fornire migliori esperienze dei clienti su larga scala utilizzando la segmentazione semantica.

Metodi e tecniche

Prima dell'avvento del deep learning, le classiche tecniche di machine learning come SVM, Random Forest, K-means Clustering venivano utilizzate per risolvere il problema della segmentazione delle immagini. Ma, come per la maggior parte delle affermazioni sui problemi legati all'immagine, l'apprendimento profondo ha funzionato ampiamente meglio delle tecniche esistenti ed è diventato una norma ora quando si tratta di segmentazione semantica. Rivediamo le tecniche che vengono utilizzate per risolvere il problema

Rete completamente convoluzionale

L'architettura generale di una CNN è costituita da pochi strati convoluzionali e di pooling seguiti da pochi strati completamente connessi alla fine. Il documento di Fully Convolutional Network pubblicato nel 2014 sostiene che lo strato finale completamente connesso può essere pensato come una convoluzione 1 × 1 che copre l'intera regione.

Fonte: - https://arxiv.org/abs/1411.4038

Quindi gli strati densi finali possono essere sostituiti da uno strato di convoluzione che ottiene lo stesso risultato. Ma ora il vantaggio di fare questo è che la dimensione dell'input non deve più essere fissata. Quando si coinvolgono strati densi, la dimensione dell'input è vincolata e quindi quando deve essere fornito un input di dimensioni diverse deve essere ridimensionato. Ma sostituendo uno strato denso con la convoluzione, questo vincolo non esiste.

Inoltre, quando viene fornita un'immagine di dimensioni maggiori come input, l'output prodotto sarà una mappa delle caratteristiche e non solo un output di classe come per un'immagine di dimensioni di input normale. Anche il comportamento osservato della mappa delle caratteristiche finali rappresenta la mappa termica della classe richiesta, cioè la posizione dell'oggetto è evidenziata nella mappa delle caratteristiche. Poiché l'output della mappa delle caratteristiche è una mappa termica dell'oggetto richiesto, è un'informazione valida per il nostro caso d'uso della segmentazione.

Poiché la mappa delle caratteristiche ottenuta al livello di output è sottocampionata a causa dell'insieme di convoluzioni eseguite, vorremmo campionarla utilizzando una tecnica di interpolazione. Il campionamento bilineare verso l'alto funziona, ma l'articolo propone di utilizzare il campionamento appreso con deconvoluzione che può persino apprendere un campionamento verso l'alto non lineare.

La parte di campionamento verso il basso della rete è chiamata codificatore e la parte di campionamento verso l'alto è chiamata decodificatore. Questo è uno schema che vedremo in molte architetture, ovvero ridurre le dimensioni con l'encoder e quindi aumentare il campionamento con il decoder. In un mondo ideale non vorremmo campionare utilizzando il pooling e mantenere la stessa dimensione dappertutto, ma ciò porterebbe a un'enorme quantità di parametri e sarebbe computazionalmente impossibile.

Fonte: - https://arxiv.org/abs/1411.4038

Sebbene i risultati di output ottenuti siano stati decenti, l'output osservato è approssimativo e non uniforme. La ragione di ciò è la perdita di informazioni sul Feature Layer finale a causa del downsampling di 32 volte utilizzando i convolution layer. Ora diventa molto difficile per la rete eseguire l'upsampling 32x utilizzando queste poche informazioni. Questa architettura è chiamata FCN-32

Per affrontare questo problema, il documento ha proposto altre 2 architetture FCN-16, FCN-8. In FCN-16 le informazioni del precedente livello di pooling vengono utilizzate insieme alla mappa delle caratteristiche finali e quindi ora il compito della rete è di apprendere un campionamento 16 volte superiore, che è migliore rispetto a FCN-32. FCN-8 cerca di renderlo ancora migliore includendo informazioni da un altro livello di pool precedente.

A

U-net si basa sulla rete completamente convoluzionale dall'alto. È stato costruito per scopi medici per trovare tumori nei polmoni o nel cervello. Consiste anche di un codificatore che sottocampiona l'immagine di input in una mappa di caratteristiche e il decodificatore che campiona la mappa di caratteristiche per inserire le dimensioni dell'immagine usando i livelli di deconvoluzione appresi.

Fonte: - https://arxiv.org/abs/1505.04597

Il contributo principale dell'architettura U-Net sono le connessioni di scelta rapida. Abbiamo visto sopra in FCN che poiché abbiamo sottocampionato un'immagine come parte dell'encoder, abbiamo perso molte informazioni che non possono essere facilmente recuperate nella parte dell'encoder. FCN cerca di risolvere questo problema prendendo le informazioni dai layer di pool prima del feature layer finale.

U-Net propone un nuovo approccio per risolvere questo problema di perdita di informazioni. Si propone di inviare informazioni a ogni strato di campionamento superiore nel decodificatore dal corrispondente strato di campionamento inferiore nel codificatore, come si può vedere nella figura sopra, catturando così informazioni più fini pur mantenendo il calcolo basso. Poiché gli strati all'inizio del codificatore avrebbero più informazioni, rafforzerebbero l'operazione di campionamento verso l'alto del decodificatore fornendo dettagli fini corrispondenti alle immagini in ingresso, migliorando notevolmente i risultati. Il documento ha anche suggerito l'uso di una nuova funzione di perdita che discuteremo di seguito.

Deeplab

Deeplab di un gruppo di ricercatori di Google ha proposto una moltitudine di tecniche per migliorare i risultati esistenti e ottenere risultati migliori a costi di calcolo inferiori. I 3 miglioramenti principali suggeriti come parte della ricerca sono

1) Convoluzioni atrose
2) Raggruppamento piramidale spaziale atroso
3) Utilizzo di campi casuali condizionali per migliorare l'output finale
Parliamo di tutti questi

Convoluzione atrosa

Uno dei principali problemi con l'approccio FCN è l'eccessivo ridimensionamento dovuto a operazioni di pooling consecutive. A causa della serie di raggruppamenti, l'immagine in ingresso viene sottocampionata di 32x, che viene nuovamente campionata in alto per ottenere il risultato della segmentazione. Il downsampling di 32x si traduce in una perdita di informazioni che è molto cruciale per ottenere un output preciso in un'attività di segmentazione. Anche la deconvoluzione per aumentare il campione di 32 volte è un'operazione costosa di calcolo e memoria poiché ci sono parametri aggiuntivi coinvolti nella formazione di un campionamento appreso.

Il documento propone l'uso della convoluzione atrosa o della convoluzione del foro o della convoluzione dilatata che aiuta a ottenere una comprensione di un contesto ampio utilizzando lo stesso numero di parametri.

Source:- https://www.mdpi.com/1424-8220/19/24/5361/htm

La convoluzione dilatata funziona aumentando la dimensione del filtro aggiungendo zeri (chiamati buchi) per colmare il divario tra i parametri. Il numero di fori / zeri riempiti tra i parametri del filtro è chiamato da un termine tasso di dilatazione. Quando il tasso è uguale a 1 non è altro che la normale convoluzione. Quando la velocità è uguale a 2, viene inserito uno zero tra ogni altro parametro, facendo sembrare il filtro una convoluzione 5 × 5. Ora ha la capacità di ottenere il contesto della convoluzione 5 × 5 pur avendo parametri di convoluzione 3 × 3. Allo stesso modo per il tasso 3 il campo ricettivo va a 7 × 7.

In Deeplab gli ultimi strati di pooling vengono sostituiti per avere un passo 1 invece di 2, mantenendo così la frequenza di campionamento inferiore a solo 8x. Quindi vengono applicate una serie di convoluzioni atrose per catturare il contesto più ampio. Per l'addestramento, l'output etichettato come maschera viene sottocampionato di 8 volte per confrontare ogni pixel. Per inferenza, il campionamento bilineare verso l'alto viene utilizzato per produrre output della stessa dimensione che fornisce risultati abbastanza decenti a costi di calcolo / memoria inferiori poiché il campionamento bilineare verso l'alto non necessita di parametri a differenza della deconvoluzione per il campionamento verso l'alto.

ASPP

Spatial Pyramidal Pooling è un concetto introdotto in SPPNet per acquisire informazioni su più scale da una mappa delle caratteristiche. Prima dell'introduzione di SPP vengono fornite immagini di input a diverse risoluzioni e le mappe delle caratteristiche calcolate vengono utilizzate insieme per ottenere le informazioni multiscala, ma ciò richiede più tempo e calcolo. Con Spatial Pyramidal Pooling le informazioni multi-scala possono essere acquisite con una singola immagine di input.

Fonte: - http://kaiminghe.com/eccv14sppnet/index.html

Con il modulo SPP la rete produce 3 uscite di dimensioni 1 × 1 (cioè GAP), 2 × 2 e 4 × 4. Questi valori vengono concatenati convertendoli in un vettore 1d acquisendo così le informazioni su più scale. Un altro vantaggio dell'utilizzo di SPP è la possibilità di fornire immagini di input di qualsiasi dimensione.

ASPP prende il concetto di fondere informazioni da scale diverse e lo applica alle convoluzioni Atrous. L'ingresso è convolto con diversi tassi di dilatazione e le uscite di questi sono fuse insieme.

Fonte: - http://liangchiehchen.com/projects/DeepLab.html

Come si può vedere l'ingresso è convolto con filtri 3 × 3 di tassi di dilatazione 6, 12, 18 e 24 e le uscite sono concatenate insieme poiché hanno le stesse dimensioni. All'uscita con fusibile viene aggiunta anche un'uscita di convoluzione 1 × 1. Per fornire anche le informazioni globali, l'uscita GAP viene aggiunta a quanto sopra dopo il campionamento. L'uscita con fusibile di 3 × 3 uscite dilatate variabili, 1 × 1 e l'uscita GAP viene passata attraverso la convoluzione 1 × 1 per ottenere il numero di canali richiesto.

Poiché l'immagine richiesta da segmentare può essere di qualsiasi dimensione nell'input, le informazioni multiscala da ASPP aiutano a migliorare i risultati.

Miglioramento dell'output con CRF

Il pooling è un'operazione che aiuta a ridurre il numero di parametri in una rete neurale ma porta con sé anche una proprietà di invarianza. L'invarianza è la qualità di una rete neurale non influenzata da piccole traduzioni in input. A causa di questa proprietà ottenuta con il pooling, l'output di segmentazione ottenuto da una rete neurale è grossolano ei confini non sono definiti concretamente.

Fonte: - http://liangchiehchen.com/projects/DeepLab.html

Per far fronte a questo il documento propone l'uso del modello grafico CRF. Conditional Random Field gestisce una fase di post-elaborazione e cerca di migliorare i risultati prodotti per definire i confini dello shaper. Funziona classificando un pixel in base non solo alla sua etichetta ma anche in base ad altre etichette di pixel. Come si può vedere dalla figura sopra, il confine grossolano prodotto dalla rete neurale diventa più raffinato dopo il passaggio attraverso CRF.

Deeplab-v3 ha introdotto la normalizzazione dei batch e il tasso di dilatazione suggerito moltiplicato per (1,2,4) all'interno di ogni strato in un blocco Resnet. Anche l'aggiunta di funzionalità a livello di immagine al modulo ASPP, discusso nella discussione precedente su ASPP, è stata proposta come parte di questo documento

Fonte: - https://arxiv.org/pdf/1706.05587.pdf

Deeplab-v3 + ha suggerito di avere un decoder invece del semplice campionamento bilineare 16x. Il decodificatore prende spunto dal decodificatore utilizzato da architetture come U-Net che prendono le informazioni dai livelli del codificatore per migliorare i risultati. L'uscita dell'encoder viene campionata 4x utilizzando il campionamento bilineare verso l'alto e concatenata con le caratteristiche dell'encoder che viene nuovamente campionata 4x dopo aver eseguito una convoluzione 3 × 3. Questo approccio produce risultati migliori rispetto a un campionamento diretto di 16 volte. Si propone inoltre di utilizzare l'architettura Xception modificata al posto di Resnet come parte dell'encoder e le convoluzioni separabili in profondità vengono ora utilizzate in aggiunta alle convoluzioni Atrous per ridurre il numero di calcoli.

Rete di convoluzione globale

Fonte: - https://arxiv.org/pdf/1703.02719.pdf

La segmentazione semantica implica l'esecuzione di due attività contemporaneamente

i) Classificazione
ii) Localizzazione

Le reti di classificazione sono create per essere invarianti alla traslazione e alla rotazione, quindi non dando importanza alle informazioni sulla posizione mentre la localizzazione implica l'acquisizione di dettagli accurati rispetto alla posizione. Quindi intrinsecamente questi due compiti sono contraddittori. La maggior parte degli algoritmi di segmentazione dà più importanza alla localizzazione, cioè la seconda nella figura sopra e quindi perde di vista il contesto globale. In questo lavoro l'autore propone un modo per dare importanza anche al compito di classificazione senza perdere allo stesso tempo le informazioni di localizzazione

Fonte: - https://arxiv.org/pdf/1703.02719.pdf

L'autore propone di raggiungere questo obiettivo utilizzando kernel di grandi dimensioni come parte della rete, consentendo così connessioni dense e quindi più informazioni. Ciò si ottiene con l'aiuto di un blocco GCN, come si può vedere nella figura sopra. Il blocco GCN può essere pensato come un filtro di convoluzione akxk dove k può essere un numero maggiore di 3. Per ridurre il numero di parametri, il filtro akxk è ulteriormente suddiviso in blocchi 1 xk e kx 1, kx1 e 1xk che vengono poi sommati. Pertanto, aumentando il valore k, viene catturato un contesto più ampio.

Inoltre, l'autore propone un blocco Boundary Refinement che è simile a un blocco residuo visto in Resnet costituito da una connessione scorciatoia e una connessione residua che vengono sommate per ottenere il risultato. Si è osservato che avere un blocco di affinamento del confine ha portato a migliorare i risultati al confine della segmentazione.

I risultati hanno mostrato che il blocco GCN ha migliorato la precisione di classificazione dei pixel più vicini al centro dell'oggetto, indicando il miglioramento causato dall'acquisizione di un contesto a lungo raggio, mentre il blocco Boundary Refinement ha contribuito a migliorare la precisione dei pixel più vicini al confine.

Vedere più di una volta - KSAC per la segmentazione semantica

La famiglia Deeplab utilizza ASPP per fare in modo che più campi ricettivi acquisiscano informazioni utilizzando diversi tassi di convoluzione atrosi. Sebbene ASPP sia stato molto utile per migliorare la segmentazione dei risultati, ci sono alcuni problemi intrinseci causati dall'architettura. Non ci sono informazioni condivise tra i diversi livelli paralleli in ASPP, che influiscono così sul potere di generalizzazione dei kernel in ogni livello. Inoltre, poiché ogni strato si rivolge a diversi set di campioni di addestramento (oggetti più piccoli a velocità atro più piccole e oggetti più grandi a velocità atro maggiori), la quantità di dati per ogni strato parallelo sarebbe inferiore, influenzando così la generalizzabilità complessiva. Anche il numero di parametri nella rete aumenta linearmente con il numero di parametri e quindi può portare a overfitting.

Fonte: - https://arxiv.org/pdf/1908.09443.pdf

Per gestire tutti questi problemi, l'autore propone una nuova struttura di rete chiamata Kernel-Sharing Atrous Convolution (KSAC). Come si può vedere nella figura sopra, invece di avere un kernel diverso per ogni livello parallelo è ASPP un singolo kernel è condiviso migliorando così la capacità di generalizzazione della rete. Utilizzando KSAC invece di ASPP, il 62% dei parametri viene salvato quando vengono utilizzati tassi di dilatazione di 6,12 e 18.

Un altro vantaggio dell'utilizzo di una struttura KSAC è il numero di parametri indipendenti dal numero di velocità di dilatazione utilizzate. In questo modo possiamo aggiungere quante più tariffe possibile senza aumentare le dimensioni del modello. ASPP fornisce i migliori risultati con tassi 6,12,18 ma l'accuratezza diminuisce con 6,12,18,24 indicando un possibile overfitting. Ma l'accuratezza di KSAC migliora ancora considerevolmente indicando la capacità di generalizzazione avanzata.

Questa tecnica di condivisione del kernel può anche essere vista come un aumento nello spazio delle funzionalità poiché lo stesso kernel viene applicato a più velocità. Analogamente a come l'aumento dell'input fornisce risultati migliori, l'aumento delle funzionalità eseguito nella rete dovrebbe aiutare a migliorare la capacità di rappresentazione della rete.

Segmentazione video

Per casi d'uso come auto a guida autonoma, robotica ecc. È necessaria la segmentazione in tempo reale sul video osservato. Le architetture discusse finora sono praticamente progettate per la precisione e non per la velocità. Quindi, se vengono applicati su una base per fotogramma su un video, il risultato verrebbe a una velocità molto bassa.

Inoltre, in generale, in un video c'è molta sovrapposizione nelle scene su fotogrammi consecutivi che potrebbero essere utilizzati per migliorare i risultati e la velocità che non entreranno nell'immagine se l'analisi viene eseguita su base per fotogramma. Usando questi suggerimenti, discutiamo di architetture progettate specificamente per i video

STFCN

Spatio-Temporal FCN propone di utilizzare FCN insieme a LSTM per eseguire la segmentazione video. Siamo già a conoscenza di come FCN possa essere utilizzato per estrarre funzionalità per segmentare un'immagine. Gli LSTM sono una sorta di reti neurali in grado di acquisire informazioni sequenziali nel tempo. STFCN combina la potenza di FCN con LSTM per acquisire sia le informazioni spaziali che quelle temporali

Fonte: - https://arxiv.org/abs/1608.05971

Come si può vedere dalla figura sopra, STFCN è costituito da un FCN, modulo spazio-temporale seguito da deconvoluzione. La mappa delle caratteristiche prodotta da un FCN viene inviata a Spatio-Temporal Module che ha anche un input dal modulo del frame precedente. Il modulo basato su entrambi questi input acquisisce le informazioni temporali oltre alle informazioni spaziali e le invia attraverso la quale viene campionata alla dimensione originale dell'immagine utilizzando la deconvoluzione simile a come viene eseguita in FCN

Poiché sia ​​FCN che LSTM stanno lavorando insieme come parte di STFCN, la rete è addestrabile end-to-end e supera gli approcci di segmentazione a frame singolo. Esistono approcci simili in cui LSTM è sostituito da GRU ma il concetto è lo stesso di catturare sia le informazioni spaziali che temporali

CNN video semantici attraverso la deformazione della rappresentazione

Questo documento propone l'uso del flusso ottico attraverso fotogrammi adiacenti come input aggiuntivo per migliorare i risultati della segmentazione

Fonte: - https://arxiv.org/abs/1708.03088

L'approccio suggerito può essere integrato in qualsiasi architettura standard come plug-in. L'ingrediente chiave in gioco è il modulo NetWarp. Per calcolare la mappa di segmentazione viene calcolato il flusso ottico tra il frame corrente e il frame precedente, cioè Ft e viene passato attraverso un FlowCNN per ottenere Λ (Ft). Questo processo è chiamato Trasformazione del flusso. Questo valore viene passato attraverso un modulo warp che prende in input anche la mappa delle caratteristiche di un layer intermedio calcolato passando per la rete. Ciò fornisce una mappa delle caratteristiche deformate che viene quindi combinata con la mappa delle caratteristiche intermedie del layer corrente e l'intera rete viene addestrata end-to-end. Questa architettura ha ottenuto risultati SOTA sui set di dati di benchmark video CamVid e Cityscapes.

Convnet a orologeria per segmentazione semantica video

Questo documento si propone di migliorare la velocità di esecuzione di una rete neurale per attività di segmentazione sui video sfruttando il fatto che le informazioni semantiche in un video cambiano lentamente rispetto alle informazioni a livello di pixel. Quindi le informazioni negli strati finali cambiano a un ritmo molto più lento rispetto agli strati iniziali. Il documento suggerisce tempi diversi

Fonte: - https://arxiv.org/abs/1608.03609

La figura sopra rappresenta la velocità di confronto tra un pool di strati di livello medio4 e uno strato profondo fc7. A sinistra vediamo che poiché ci sono molti cambiamenti attraverso i frame, entrambi i livelli mostrano un cambiamento, ma il cambiamento per pool4 è più alto. A destra vediamo che non ci sono molti cambiamenti tra i fotogrammi. Quindi pool4 mostra un cambiamento marginale mentre fc7 mostra un cambiamento quasi nullo.

La ricerca utilizza questo concetto e suggerisce che nei casi in cui non c'è molto di un cambiamento tra i frame non è necessario calcolare nuovamente le caratteristiche / output e possono essere utilizzati i valori memorizzati nella cache dal frame precedente. Poiché la velocità di modifica varia a seconda dei livelli, è possibile impostare diversi orologi per diversi set di livelli. Quando il clock ticchetta vengono calcolati i nuovi output, altrimenti vengono utilizzati i risultati memorizzati nella cache. La frequenza dei tick dell'orologio può essere fissata staticamente o può essere appresa dinamicamente

Fonte: - https://arxiv.org/abs/1608.03609

Segmentazione semantica video a bassa latenza

Questo documento migliora la discussione precedente selezionando in modo adattivo i frame per calcolare la mappa di segmentazione o per utilizzare il risultato memorizzato nella cache invece di utilizzare un timer fisso o un'euristica.

Fonte: - https://arxiv.org/abs/1804.00389

Il documento propone di dividere la rete in 2 parti, caratteristiche di basso livello e caratteristiche di alto livello. Il costo del calcolo delle funzionalità di basso livello in una rete è molto inferiore rispetto alle funzionalità superiori. La ricerca suggerisce di utilizzare le funzionalità di rete di basso livello come indicatore del cambiamento nella mappa di segmentazione. Nelle loro osservazioni hanno trovato una forte correlazione tra il cambiamento delle caratteristiche di basso livello e il cambiamento della mappa di segmentazione. Quindi, per capire se è necessario calcolare se è necessario calcolare le caratteristiche superiori, viene trovata la differenza delle caratteristiche inferiori su 2 fotogrammi e viene confrontata se supera una determinata soglia. L'intero processo è automatizzato da una piccola rete neurale il cui compito è quello di prendere le caratteristiche inferiori di due frame e di fornire una previsione sull'opportunità di calcolare o meno le caratteristiche superiori. Poiché la decisione di rete si basa sui frame di input, la decisione presa è dinamica rispetto all'approccio di cui sopra.

Segmentazione per nuvole di punti

I dati provenienti da un sensore come il lidar vengono memorizzati in un formato chiamato Point Cloud. La nuvola di punti non è altro che una raccolta di un insieme non ordinato di punti dati 3D (o qualsiasi dimensione). È una rappresentazione sparsa della scena in 3d e la CNN non può essere applicata direttamente in questo caso. Anche qualsiasi architettura progettata per gestire le nuvole di punti dovrebbe tenere in considerazione che si tratta di un insieme non ordinato e quindi può avere molte possibili permutazioni. Quindi la rete dovrebbe essere invariante di permutazione. Anche i punti definiti nella nuvola di punti possono essere descritti dalla distanza tra loro. Quindi i punti più vicini in generale contengono informazioni utili utili per i compiti di segmentazione

PointNet

PointNet è un documento importante nella storia della ricerca sulle nuvole di punti che utilizza il deep learning per risolvere i compiti di classificazione e segmentazione. Studiamo l'architettura di Pointnet

Fonte: - https://arxiv.org/abs/1612.00593

L'input della rete per n punti è una matrice nx 3. La matrice nx 3 viene mappata su nx 64 utilizzando uno strato multi-perceptron condiviso (rete completamente connessa) che viene quindi mappato su nx 64 e quindi su nx 128 e nx 1024. Il pooling massimo viene applicato per ottenere un vettore 1024 che viene convertito in k output passando attraverso MLP con dimensioni 512, 256 e k. Infine vengono prodotti output di classe k simili a qualsiasi rete di classificazione.

La classificazione si occupa solo delle caratteristiche globali, ma la segmentazione necessita anche delle caratteristiche locali. Quindi le caratteristiche locali dal livello intermedio a nx 64 sono concatenate con le caratteristiche globali per ottenere la matrice anx 1088 che viene inviata attraverso mlp di 512 e 256 per arrivare a nx 256 e quindi anche se MLP di 128 em per fornire m classi di output per ogni punto nella nuvola di punti.

Anche la rete coinvolge una trasformazione di input e una trasformazione di caratteristiche come parte della rete il cui compito è non modificare la forma dell'input ma aggiungere invarianza alle trasformazioni affini, ad esempio traslazione, rotazione ecc.

A-CNN

Fonte: - https://arxiv.org/abs/1904.08017

A-CNN propone l'uso di convoluzioni anulari per acquisire informazioni spaziali. Sappiamo dalla CNN che le operazioni di convoluzione catturano le informazioni locali essenziali per comprendere l'immagine. A-CNN ha ideato una nuova convoluzione chiamata convoluzione anulare che viene applicata ai punti vicini in una nuvola di punti.

L'architettura prende come input nx 3 punti e trova per essi le normali che vengono utilizzate per l'ordinamento dei punti. Un sottocampione di punti viene preso utilizzando l'algoritmo FPS ottenendo ni x 3 punti. Su questi viene applicata una convoluzione anulare per aumentare a 128 dimensioni. La convoluzione anulare viene eseguita sui punti di vicinato che vengono determinati utilizzando un algoritmo KNN.

Un altro insieme delle operazioni precedenti viene eseguito per aumentare le dimensioni a 256. Quindi viene applicato un mlp per modificare le dimensioni in 1024 e viene applicato il pooling per ottenere un vettore globale 1024 simile alla nuvola di punti. L'intera parte è considerata l'encoder. Per la classificazione, l'output globale dell'encoder viene passato attraverso mlp per ottenere gli output della classe c. Per l'attività di segmentazione sia le caratteristiche globali che quelle locali sono considerate simili a PointCNN e vengono quindi passate attraverso un MLP per ottenere m output di classe per ogni punto.

Metrica

Discutiamo le metriche che vengono generalmente utilizzate per comprendere e valutare i risultati di un modello.

Precisione dei pixel

La precisione dei pixel è la metrica di base che può essere utilizzata per convalidare i risultati. La precisione si ottiene prendendo il rapporto tra pixel classificati correttamente e pixel totali

Precisione = (TP + TN) / (TP + TN + FP + FN)

Lo svantaggio principale dell'utilizzo di una tale tecnica è che il risultato potrebbe sembrare buono se una classe ha la meglio sull'altra. Supponiamo ad esempio che la classe di sfondo copra il 90% dell'immagine di input, possiamo ottenere una precisione del 90% classificando semplicemente ogni pixel come sfondo

Intersezione sull'unione

IOU è definito come il rapporto tra l'intersezione della verità fondamentale e gli output di segmentazione previsti sulla loro unione. Se stiamo effettuando il calcolo per più classi, viene calcolato il valore IOU di ciascuna classe e viene presa la loro media. È una metrica migliore rispetto alla precisione dei pixel, poiché se ogni pixel è dato come sfondo in un input di classe 2, il valore IOU è (90/100 + 0/100) / 2 cioè 45% IOU che offre una rappresentazione migliore rispetto a 90 % di precisione.

Fonte: - https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection

IOU ponderato in frequenza

Questa è un'estensione rispetto alla IOU media di cui abbiamo discusso e viene utilizzata per combattere lo squilibrio di classe. Se una classe domina la maggior parte delle immagini in un set di dati come ad esempio lo sfondo, deve essere appesantita rispetto ad altre classi. Pertanto, invece di prendere la media di tutti i risultati della classe, viene presa una media ponderata in base alla frequenza della regione della classe nel set di dati.

Punteggio F1

La metrica comunemente utilizzata nella classificazione Punteggio F1 può essere utilizzata anche per attività di segmentazione per affrontare lo squilibrio di classe.

Fonte: - https://en.wikipedia.org/wiki/F1_score

Precisione media

L'area sotto la curva Precisione - Richiamo per una media di IOU di soglia scelta su classi diverse viene utilizzata per convalidare i risultati.

Funzioni di perdita

La funzione di perdita viene utilizzata per guidare la rete neurale verso l'ottimizzazione. Discutiamo alcune funzioni di perdita popolari per l'attività di segmentazione semantica.

Perdita di entropia incrociata

La media semplice della perdita di classificazione di entropia incrociata per ogni pixel dell'immagine può essere utilizzata come funzione generale. Ma anche questo soffre a causa dello squilibrio di classe che FCN propone di correggere utilizzando i pesi di classe

UNet cerca di migliorare questo aspetto dando più peso-età ai pixel vicino al bordo che fanno parte del confine rispetto ai pixel interni, poiché questo fa sì che la rete si concentri maggiormente sull'identificazione dei bordi e non dia un output grossolano.

Perdita focale

La perdita focale è stata progettata per fare in modo che la rete si concentri su esempi concreti dando più peso all'età e anche per affrontare lo squilibrio di classe estremo osservato nei rilevatori di oggetti a stadio singolo. Lo stesso può essere applicato anche nelle attività di segmentazione semantica

Perdita di dadi

La funzione dei dadi non è altro che il punteggio F1. Questa funzione di perdita cerca direttamente di ottimizzare il punteggio F1. Allo stesso modo è possibile utilizzare il punteggio IOU diretto per eseguire l'ottimizzazione

Perdita di Tversky

È una variante della perdita di dadi che dà peso-età diverso a FN e FP

Distanza di Hausdorff

È una tecnica utilizzata per misurare la somiglianza tra i confini della verità fondamentale e quella predetta. Viene calcolato rilevando la distanza massima da qualsiasi punto in un confine al punto più vicino nell'altro. La riduzione diretta della funzione di perdita di confine è una tendenza recente e ha dimostrato di dare risultati migliori soprattutto in casi d'uso come la segmentazione di immagini mediche in cui l'identificazione del confine esatto gioca un ruolo chiave.

Il vantaggio dell'utilizzo di una perdita di confine rispetto a una perdita basata su regione come IOU o Dice Loss è che non è influenzato dallo squilibrio di classe poiché l'intera regione non è considerata per l'ottimizzazione, viene considerato solo il confine.

Fonte https://en.wikipedia.org/wiki/Hausdorff_distance

I due termini qui considerati si riferiscono a due confini, ovvero la verità fondamentale e la previsione dell'output.

Etichettami :-

Strumento di annotazione delle immagini scritto in python.
Supporta l'annotazione del poligono.
Open Source e gratuito.
Funziona su Windows, Mac, Ubuntu o tramite Anaconda, Docker
Link: - https://github.com/wkentaro/labelme

Fonte: - https://github.com/wkentaro/labelme

Strumento di annotazione per visione artificiale: -

Strumento di annotazione di video e immagini sviluppato da Intel
Gratuito e disponibile online
Funziona su Windows, Mac e Ubuntu
Link: - https://github.com/opencv/cvat

Annotatore di immagini Vgg: -

Strumento gratuito di annotazione delle immagini open source
Semplice pagina html <200kb e può essere eseguita offline
Supporta annotazioni e punti poligonali.
Link: - https://github.com/ox-vgg/via

Fonte: - https://github.com/ox-vgg/via

Rectlabel: -

Strumento di annotazione a pagamento per Mac
Può utilizzare i modelli ML di base per pre-annotare le immagini
Supporta poligoni, cubic-bezier, linee e punti
Link: - https://github.com/ryouchinsa/Rectlabel-support

Etichetta: -

Strumento di annotazione a pagamento
Supporta lo strumento penna per annotazioni più veloci e accurate
Link: - https://labelbox.com/product/image-segmentation

Dataset

Come parte di questa sezione, discutiamo di vari set di dati popolari e diversificati disponibili al pubblico che è possibile utilizzare per iniziare con la formazione.

Contesto Pascal

Questo set di dati è un'estensione del set di dati Pascal VOC 2010 e va oltre il set di dati originale fornendo annotazioni per l'intera scena e ha oltre 400 classi di dati del mondo reale.

Fonte: - https://cs.stanford.edu/~roozbeh/pascal-context/
Fonte: - https://cs.stanford.edu/~roozbeh/pascal-context/

Link: - https://cs.stanford.edu/~roozbeh/pascal-context/

Set di dati COCO

Il set di dati COCO stuff ha 164 immagini del set di dati COCO originale con annotazioni a livello di pixel ed è un set di dati di benchmark comune. Copre 172 classi: 80 classi di cose, 91 classi di cose e 1 classe 'senza etichetta'

Fonte: - http://cocodataset.org/#home

Link: - http://cocodataset.org/

Set di dati di paesaggi urbani

Questo set di dati è costituito da verità di base di segmentazione per strade, corsie, veicoli e oggetti su strada. Il set di dati contiene 30 classi e 50 città raccolte in diverse condizioni ambientali e meteorologiche. Dispone anche di un set di dati video di immagini finemente annotate che possono essere utilizzate per la segmentazione video. CETTI ed CamVid sono tipi simili di set di dati che possono essere utilizzati per l'addestramento di auto a guida autonoma.

Fonte: - https://www.cityscapes-dataset.com/

Link: - https://www.cityscapes-dataset.com/

Set di dati di Lits

Il set di dati è stato creato come parte di una sfida per identificare le lesioni tumorali dalle scansioni TC del fegato. Il set di dati contiene 130 scansioni TC dei dati di allenamento e 70 scansioni TC dei dati dei test.

Fonte: - https://competitions.codalab.org/competitions/17094

Link: - https://competitions.codalab.org/competitions/17094

Set di dati CCP

Cloth Co-Parsing è un set di dati creato come parte del documento di ricerca Clothing Co-Parsing by Joint Image Segmentation and Labelling. Il set di dati contiene oltre 1000 immagini con annotazioni a livello di pixel per un totale di 59 tag.

Fonte: - https://github.com/bearpaw/clothing-co-parsing

Fonte :- https://github.com/bearpaw/clothing-co-parsing

Set di dati Pratheepan

Un set di dati creato per il compito di segmentazione della pelle sulla base di immagini di google contenente 32 foto di volti e 46 foto di famiglia

Fonte: - http://cs-chan.com/downloads_skin_dataset.html

Link: - http://cs-chan.com/downloads_skin_dataset.html

Etichettatura di immagini aeree Inria

Un set di dati di mappe di segmentazione aerea create da immagini di pubblico dominio. Ha una copertura di 810 kmq e dispone di 2 classi edificabili e non edificabili.

Fonte: - https://project.inria.fr/aerialimagelabeling/
Fonte: - https://project.inria.fr/aerialimagelabeling/

Link: - https://project.inria.fr/aerialimagelabeling/

S3DIS

Questo set di dati contiene le nuvole di punti di sei parti interne su larga scala in 3 edifici con oltre 70000 immagini.

Fonte: - http://buildingparser.stanford.edu/dataset.html

Link: - http://buildingparser.stanford.edu/dataset.html

Sommario

Abbiamo discusso una tassonomia di diversi algoritmi che possono essere utilizzati per risolvere il caso d'uso della segmentazione semantica sia su immagini, video o nuvole di punti e anche i loro contributi e limitazioni. Abbiamo anche esaminato i modi per valutare i risultati e i set di dati per iniziare. Questo dovrebbe fornire una comprensione completa della segmentazione semantica come argomento in generale.

Per ottenere un elenco di ulteriori risorse per la segmentazione semantica, inizia con https://github.com/mrgloom/awesome-semantic-segmentation.

Letture consigliate


Potrebbero interessarti i nostri ultimi post su:

Aggiornare:
Aggiunto ulteriore materiale di lettura.

Fonte: https://nanonets.com/blog/semantic-image-segmentation-2020/

Timestamp:

Di più da AI e apprendimento automatico