Condividi:

Condividi su facebook
Condividi su twitter
Condividi su linkedin
Condividi su whatsapp
Condividi su telegram

In questo articolo andremo a parlare della rete neurale convoluzionale, tradotto dall’inglese Convolutional Neural Network (CNN).

Se sei una persona che ha appena iniziato il suo percorso nel Deep Learning ti consiglio di leggere tutto questo articolo perché ti andrò a spiegare in via generale, quelle che sono le CNN.

P.S. Non userò concetti matematici in questo articolo.

Sei pronto?

Iniziamo e partiamo dalle basi!

Cos’è una rete neurale convoluzionale?

Una rete neurale convoluzionale è un’architettura di rete neurale artificiale che serve per rilevare immagini più grandi di 64 x 64 pixel.

A differenza di una normale rete neurale artificiale (ANN), le CNN vengono utilizzate per ottenere un miglior risultato nel rilevamento delle immagini (dopo scenderemo più nel dettaglio). 

Questo tipo di reti neurali dette anche ConvNet, vengono spesso utilizzate nel riconoscere oggetti. Infatti sono usate nel campo medico (come il rilevamento di tumori), nelle auto a guida autonoma (es. tesla), riconoscimento dei campi agricoli e tanto altro.

Le reti neurali convoluzionali usate nella Computer Vision, stanno diventando molto popolari negli ultimi anni perché si stanno scoprendo (man mano che la tecnologia avanza) nuovi algoritmi di Deep Learning sempre più prestanti.

Fatto questo preambolo posso finalmente iniziare a parlarti delle differenze che ci sono tra una rete neulare normale e le ConvNet.

Cosa distingue una CNN da una rete neurale artificiale?

La struttura di una rete neurale artificiale è completamente diversa dalla struttura di una rete neurale convoluzionale.

In teoria si potrebbe usare una ANN per eseguire un riconoscimento di immagini, ma questa porterebbe a risultati del tutto disastrosi. Ora cerco di spiegare meglio quello che ho detto sino ad ora. 

Immagina una rete neurale artificiale normale, ci sono migliaia di neuroni e livelli nascosti interconnessi tra loro:

fully connected layer

A causa della sua profondità e complessità si verificherebbero i seguenti problemi:

  • Costo computazionale elevato
  • La discesa del gradiente esploderebbe

Per evitare questo tipo di problema viene usata la CNN perché a differenza delle reti neurali artificiali normali, sono adatte ad analizzare le immagini grazie ai neuroni posti in 3 dimensioni, detti anche canali: Altezza x Larghezza x Profondità:

Rete neurale convoluzionale

Oltre ad ottenere migliori risultati con pochi sforzi le reti neurali convoluzionali comportano i seguenti vantaggi:

  • Condivisione dei parametri
  • Sparsità delle connessioni, ovvero: in ogni layer ogni valore di output dipende solo da piccoli numeri di input.

Spero che arrivato a questo punto ti sia tutto chiaro, perché ora che ti ho spiegato le differenze sostanziali tra i due tipi di rete neurale e perché dovresti utilizzare le CNN per il riconoscimento delle immagini, andiamo a vedere come effettivamente funziona una rete neurale convoluzionale.

Come funziona una rete neurale convoluzionale?

La struttura base di una rete neurale è composta da:


  1. Strato convoluzionale
  2. Funzione di attivazione non lineare
  3. Pooling
  4. Fully Connected Network (ovvero la nostra NN)

Andiamo per ordine e vediamo come ognuna di queste caratteristiche sono importanti per la costruzione della nostra rete neurale convoluzionale.

Strato convoluzionale

Lo strato convoluzionale è la parte iniziale della nostra rete, in questo strato avviene ciò che si definisce “Convoluzione” da cui prende il nome la CNN:

Nella convoluzione si estraggono le caratteristiche dell’immagine. 

Prendiamo un’immagine: questa viene divisa in quadrati (prendi come esempio il quadrato verde e fai come se fosse un’immagine).

Dopo aver eseguito questo passaggio, l’immagine viene moltiplicata ad una matrice (detta ‘filtro’ o ‘kernel’ o ‘feature detector’ – il quadrato giallo) ottenendo così la convoluzione (o ‘Feature Map’ – quadrato rosa).

Per farti capire meglio quello che stiamo andando a fare vedi le immagini qui sotto:

Una delle cose importanti da tenere ben a mente è che qui i filtri agiscono come rilevatori di funzionalità dall’immagine di input originale. Abbiamo diversi tipi di filtro che a loro volta formano tipi diversi di ‘Feature Map’:

  • Stride: nel processo di Windowing se lo stride non è stato applicato, il filtro partirà ad analizzare il quadrato successivo (come nell’immagine sopra). Diversamente se per esempio applichiamo uno stride = 2, il filtro partirà dal secondo quadrato successivo, saltando ogni volta quello vicino.
  • Padding: aggiunge attorno all’immagine uno strato di 0. Questo permette di evitare due aspetti negativi:
    • Il restringimento dell’immagine ogni volta che applichi un filtro
    • E la perdita delle informazioni data dalla poca usabilità dei pixel agli angoli e ai bordi.
Rete neurale convoluzionale
Qui il bordo del quadrato blu è il padding

A questo strato convoluzionale viene applicata una funzione di attivazione non lineare.

Le funzioni di attivazioni non lineari

Abbiamo diversi tipi di funzione di attivazione, ma le più comuni sono: Sigmoid, ReLu (Rectified Linear Unit) e Tanh.

La funzione di attivazione viene applicata ogni volta dopo lo strato convoluzionale perché la ConvNet è lineare ed essendo che noi non vogliamo predire (es.) il prezzo delle case, dobbiamo applicare la funzione non lineare.

Ognuna delle funzioni citate sopra è adatta a situazioni diverse. Prendiamo come esempio la funzione ReLu che è quella più utilizzata.

A differenza delle altre funzioni citate prima, ReLu è più veloce nell’apprendimento e ottiene migliori risultati sul gradiente quando ‘Z’ è molto grande o molto piccolo.

Alla fine di tutto, dopo aver applicato la nostra funzione non lineare possiamo passare al Pooling.

Pooling nella CNN

Il Pooling non ha parametri da settare, ma questo può essere di diversi tipi: Max, Sum, Avarege ecc.

Il Pooling riduce la dimensione della ‘Feature map’ ma nel contempo conserva anche le informazioni più importanti di ognuna di esse.

Prendiamo come esempio una feature map ottenuta dai primi passaggi, applichiamo ad essa un filtro 2×2 e stride = 2 utilizzando il MaxPooling e otterremo il seguente risultato:

pooling in una  Rete neurale convoluzionale
Fonte immagine

Grazie al Pooling traiamo i seguenti benefici:

  • rende le rappresentazioni di input più piccole e gestibili
  • riduce il numero di parametri e calcoli nella rete, controllando quindi l’overfitting
  • rende la rete invariante a piccole trasformazioni, distorsioni e traduzioni nell’immagine di input (una piccola distorsione nell’input non cambierà l’output di Pooling – poiché prendiamo il valore massimo / medio).
  • ci aiuta ad arrivare a una rappresentazione invariante della nostra immagine (detto “equivariante“). Questo è molto potente poiché possiamo rilevare gli oggetti in un’immagine, indipendentemente da dove si trovino.

Questi primi 3 step sono alla base di ogni ConvNet e formano il primo livello di essa. Nella rete si possono aggiungere altri livelli formati da questa base per poi aggiungere il livello fully connected.

Fully connected layer (o Livello completamente connesso)

fully connected layer

Questo livello implica che ogni neurone è connesso allo strato precedente e a quello successivo.

La combinazione tra il livello fully connected e il resto della rete descritta fino ad ora, riesce a dare migliori risultati nella predizione.

Non dimentichiamoci che a quest’ultimo livello viene applicata la funzione di attivazione lineare ‘Softmax’ che restituirà il nostro output.

La funzione Softmax è una funzione che permette di rilevare più oggetti contemporaneamente in una sola immagine.

Ecco una ConvNet:

Rete neurale convoluzionale

Conclusioni

Questo articolo vuole dare una breve introduzione alle CNNs, infatti come hai potuto vedere non sono sceso nei dettagli per non complicare quanto hai appreso fino ad ora. Se vuoi studiare l’argomento ti consiglio di seguire questo corso gratuito.

Fammi sapere se c’è qualcosa che vorresti approfondire e se sei particolarmente interessato a questi argomenti ti consiglio di unirti alla nostra community.

Condividi su facebook
Condividi su twitter
Condividi su linkedin
Condividi su whatsapp
Condividi su telegram
Antonio Furioso

Antonio Furioso

Fondatore di Neuragate. Credo molto in quello che le immagini possono comunicare, per questo sono fortemente attratto dalla Computer Vision. Mi piace tutto quello che è nuovo. La curiosità è quella che mi spinge oltre le aspettative e a fare sempre di più.

Iscriviti
Notificami
guest
0 Commenti
Inline Feedback
Vedi tutti i commenti