Classificazione delle immagini della CNN | Classificazione delle immagini utilizzando la CNN

Contenuti

introduzione

Reti neurali convoluzionali (CNN): il concetto alla base dei recenti progressi e sviluppi nel deep learning.

La CNN ha rotto gli schemi e salì al trono per diventare l'ultima tecnologia. visione computerizzata tecnica. Tra i diversi tipi di Reti neurali (altri includono le reti neurali ricorrenti (RNN), memoria a breve termine a lungo termine (LSTM), reti neurali artificiali (ANN), eccetera.), Le CNN sono facilmente le più popolari.

Questi modelli di rete neurale convoluzionale sono onnipresenti nello spazio dei dati dell'immagine. Funzionano straordinariamente bene in attività di visione artificiale come la classificazione delle immagini, rilevamento di oggetti, riconoscimento delle immagini, eccetera.

Quindi, Dove puoi mettere in pratica le tue abilità alla CNN?? Bene, Siete venuti nel posto giusto!

Esistono diversi set di dati che puoi sfruttare per applicare le reti neurali convoluzionali. Ecco tre set di dati popolari:

mnist-1-3907316

In questo articolo, creeremo modelli di classificazione delle immagini utilizzando la CNN su ciascuno di questi set di dati. Giusto! Esploreremo MNSIT, CIFAR-10 e ImageNet per capire, in modo pratico, come funziona la CNN per l'attività di classificazione delle immagini.

Puoi imparare tutto sulle reti neurali convoluzionali (CNN) in questo corso gratuito: Reti neurali convoluzionali (CNN) sin dall'inizio

La mia ispirazione per scrivere questo articolo è aiutare la comunità ad applicare le conoscenze teoriche in modo pratico. Questo è un esercizio molto importante, in quanto non solo ti aiuta a sviluppare una comprensione più profonda del concetto sottostante, ti insegnerà anche dettagli pratici che possono essere appresi solo attraverso l'implementazione del concetto.

Se sei nuovo nel mondo delle reti neurali, CNN, classificazione delle immagini, Ti consiglio di seguire questi ottimi tutorial dettagliati:

E se stai cercando di imparare la visione artificiale e l'apprendimento profondo in profondità, dovresti dare un'occhiata ai nostri corsi popolari:

Sommario

  1. Utilizzo della CNN per classificare le cifre scritte a mano nel set di dati MNIST
  2. Identificazione dell'immagine dal set di dati CIFAR-10 utilizzando la CNN
  3. Categorizzazione delle immagini del set di dati ImageNet utilizzando la CNN
  4. Dove andare da qui??

Nota: Userò Keras per dimostrare la classificazione delle immagini usando la CNN in questo articolo. Keras è un ottimo framework da imparare quando hai appena iniziato l'apprendimento profondo..

Utilizzo della CNN per classificare le cifre scritte a mano nel set di dati MNIST

mnist-8721761

MNIST (Istituto nazionale modificato di standard e tecnologia) è un set di dati ben noto che viene utilizzato in Visione computerizzata che è stato costruito da Yann Le Cun et. Alabama. È composto da immagini che sono cifre scritte a mano (0-9), diviso in un set di allenamento di 50,000 immagini e un set di prova di 10,000 dove ogni immagine ha 28 X 28 pixel larghezza e altezza.

Questo set di dati viene spesso utilizzato per praticare qualsiasi algoritmo creato per la classificazione delle immagini., poiché il set di dati è abbastanza facile da conquistare. Perciò, Raccomando che questo sia il tuo primo set di dati se ti stai solo dilettando sul campo.

MNIST viene fornito con Keras per impostazione predefinita e puoi semplicemente caricare i file di training e test utilizzando poche righe di codice:

da keras.datasets import mnist

# caricamento del set di dati
(X_treno, y_train), (X_test, y_test) = mnist.load_data()
# stampiamo la forma del set di dati
Stampa("X_forma del treno", X_train.shape)
Stampa("y_forma del treno", y_train.shape)
Stampa("X_forma di prova", X_test.shape)
Stampa("y_test forma", y_test.shape)

Ecco la forma a X (caratteristiche) e e (obbiettivo) per i dati di addestramento e convalida:

X_forma del treno (60000, 28, 28) 
y_forma del treno (60000,) 
X_forma di prova (10000, 28, 28) 
y_test forma (10000,)

Prima di addestrare un modello CNN, costruiamo un modello base Rete neurale completamente connessa per il set di dati. I passaggi di base per costruire un modello di classificazione delle immagini utilizzando una rete neurale sono:

  1. Appiattisci le dimensioni dell'immagine di input a 1D (pixel di larghezza x pixel di altezza)
  2. Normalizza i valori dei pixel dell'immagine (dividi per 255)
  3. Codifica One-Hot della colonna categorica
  4. Costruisci un modello di architettura (sequenziale) con strati densi
  5. Addestra il modello e fai previsioni

Prossimo, ti mostriamo come creare un modello di rete neurale per MNIST. Ho commentato le parti rilevanti del codice per una migliore comprensione:

Dopo aver eseguito il codice sopra, realizzato che stiamo ottenendo una buona accuratezza di convalida di circa il 97% facilmente.

Modifichiamo il codice sopra per costruire un CNN modello.

Uno dei principali vantaggi dell'utilizzo di CNN su NN è che non è necessario appiattire le immagini di input su 1D, poiché possono lavorare con dati di immagini 2D. Questo aiuta a mantenere le proprietà “spaziale” delle immagini.

Ecco il codice completo per il modello CNN:

Sebbene la nostra massima precisione di convalida utilizzando un semplice modello di rete neurale fosse in giro 97%, Il modello della CNN è in grado di ottenere più di 98% con un singolo strato di convoluzione.

dwd-5880365

Puoi andare avanti e aggiungere più livelli Conv2D, e gioca anche con gli iperparametri del modello CNN.

Identificazione dell'immagine dal set di dati CIFAR-10 utilizzando la CNN

MNIST è un set di dati per principianti nella visione artificiale. È facile ottenere un punteggio superiore a 90% in validazione utilizzando un modello CNN. Ma, Cosa succede se sei oltre un principiante e hai bisogno di qualcosa di stimolante per mettere in pratica i tuoi concetti??

Ecco dove Set di dati CIFAR-10 entra in scena!

1_sgochnlz-qfesdyjadgxnw-5399297

Ecco come gli sviluppatori dietro CIFAR (Istituto canadese per la ricerca avanzata) descrivere il set di dati:

Il set di dati CIFAR-10 è composto da 60.000 immagini a colori di 32 X 32 Su 10 Lezioni, insieme a 6.000 immagini per classe. Ci sono 50.000 immagini di allenamento e 10.000 immagini di prova.

I punti importanti che distinguono questo set di dati dal MNIST sono:

  • Le immagini sono colorate in CIFAR-10 rispetto alla trama in bianco e nero di MNIST
  • Ogni immagine è di 32 X 32 pixel
  • 50.000 immagini di allenamento e 10.000 immagini di prova

Ora, Queste immagini sono scattate in diverse condizioni di illuminazione e con diverse angolazioni, e poiché queste sono immagini colorate, vedrai che ci sono molte variazioni nel colore stesso di oggetti simili (ad esempio, il colore dell'acqua dell'oceano). Se usi il semplice CNN architettura che abbiamo visto nell'esempio MNIST sopra, otterrai una bassa precisione di convalida di circa 60%.

Questo è un motivo chiave per cui consiglio CIFAR-10 come un buon set di dati per esercitare le tue abilità di ottimizzazione degli iperparametri per la CNN.. La cosa buona è che, come MNIST, CIFAR-10 è anche prontamente disponibile in Keras.

Puoi semplicemente caricare il set di dati utilizzando il seguente codice:

da keras.datasets import cifar10
# caricamento del set di dati 
(X_treno, y_train), (X_test, y_test) = cifar10.load_data()

Prossimo, ti mostriamo come puoi costruire un modello CNN decente (attorno a 78-80% in convalida) per CIFAR-10. Nota come i valori delle forme sono stati aggiornati da (28, 28, 1) un (32, 32, 3) in base alla dimensione delle immagini:

Questo è quello che ho cambiato nel modello:

  • Aumentato il numero di livelli Conv2D per costruire un modello più profondo
  • Maggior numero di filtri per conoscere più funzioni
  • Aggiunto abbandono per regolarizzazione
  • Aggiunti strati più densi

Precisione della formazione e convalida in tutte le età:

screenshot-dal-2020-02-06-12-03-34-5292096

Puoi facilmente eclissare queste prestazioni mettendo a punto il modello precedente. Una volta che hai imparato CIFAR-10, c'è anche CIFAR-100 disponibile in Keras che puoi usare per esercitarti di più. Dal momento che ha 100 Lezioni, Non sarà un compito facile da realizzare!

Classificare le immagini ImageNet utilizzando la CNN

Ora che hai imparato MNIST e CIFAR-10, portiamo questo problema a un livello superiore. Qui, daremo un'occhiata al famoso set di dati ImageNet.

imagenet-title-pic-6861924

ImageNet è il database principale dietro il Sfida di ricognizione su larga scala di ImageNet (ILSVRC). Questo è come le Olimpiadi Visione computerizzata. Questa è la competizione che ha fatto CNN popolare per la prima volta e ogni anno, i migliori team di ricerca delle industrie e del mondo accademico competono con i loro migliori algoritmi su compiti di visione artificiale.

Informazioni sul set di dati ImageNet

Il set di dati ImageNet ha più di 14 milioni di immagini, etichettato a mano in 20.000 categorie.

Cosa c'è di più, a differenza dei set di dati MNIST e CIFAR-10 di cui abbiamo già discusso, le immagini su ImageNet hanno una risoluzione decente (224 X 224) ed è questo che ci sfida: 14 milioni di immagini, ciascuna di 224 di 224 pixel. L'elaborazione di un set di dati di queste dimensioni richiede una grande potenza di calcolo in termini di CPU, GPU e RAM.

Lo svantaggio: potrebbe essere troppo per un laptop di tutti i giorni. Quindi, Qual è la soluzione?? Come può un appassionato lavorare con il set di dati ImageNet??

È qui che entra in gioco il set di dati Imagenette di Fast.ai.

immaginetta è un set di dati che è tratto dalla vasta raccolta di immagini di ImageNet. Il motivo dietro il lancio di Imagenette è che ricercatori e studenti possono esercitarsi con le immagini a livello di ImageNet senza la necessità di altrettante risorse informatiche..

Nelle parole di Jeremy Howard:

"Me (Jeremy Howard, vale a dire) Ho creato Imagenette principalmente perché volevo un piccolo set di dati di visione che potessi usare per vedere rapidamente se le mie idee sull'algoritmo potevano avere qualche possibilità di funzionare. Di solito non lo fanno, ma testarli su Imagenet mi richiede molto tempo per capirlo, soprattutto perché sono interessato agli algoritmi che funzionano particolarmente bene nel fine di formazione.

Ma penso che questo possa essere un utile set di dati anche per gli altri “.

Ed è quello che useremo anche per esercitarci!

1. Scarica il set di dati di Imagenette

Ecco come ottenere il set di dati (comandi per il tuo terminale):

$ wget https://s3.amazonaws.com/fast-ai-imageclas/imagenette2.tgz
$ tar -xf imagenette2.tgz

Una volta scaricato il set di dati, noterai che hai due cartelle: “treno” e “valore”. Questi contengono rispettivamente il set di addestramento e convalida. Dentro ogni cartella, ci sono cartelle separate per ogni classe. Ecco la mappatura delle classi:

Queste classi hanno lo stesso ID nel set di dati ImageNet originale. Ciascuna delle classi ha circa 1000 immagini, affinché, generalmente, è un set di dati bilanciato.

ddd-6836177

2. Caricamento di immagini con ImageDataGenerator

Keras ha questa utile funzionalità per caricare immagini di grandi dimensioni (come quello che abbiamo qui) senza massimizzare la RAM, farlo in piccoli lotti. ImageDataGenerator in combinazione con fit_generator fornisce questa funzionalità:

Lo stesso ImageDataGenerator deduce le etichette delle classi e il numero di classi dai nomi delle cartelle.

screenshot-dal-2020-02-06-11-25-54-6363232

3. Creazione di un modello CNN di base per la classificazione delle immagini

Costruiamo un modello CNN di base per il nostro set di dati Imagenette (allo scopo di classificare le immagini):

Quando confrontiamo la precisione di convalida del modello precedente, si renderà conto che, anche se è un'architettura più profonda di quella che abbiamo usato finora, possiamo ottenere solo una precisione di convalida di circa il 40-50%.

mmm-7938868

Ci possono essere molte ragioni per questo, poiché il nostro modello non è abbastanza complesso per apprendere i modelli sottostanti delle immagini, o forse i dati di allenamento sono troppo piccoli per essere generalizzati accuratamente tra le classi.

Fai un passo avanti: trasferire l'apprendimento.

4. Uso del trasferimento di apprendimento (VGG16) per migliorare la precisione

VGG16 è un'architettura della CNN che è stata la prima finalista nel 2014 Sfida ImageNet. È stato progettato da Visual Graphics Group a Oxford e ha 16 livelli totali, insieme a 13 livelli convoluzionali. Caricheremo i pesi precedentemente addestrati di questo modello in modo da poter utilizzare le utili funzionalità che questo modello ha imparato per il nostro compito..

Download dei pesi VGG16

da Keras.applications importare VGG16

# include top should be False to remove the softmax layer
pretrained_model = VGG16(include_top=Falso, pesi="imagenet")
pretrained_model.sommario()

Ecco l'architettura del modello:

mmm-1-7044075

Generare funzioni da VGG16

Estraiamo le funzionalità utili che VGG16 già conosce dalle immagini nel nostro set di dati:

da keras.utils import to_categorical
# extract train and val features
vgg_features_train = pretrained_model.predict(treno)
vgg_features_val = pretrained_model.predict(valore)
# OHE target column
train_target = to_categorical(train.labels)
val_target = to_categorical(val.labels)
Una vez que las funciones anteriores estén listas, possiamo usarli per addestrare un Fully Connected di base neuronale rosso e Keras:

Nota quanto velocemente il tuo modello inizia a convergere. In solo 10 epoche, ha una precisione di convalida superiore a 94%. Non è fantastico??

screenshot-da-2020-02-06-11-56-11-9911896

Nel caso tu abbia padroneggiato il set di dati Imagenette, fastai ha anche rilasciato due varianti che includono classi che troverai difficili da classificare:

  • Imagewoof: 10 tipi di razze canine, un problema più difficile da classificare
  • Immagine rete (“wang”): Una combinazione di Imagenette e Imagewoof e un paio di trucchi che rendono il problema più complicato

Dove andare da qui??

Oltre ai set di dati che abbiamo menzionato sopra, Puoi anche utilizzare i seguenti set di dati per creare visione computerizzata algoritmi. Infatti, considerala una sfida. Puoi applicare la tua conoscenza della CNN per battere il punteggio di riferimento su questi set di dati??

  • Moda MNIST – Set di dati simile a MNIST per abbigliamento e abbigliamento. Invece di cifre, le immagini mostrano un tipo di indumento (maglietta, pantaloni, borsetta, eccetera.)
  • Caltech 101 – Un altro set di dati impegnativo che ho trovato per la classificazione delle immagini

Suggerisco anche che prima di optare per il trasferimento di apprendimento, prova a migliorare i tuoi modelli CNN di base. Puoi imparare dalle architetture VGG16, ZFNet, eccetera. per alcuni suggerimenti sull'ottimizzazione degli iperparametri e puoi usare lo stesso ImageDataGenerator per ingrandire le tue immagini e aumentare la dimensione del set di dati.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.