Articles

La guida completa per principianti all’apprendimento profondo: reti neurali convoluzionali e classificazione delle immagini

Posted by admin

” Una cosa che mi ha colpito presto è che non metti in una fotografia ciò che verrà fuori. O, viceversa, ciò che viene fuori non è ciò che si mette in.”

― Diane Arbus

Una notifica si apre sul tuo social network preferito che qualcuno ha postato una foto che potrebbe avere voi in esso.

È giusto.

E ‘ la peggiore immagine di voi mai.

GIF via GIPHY

Come è successo?

Classificazione delle immagini!

La rete neurale convoluzionale (CNN) è una classe di reti neurali di apprendimento profondo. CNNs rappresentano un enorme passo avanti nel riconoscimento delle immagini. Sono più comunemente utilizzati per analizzare le immagini visive e spesso lavorano dietro le quinte nella classificazione delle immagini. Possono essere trovati al centro di tutto, dalla foto di Facebook tagging alle auto a guida autonoma. Stanno lavorando duramente dietro le quinte in tutto, dalla sanità alla sicurezza.

Sono veloci ed efficienti. Ma come funzionano?

La classificazione delle immagini è il processo di acquisizione di un input (come un’immagine) e l’output di una classe (come “cat”) o una probabilità che l’input sia una particolare classe (“c’è una probabilità del 90% che questo input sia un gatto”). Puoi guardare una foto e sapere che stai guardando un terribile colpo del tuo viso, ma come può un computer imparare a farlo?

Con una rete neurale convoluzionale!

Una CNN ha

  • Livelli convoluzionali
  • Livelli ReLU
  • Livelli di pooling
  • un livello completamente connesso

Una classica architettura CNN sarebbe simile a questa:

Input ->Convolution ->ReLU ->Convolution ->ReLU ->Pooling ->
ReLU ->Convolution ->ReLU ->Pooling ->Fully Connected

A CNN convolves (not convolutes…) learned features with input data and uses 2D convolutional layers. This means that this type of network is ideal for processing 2D images. Rispetto ad altri algoritmi di classificazione delle immagini, i CNN utilizzano in realtà pochissima pre-elaborazione. Ciò significa che possono imparare i filtri che devono essere fatti a mano in altri algoritmi. CNNs può essere utilizzato in tonnellate di applicazioni da immagini e video riconoscimento, classificazione delle immagini, e sistemi di raccomandazione per l’elaborazione del linguaggio naturale e l’analisi delle immagini mediche.

Le CNN si ispirano ai processi biologici. Si basano su alcune ricerche interessanti fatte da Hubel e Wiesel negli anni ‘ 60 per quanto riguarda la visione nei gatti e nelle scimmie. Il modello di connettività in una CNN deriva dalla loro ricerca per quanto riguarda l’organizzazione della corteccia visiva. Nell’occhio di un mammifero, i singoli neuroni rispondono agli stimoli visivi solo nel campo ricettivo, che è una regione ristretta. I campi ricettivi di diverse regioni si sovrappongono parzialmente in modo che l’intero campo visivo sia coperto. Questo è il modo in cui funziona una CNN!

Immagine da NatWhitePhotography su

CNNs hanno un livello di input, e il livello di output, e livelli nascosti. I livelli nascosti di solito consistono in livelli convoluzionali, livelli ReLU, livelli di pooling e livelli completamente collegati.

  • I livelli convoluzionali applicano un’operazione di convoluzione all’ingresso. Questo passa le informazioni al livello successivo.
  • Il pooling combina le uscite di gruppi di neuroni in un singolo neurone nello strato successivo.
  • Livelli completamente connessi collega ogni neurone in un livello a ogni neurone nel livello successivo.

In un livello convoluzionale, i neuroni ricevono input solo da una sottozona del livello precedente. In un livello completamente connesso, ogni neurone riceve input da ogni elemento del livello precedente.

Una CNN funziona estraendo funzionalità dalle immagini. Ciò elimina la necessità di estrazione manuale delle funzionalità. Le caratteristiche non sono addestrati! Vengono apprese mentre la rete si allena su una serie di immagini. Ciò rende i modelli di apprendimento profondo estremamente accurati per le attività di visione artificiale. Le CNN imparano il rilevamento delle funzionalità attraverso decine o centinaia di livelli nascosti. Ogni livello aumenta la complessità delle caratteristiche apprese.

GIF via GIPHY

CNN

  • inizia con un’immagine di input
  • si applica diversi filtri per creare una funzione della mappa
  • si applica un ReLU funzione di aumentare la non linearità
  • applica un pool di livello per ogni funzionalità della mappa
  • appiattisce il pool di immagini in una lunga vettoriale.
  • inserisce il vettore in una rete neurale artificiale completamente connessa.
  • elabora le funzionalità attraverso la rete. Il livello finale completamente connesso fornisce il “voto” delle classi che stiamo cercando.
  • treni attraverso la propagazione in avanti e backpropagation per molte, molte epoche. Questo si ripete fino a quando non avremo una rete neurale ben definita con pesi addestrati e rivelatori di funzionalità.

Quindi cosa significa?

All’inizio di questo processo, un’immagine di input viene suddivisa in pixel.

GIF tramite GIPHY

Per un’immagine in bianco e nero, questi pixel vengono interpretati come un array 2D (ad esempio, 2×2 pixel). Ogni pixel ha un valore compreso tra 0 e 255. (Zero è completamente nero e 255 è completamente bianco. La scala di grigi esiste tra quei numeri.) Sulla base di tali informazioni, il computer può iniziare a lavorare sui dati.

Per un’immagine a colori, questo è un array 3D con un livello blu, uno verde e uno rosso. Ognuno di questi colori ha il proprio valore compreso tra 0 e 255. Il colore può essere trovato combinando i valori in ciascuno dei tre livelli.

Convoluzione

Lo scopo principale della fase di convoluzione è quello di estrarre caratteristiche dall’immagine di input. Lo strato convoluzionale è sempre il primo passo in una CNN.

Hai un’immagine di input, un rilevatore di funzionalità e una mappa di funzionalità. Prendi il filtro e applicalo blocco pixel per blocco pixel all’immagine di input. Lo fai attraverso la moltiplicazione delle matrici.

Diciamo che hai una torcia elettrica e un foglio di pluriball. La torcia brilla una zona 5-bubble x 5-bubble. Per guardare l’intero foglio, far scorrere la torcia su ogni quadrato 5×5 fino a quando non hai visto tutte le bolle.

Foto di stux su

La luce della torcia qui è il filtro e la regione si sta scivolando oltre il campo recettivo. La luce scorrevole attraverso i campi ricettivi è la vostra torcia convolving. Il filtro è un array di numeri (chiamati anche pesi o parametri). La distanza della luce dalla torcia scorre mentre viaggia (stai spostando il filtro su una fila di bolle alla volta? Due?) è chiamato il passo. Ad esempio, un passo di uno significa che stai spostando il filtro su un pixel alla volta. La convenzione è un passo di due.

La profondità del filtro deve essere la stessa della profondità dell’input, quindi se stessimo guardando un’immagine a colori, la profondità sarebbe 3. Ciò rende le dimensioni di questo filtro 5x5x3. In ogni posizione, il filtro moltiplica i valori nel filtro con i valori originali nel pixel. Questo è elemento saggio moltiplicazione. Le moltiplicazioni sono riassunte, creando un singolo numero. Se hai iniziato nell’angolo in alto a sinistra del pluriball, questo numero è rappresentativo dell’angolo in alto a sinistra. Ora si sposta il filtro alla posizione successiva e ripetere il processo in tutto il pluriball. L’array con cui finisci è chiamato mappa delle funzionalità o mappa di attivazione! È possibile utilizzare più di un filtro, che farà un lavoro migliore di preservare le relazioni spaziali.

GIF tramite GIPHY

Potrai specificare parametri come il numero di filtri, la dimensione del filtro, l’architettura della rete, e così via. La CNN impara i valori dei filtri da sola durante il processo di formazione. Hai molte opzioni con cui puoi lavorare per rendere possibile il miglior classificatore di immagini per il tuo compito. È possibile scegliere di riempire la matrice di input con zeri (riempimento zero) per applicare il filtro agli elementi confinanti della matrice di immagini di input. Ciò consente anche di controllare la dimensione delle mappe di funzionalità. L’aggiunta di zero padding è un’ampia convoluzione. Non aggiungere zero padding è una convoluzione stretta.

Questo è fondamentalmente il modo in cui rileviamo le immagini! Non guardiamo ogni singolo pixel di un’immagine. Vediamo caratteristiche come un cappello, un vestito rosso, un tatuaggio e così via. Ci sono così tante informazioni che entrano nei nostri occhi in ogni momento che non potremmo affrontare ogni singolo pixel di esso. Stiamo permettendo al nostro modello di fare la stessa cosa.

Il risultato di questo è la mappa caratteristica convolta. È più piccolo dell’immagine di input originale. Questo rende più facile e veloce da affrontare. Perdiamo informazioni? Alcuni, sì. Ma allo stesso tempo, lo scopo del rilevatore di funzionalità è quello di rilevare le funzionalità, che è esattamente ciò che fa.

Creiamo molte mappe di funzionalità per ottenere il nostro primo livello convoluzionale. Questo ci permette di identificare molte caratteristiche diverse che il programma può utilizzare per imparare.

I rilevatori di funzionalità possono essere impostati con valori diversi per ottenere risultati diversi. Ad esempio, è possibile applicare un filtro che può affinare e mettere a fuoco un’immagine o sfocare un’immagine. Ciò darebbe uguale importanza a tutti i valori. Puoi migliorare i bordi, rilevare i bordi e altro ancora. Lo faresti applicando diversi rilevatori di funzionalità per creare diverse mappe di funzionalità. Il computer è in grado di determinare quali filtri hanno più senso e applicarli.

Lo scopo principale qui è trovare le funzionalità nell’immagine, inserirle in una mappa delle funzionalità e preservare comunque la relazione spaziale tra i pixel. Questo è importante in modo che i pixel non si confondano tutti.

Visualizziamo questa roba!

Saluta il mio piccolo amico:

Photo by Kirgiz03 on

We’re going to use this guy for our input image.

We’ll make him black and white

Let’s define and visualize our filters

import numpy as npfilter_vals = np.array(, , , ])print('Filter shape: ', filter_vals.shape)

Filter shape: (4, 4)

e vediamo:

Filter 1: 



]

Ecco una visualizzazione dei nostri quattro filtri

definiamo Ora una convolutional livello (sto amando PyTorch ora, in modo che quello che stai utilizzando.)

Vedremo

Net(
(conv): Conv2d(1, 4, kernel_size=(4, 4), stride=(1, 1), bias=False)
)

Aggiungere un po ‘più di codice

Poi un po’ di più

E possiamo visualizzare l’output di un livello convoluzionale prima che venga applicata una funzione di attivazione ReLu!

Ora proviamo a creare un kernel personalizzato utilizzando un operatore di Sobel come un bordo filtro di rilevamento. Il filtro Sobel è molto comunemente usato nel rilevamento dei bordi. Fa un buon lavoro nel trovare modelli di intensità in un’immagine. Applicare un filtro Sobel a un’immagine è un modo per prendere un’approssimazione della derivata dell’immagine separatamente nella direzione x o Y.

convertiremo il nostro piccolo ragazzo a scala di grigi per il filtraggio

gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

Ecco, ci siamo!

controllare la matematica? Dai un’occhiata all’introduzione alle reti neurali convoluzionali di Jianxin Wu

ReLU layer

Lo strato ReLU (unità lineare rettificata) è un altro passo verso il nostro livello di convoluzione. Si sta applicando una funzione di attivazione sulle mappe delle funzionalità per aumentare la non linearità nella rete. Questo perché le immagini stesse sono altamente non lineari! Rimuove i valori negativi da una mappa di attivazione impostandoli a zero.

La convoluzione è un’operazione lineare con cose come la moltiplicazione e l’aggiunta di matrici di elementi. I dati del mondo reale che vogliamo che la nostra CNN impari saranno non lineari. Possiamo renderne conto con un’operazione come ReLU. È possibile utilizzare altre operazioni come tanh o sigmoid. ReLU, tuttavia, è una scelta popolare perché può allenare la rete più velocemente senza alcuna penalità importante per la precisione di generalizzazione.

Scopri C.-C. Jay Kuo Capire le reti neurali convoluzionali con un modello matematico.

Vuoi scavare più a fondo? Prova Kaiming Lui, et al. Scavare in profondità nei raddrizzatori: superando le prestazioni a livello umano sulla classificazione ImageNet.

Se hai bisogno di un po ‘ più di informazioni sulle basi assolute delle funzioni di attivazione, puoi trovarlo qui!

Ecco come il nostro piccolo amico si occupa di una funzione di attivazione ReLU trasforma tutti i valori dei pixel negativi in nero

viz_layer(activated_layer)

Related Post

Leave A Comment