introduzione
Reti neurali convoluzionali (CNN): el concepto detrás de los avances y desarrollos recientes en el apprendimento profondoApprendimento profondo, Una sottodisciplina dell'intelligenza artificiale, si affida a reti neurali artificiali per analizzare ed elaborare grandi volumi di dati. Questa tecnica consente alle macchine di apprendere modelli ed eseguire compiti complessi, come il riconoscimento vocale e la visione artificiale. La sua capacità di migliorare continuamente man mano che vengono forniti più dati lo rende uno strumento chiave in vari settori, dalla salute....
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:
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
- Utilizzo della CNN per classificare le cifre scritte a mano nel set di dati MNIST
- Identificazione dell'immagine dal set di dati CIFAR-10 utilizzando la CNN
- Categorizzazione delle immagini del set di dati ImageNet utilizzando la CNN
- 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 (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), dividido en un conjunto de addestramentoLa formazione è un processo sistematico volto a migliorare le competenze, conoscenze o abilità fisiche. Viene applicato in vari ambiti, come lo sport, Formazione e sviluppo professionale. Un programma di allenamento efficace include la pianificazione degli obiettivi, Pratica regolare e valutazione dei progressi. L'adattamento alle esigenze individuali e la motivazione sono fattori chiave per ottenere risultati di successo e sostenibili in qualsiasi disciplina.... a partire dal 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. Los pasos básicos para construir un modelo de clasificación de imágenes usando una neuronale rossoLe reti neurali sono modelli computazionali ispirati al funzionamento del cervello umano. Usano strutture note come neuroni artificiali per elaborare e apprendere dai dati. Queste reti sono fondamentali nel campo dell'intelligenza artificiale, consentendo progressi significativi in attività come il riconoscimento delle immagini, Elaborazione del linguaggio naturale e previsione delle serie temporali, tra gli altri. La loro capacità di apprendere schemi complessi li rende strumenti potenti.. figlio:
- Appiattisci le dimensioni dell'immagine di input a 1D (pixel di larghezza x pixel di altezza)
- Normalizza i valori dei pixel dell'immagine (dividi per 255)
- Codifica One-Hot della colonna categorica
- Costruisci un modello di architettura (sequenziale) con strati densi
- 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.
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!
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
- Abandono agregado para regolarizzazioneLa regolarizzazione è un processo amministrativo che cerca di formalizzare la situazione di persone o entità che operano al di fuori del quadro giuridico. Questa procedura è essenziale per garantire diritti e doveri, nonché a promuovere l'inclusione sociale ed economica. In molti paesi, La regolarizzazione viene applicata in contesti migratori, Lavoro e fiscalità, consentire a chi si trova in situazione irregolare di accedere ai benefici e tutelarsi da possibili sanzioni....
- Aggiunti strati più densi
Precisione della formazione e convalida in tutte le età:
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 es la Banca datiUn database è un insieme organizzato di informazioni che consente di archiviare, Gestisci e recupera i dati in modo efficiente. Utilizzato in varie applicazioni, Dai sistemi aziendali alle piattaforme online, I database possono essere relazionali o non relazionali. Una progettazione corretta è fondamentale per ottimizzare le prestazioni e garantire l'integrità delle informazioni, facilitando così il processo decisionale informato in diversi contesti.... principal detrás del 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, las imágenes en ImageNet tienen una risoluzioneIl "risoluzione" si riferisce alla capacità di prendere decisioni ferme e raggiungere gli obiettivi prefissati. In contesti personali e professionali, Implica la definizione di obiettivi chiari e lo sviluppo di un piano d'azione per raggiungerli. La risoluzione è fondamentale per la crescita personale e il successo in vari ambiti della vita, In quanto ti permette di superare gli ostacoli e mantenere la concentrazione su ciò che conta davvero.... 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.
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.
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%.
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:
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)
Nota quanto velocemente il tuo modello inizia a convergere. In solo 10 epoche, ha una precisione di convalida superiore a 94%. Non è fantastico??
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.