Come preparare / aumentare le immagini per la rete neurale?


41

Vorrei utilizzare una rete neurale per la classificazione delle immagini. Inizierò con CaffeNet pre-addestrato e lo addestrerò per la mia applicazione.

Come devo preparare le immagini di input?

In questo caso, tutte le immagini sono dello stesso oggetto ma con variazioni (pensate: controllo di qualità). Sono in scale / risoluzioni / distanze / condizioni di illuminazione leggermente diverse (e in molti casi non conosco la scala). Inoltre, in ogni immagine c'è un'area (conosciuta) attorno all'oggetto di interesse che dovrebbe essere ignorata dalla rete.

Potrei (per esempio) ritagliare il centro di ogni immagine, che è garantito per contenere una parte dell'oggetto di interesse e nessuna area ignorata; ma sembra che eliminerebbe le informazioni, e anche i risultati non sarebbero davvero della stessa scala (forse una variazione di 1,5x).

Aumento del set di dati

Ho sentito parlare della creazione di più dati di allenamento con crop / mirror / etc casuali, esiste un metodo standard per questo? Qualche risultato su quanto miglioramento produce per l'accuratezza del classificatore?

Risposte:


35

L'idea con Neural Networks è che hanno bisogno di poca pre-elaborazione poiché il sollevamento pesante viene eseguito dall'algoritmo che è responsabile dell'apprendimento delle funzionalità.

I vincitori del Data Science Bowl 2015 hanno un ottimo resoconto sul loro approccio, quindi la maggior parte del contenuto di questa risposta è stata presa da: Classificazione del plancton con reti neurali profonde . Ti suggerisco di leggerlo, in particolare la parte relativa alla pre-elaborazione e all'aumento dei dati .

- Ridimensiona le immagini

Per quanto riguarda dimensioni, risoluzioni o distanze diverse, puoi procedere come segue. Puoi semplicemente ridimensionare il lato più grande di ogni immagine a una lunghezza fissa.

Un'altra opzione è usare openCV o scipy. e questo ridimensionerà l'immagine per avere 100 cols (larghezza) e 50 righe (altezza):

resized_image = cv2.resize(image, (100, 50)) 

Un'altra opzione è quella di utilizzare il modulo scipy, usando:

small = scipy.misc.imresize(image, 0.5)

- Aumento dei dati

L'aumento dei dati migliora sempre le prestazioni sebbene l'importo dipenda dal set di dati. Se si desidera aumentare i dati per aumentare artificialmente la dimensione del set di dati, è possibile effettuare le seguenti operazioni se il caso si applica (non si applicherebbe se, ad esempio, fossero immagini di case o persone in cui se le ruotassi di 180 gradi, perderebbero tutte le informazioni ma non se li capovolgi come fa uno specchio):

  • rotazione: casuale con angolo compreso tra 0 ° e 360 ​​° (uniforme)
  • traduzione: casuale con spostamento tra -10 e 10 pixel (uniforme)
  • riscalamento: casuale con fattore di scala compreso tra 1 / 1.6 e 1.6 (log-uniform)
  • lanciando: sì o no (bernoulli)
  • taglio: casuale con angolo compreso tra -20 ° e 20 ° (uniforme)
  • allungamento: casuale con fattore di allungamento compreso tra 1 / 1.3 e 1.3 (log-uniform)

Puoi vedere i risultati sulle immagini della ciotola di Data Science.

Immagini preelaborate

Immagini preelaborate

versioni aumentate delle stesse immagini

inserisci qui la descrizione dell'immagine

-Altre tecniche

Queste si occuperanno di altre proprietà dell'immagine come l'illuminazione e sono già correlate all'algoritmo principale più come una semplice fase di pre-elaborazione. Controlla l'elenco completo su: Tutorial UFLDL


1
Vale anche la pena guardare al colore per aumentare i dati.
David C. Bishop,

Puoi anche condividere il codice per la rotazione e la cesoiatura ecc. ?? @wacax
Arsenal Fanatic

Ragazzi, potete usare un pacchetto come keras per aumentare i dati.
Ricardo Cruz,

2
Per chiunque abbia problemi con l'importazione del modulo scipy.misc. È necessario import scipy.misc. stackoverflow.com/questions/13581593/...
eleijonmarck

Per quanto riguarda il ridimensionamento delle immagini, quale metodo viene solitamente utilizzato nei metodi più avanzati, ad esempio quelli utilizzati su ImageNet?
Ciao Arrivederci

2

Mentre la risposta di Wacax è completa e davvero esplicativa, vorrei aggiungere un paio di cose nel caso qualcuno si imbattesse in questa risposta.

Prima di tutto, la maggior parte scipy.miscfunzioni correlate di immagini ( imread, imsave, imresizeERC) sono diventati deprecato in favore dell'una o ImageIO o skimage .

In secondo luogo, consiglierei caldamente l' imgaug della libreria python per qualsiasi attività di potenziamento . È davvero facile da usare e ha praticamente tutte le tecniche di potenziamento che potresti voler usare.

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.