L’intelligenza artificiale ha assistito a una crescita monumentale nel colmare il divario tra le capacità degli esseri umani e delle macchine. Sia i ricercatori che gli appassionati lavorano su numerosi aspetti del campo per far accadere cose incredibili. Una delle tante aree di questo tipo è il dominio della visione artificiale.
L’agenda per questo campo è consentire alle macchine di vedere il mondo come fanno gli esseri umani, percepirlo in modo simile e persino utilizzare la conoscenza per una moltitudine di attività quali & Riconoscimento video, Analisi delle immagini & Classificazione, Ricreazione multimediale, Sistemi di raccomandazione, Elaborazione del linguaggio naturale e così via. in Computer Vision with Deep Learning è stato costruito e perfezionato nel tempo, principalmente su un particolare algoritmo: una rete neurale convoluzionale.
Introduzione
Una rete neurale convoluzionale (ConvNet / CNN) è un apprendimento profondo algoritmo che può accettare un’immagine di input, assegnare importanza (apprendibile e pesi e pregiudizi) a vari aspetti / oggetti dell’immagine ed essere in grado di differenziarli l’uno dall’altro. La pre-elaborazione richiesta in un ConvNet è molto inferiore rispetto ad altri algoritmi di classificazione. Mentre nei metodi primitivi i filtri sono progettati manualmente, con una formazione sufficiente, i ConvNets hanno la capacità di apprendere questi filtri / caratteristiche.
L’architettura di un ConvNet è analoga a quella del modello di connettività di Neurons in the Human Brain ed è stato ispirato dall’organizzazione del Visual Cortex. I singoli neuroni rispondono agli stimoli solo in una regione ristretta del campo visivo nota come campo ricettivo. Una raccolta di tali campi si sovrappone per coprire l’intera area visiva.
Perché ConvNets over Feed-Forward Neural Nets?
Un’immagine non è altro che una matrice di valori di pixel, giusto? Allora perché non appiattire semplicemente l’immagine (ad es. Matrice dell’immagine 3×3 in un vettore 9×1) e alimentarla a un Perceptron multi-livello per scopi di classificazione? Uh … non proprio.
In casi di immagini binarie estremamente semplici, il metodo potrebbe mostrare un punteggio medio di precisione durante l’esecuzione della previsione delle classi, ma avrebbe poca o nessuna precisione quando si tratta di immagini complesse con dipendenze pixel in tutto.
Un ConvNet è in grado di catturare con successo le dipendenze spaziali e temporali in un’immagine attraverso l’applicazione di filtri pertinenti. L’architettura si adatta meglio al set di dati dell’immagine a causa della riduzione del numero di parametri coinvolti e della riutilizzabilità dei pesi. In altre parole, la rete può essere addestrata per comprendere meglio la raffinatezza dell’immagine.
Immagine di input
Nella figura, abbiamo un’immagine RGB che è stata separata dai suoi tre piani di colore: rosso, verde, e blu. Esistono molti di questi spazi colore in cui esistono le immagini: scala di grigi, RGB, HSV, CMYK, ecc.
Puoi immaginare quanto sarebbero intensi i calcoli una volta che le immagini raggiungono le dimensioni, ad esempio 8K (7680 × 4320). Il ruolo di ConvNet è quello di ridurre le immagini in una forma più facile da elaborare, senza perdere caratteristiche fondamentali per ottenere una buona previsione. Questo è importante quando dobbiamo progettare un’architettura che non sia solo adatta all’apprendimento delle funzionalità, ma che sia anche scalabile per enormi set di dati.
Convolution Layer – The Kernel
Immagine Dimensioni = 5 (altezza) x 5 (larghezza) x 1 (numero di canali, es. RGB)
Nella dimostrazione sopra, la sezione verde ricorda la nostra immagine di input 5x5x1, I. L’elemento coinvolto nel trasporto L’operazione di convoluzione nella prima parte di uno strato convoluzionale è chiamata Kernel / Filter, K, rappresentata nel colore giallo. Abbiamo selezionato K come matrice 3x3x1.
Kernel/Filter, K = 1 0 1
0 1 0
1 0 1
Il kernel si sposta di 9 volte a causa di Stride Length = 1 (Non-Strided), ogni volta che esegue una matrice operazione di moltiplicazione tra K e la porzione P dell’immagine su cui è sospeso il kernel.
Il filtro si sposta a destra con un certo valore di falcata finché non analizza l’intera larghezza. Andando avanti, salta all’inizio (a sinistra) dell’immagine con lo stesso valore di falcata e ripete il processo fino a quando l’intera immagine non viene attraversata.
Nel caso di immagini con più canali (es. RGB ), il kernel ha la stessa profondità di quella dell’immagine di input. La moltiplicazione della matrice viene eseguita tra Kn e In stack (;;) e tutti i risultati vengono sommati con il bias per darci un output di funzionalità contorta del canale a una profondità ridotta.
L’obiettivo dell’operazione di convoluzione è estrarre le caratteristiche di alto livello come bordi, dall’immagine in ingresso. ConvNets non deve essere limitato a un solo strato convoluzionale. Convenzionalmente, il primo ConvLayer è responsabile dell’acquisizione delle caratteristiche di basso livello come bordi, colore, orientamento del gradiente, ecc. Con livelli aggiunti, l’architettura si adatta anche alle funzionalità di alto livello, dandoci una rete che ha la comprensione completa di immagini nel set di dati, in modo simile a come faremmo.
Ci sono due tipi di risultati per l’operazione: uno in cui la caratteristica convoluta è ridotta in dimensionalità rispetto all’input e l’altro in cui la dimensionalità è aumentata o rimane la stessa. Questo viene fatto applicando Valid Padding nel caso del primo, o Same Padding nel caso del secondo.
Quando aumentiamo l’immagine 5x5x1 in un’immagine 6x6x1 e poi applichiamo il kernel 3x3x1 su di essa, troviamo che il la matrice convoluta risulta essere di dimensioni 5x5x1. Da qui il nome – Same Padding.
D’altra parte, se eseguiamo la stessa operazione senza padding, ci viene presentata una matrice che ha dimensioni del kernel stesso (3x3x1) stesso – Valid Padding.
Il seguente repository ospita molte di queste GIF che ti aiuterebbero a capire meglio come Padding e Stride Length lavorano insieme per ottenere risultati pertinenti alle nostre esigenze.
Pooling Layer
Simile al Convolutional Layer, il Pooling layer è responsabile della riduzione delle dimensioni spaziali della caratteristica convoluta. Questo per diminuire la potenza di calcolo richiesta per elaborare i dati attraverso la riduzione della dimensionalità. Inoltre, è utile per estrarre le caratteristiche dominanti che sono invarianti rotazionali e posizionali, mantenendo così il processo di addestramento efficace del modello.
Esistono due tipi di Pooling: Max Pooling e Average Pooling. Max Pooling restituisce il valore massimo dalla porzione dell’immagine coperta dal kernel. D’altra parte, Average Pooling restituisce la media di tutti i valori dalla parte dell’immagine coperta dal kernel.
Max Pooling funziona anche come Noise Suppressant. Elimina completamente le attivazioni rumorose ed esegue anche la riduzione del rumore insieme alla riduzione della dimensionalità. D’altra parte, Average Pooling esegue semplicemente la riduzione della dimensionalità come meccanismo di soppressione del rumore. Quindi, possiamo dire che Max Pooling ha prestazioni molto migliori rispetto a Average Pooling.
Il livello convoluzionale e il livello di pooling, insieme formano l’i-esimo livello di una rete neurale convoluzionale. A seconda della complessità delle immagini, il numero di tali livelli può essere aumentato per acquisire ulteriormente dettagli di basso livello, ma al costo di una maggiore potenza di calcolo.
Dopo aver eseguito il processo di cui sopra, abbiamo abilitato con successo il modello per comprendere le caratteristiche. Andando avanti, appiattiremo l’output finale e lo inseriremo in una normale rete neurale per scopi di classificazione.
Classificazione – Livello completamente connesso (livello FC)
L’aggiunta di uno strato completamente connesso è un modo (solitamente) economico di apprendere combinazioni non lineari delle caratteristiche di alto livello rappresentate dall’output dello strato convoluzionale. Il livello Fully-Connected sta imparando una funzione possibilmente non lineare in quello spazio.
Ora che abbiamo convertito la nostra immagine di input in una forma adatta per il nostro Multi-Level Perceptron, appiattiremo l’immagine in un vettore di colonna. L’output appiattito viene inviato a una rete neurale feed-forward e la backpropagation applicata a ogni iterazione dell’addestramento. In una serie di epoche, il modello è in grado di distinguere tra caratteristiche dominanti e alcune caratteristiche di basso livello nelle immagini e classificarle utilizzando la tecnica di classificazione Softmax.
Sono disponibili varie architetture di CNN che sono state fondamentali costruire algoritmi che alimentano e alimenteranno l’IA nel suo insieme nel prossimo futuro. Alcuni di loro sono stati elencati di seguito:
- LeNet
- AlexNet
- VGGNet
- GoogLeNet
- ResNet
- ZFNet