Reti neurali convoluzionali con immagini di input di diverse dimensioni - Segmentazione dell'immagine


12

Sto affrontando il problema di avere immagini di dimensioni diverse come input in un'attività di segmentazione. Si noti che le immagini non hanno nemmeno le stesse proporzioni.

Un approccio comune che ho trovato in generale nel deep learning è quello di ritagliare le immagini, come è anche suggerito qui . Tuttavia, nel mio caso non posso ritagliare l'immagine e mantenerne il centro o qualcosa di simile poiché nella segmentazione voglio che l'output abbia le stesse dimensioni dell'input.

Questo documento suggerisce che in un'attività di segmentazione si può alimentare la stessa immagine più volte alla rete ma con una scala diversa e quindi aggregare i risultati. Se comprendo correttamente questo approccio, funzionerebbe solo se tutte le immagini di input avessero le stesse proporzioni. Perfavore, correggimi se sbaglio.

Un'altra alternativa sarebbe quella di ridimensionare ogni immagine a dimensioni fisse. Penso che ciò sia stato proposto anche dalla risposta a questa domanda. Tuttavia, non è specificato in che modo vengono ridimensionate le immagini.

Ho considerato di prendere la massima larghezza e altezza nel set di dati e ridimensionare tutte le immagini a quella dimensione fissa nel tentativo di evitare la perdita di informazioni. Tuttavia, credo che la nostra rete potrebbe avere difficoltà con immagini distorte poiché i bordi di un'immagine potrebbero non essere chiari. Qual è forse il modo migliore per ridimensionare le tue immagini prima di inviarle alla rete?

C'è qualche altra opzione di cui non sono a conoscenza per risolvere il problema di avere immagini di dimensioni diverse?

Inoltre, quale di questi approcci ritieni sia il migliore tenendo conto della complessità computazionale ma anche della possibile perdita di prestazioni da parte della rete?

Gradirei se le risposte alle mie domande includessero qualche link a una fonte se ce n'è una. Grazie.

Risposte:


4

Darò una risposta più approfondita.

Ci sono 2 problemi che potresti incontrare.

1) La tua rete neurale (in questo caso rete neurale convoluzionale) non può accettare fisicamente immagini di diverse risoluzioni. Questo di solito è il caso di uno con livelli completamente connessi, tuttavia se la rete è completamente convoluzionale , dovrebbe essere in grado di accettare immagini di qualsiasi dimensione. Completamente convoluzionale implica che non contiene livelli completamente collegati, ma solo livelli convoluzionali, di pooling massimo e di normalizzazione batch, tutti invarianti rispetto alle dimensioni dell'immagine. Proprio questo approccio è stato proposto in questo innovativo documento Reti convoluzionali per la segmentazione semantica . Tieni presente che la loro architettura e i loro metodi di formazione potrebbero essere leggermente obsoleti. Approccio simile è stato utilizzato in largo usoU-Net: reti convoluzionali per la segmentazione di immagini biomediche e molte altre architetture per il rilevamento di oggetti, la stima delle pose e la segmentazione.

2) Le reti neurali convoluzionali non sono invarianti di scala. Ad esempio, se ci si allena sui gatti della stessa dimensione in pixel su immagini a risoluzione fissa, la rete fallirebbe su immagini di dimensioni più piccole o più grandi di gatti. Per ovviare a questo problema, conosco due metodi (potrebbe essere più in letteratura): 1) formazione multi-scala di immagini di diverse dimensioni in reti completamente convoluzionali al fine di rendere il modello più robusto ai cambiamenti di scala; e 2) con architettura multi-scala. Un punto di partenza è quello di esaminare questi due importanti documenti: Feature Pyramid Networks for Object Detection e Rappresentazioni ad alta risoluzione per l'etichettatura di pixel e regioni .


2

Supponendo di avere un set di dati di grandi dimensioni, ed è etichettato pixel-saggio, un modo bizzarro per risolvere il problema è quello di preelaborare le immagini per avere le stesse dimensioni inserendo i margini orizzontali e verticali in base alle dimensioni desiderate, poiché per le etichette si aggiunge un output extra fittizio per i pixel dei margini, quindi durante il calcolo della perdita è possibile mascherare i margini.


Come si fa a gestire la normalizzazione in questi casi? Suppongo che normalizzi solo i pixel in un'immagine che non sono inclusi nel suo margine?
MattSt

Sì, perché il processo di generazione dei dati ha dimensioni diverse, quindi se si includono i margini, si modificherà la distribuzione dei dati. i margini vengono inseriti per raggruppare i campioni di training in batch perché il problema deve generare un vettore di output fisso.
Fadi Bakoura,


0

Come si desidera eseguire la segmentazione, è possibile utilizzare U-Net. Non ha unità completamente collegate. Pertanto, la dimensione dell'input non avrà importanza.


3
Penso che dovresti approfondire un po 'di più i tuoi punti.
Dutta,

0

penso che puoi ridimensionare pixel l'immagine e convertire rgb in binario o intero per il passaggio successivo


1
Ciao e benvenuto allo scambio di stack AI. Potresti per favore espandere la tua risposta? Considera di aggiungere più contesto per eseguire il backup della tua risposta e forse aggiungere riferimenti.
Jaden Travnik

0

Prova a ridimensionare l'immagine alle dimensioni di input della tua architettura di rete neurale (mantenendola fissa a qualcosa come 128 * 128 in un'architettura U-net 2D standard) usando la tecnica di interpolazione più vicina . Questo perché se ridimensionate l'immagine usando qualsiasi altra interpolazione, ciò può causare manomissioni delle etichette di verità sul terreno. Questo è particolarmente un problema nella segmentazione. Non dovrai affrontare questo problema quando si tratta di classificazione.

Prova quanto segue:

import cv2 
resized_image = cv2.resize(original_image, (new_width, new_height), 
                           interpolation=cv2.INTER_NEAREST)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.