Deep Learning per la Classificazione di Immagini

[Slide](C:\UNI\Magistrale\visione\12 - Deep learning for image classification.pdf)

Indice


Dal Cervello alle Reti Neurali

Corteccia Visiva e Ispirazione Biologica

Definizione

La corteccia visiva è la parte del cervello che elabora le informazioni visive. È organizzata in aree gerarchiche: le prime aree rilevano bordi e orientamenti, le successive riconoscono forme, le più alte identificano oggetti complessi.

In pratica: Neuroni vicini nella corteccia rispondono a regioni vicine dell’immagine (organizzazione retinotopica). I neuroni dei livelli iniziali si “accendono” solo per stimoli semplici (un bordo verticale), quelli dei livelli finali per stimoli complessi (un volto). Le CNN replicano proprio questa gerarchia.

Reti Neurali Tradizionali (MLP)

Definizione

Un Multi-Layer Perceptron (MLP) è una rete neurale completamente connessa: ogni neurone di uno strato è collegato a tutti i neuroni dello strato successivo.

Applicato alle immagini, un MLP riceve in input tutti i pixel come un vettore piatto. Il problema è che un’immagine ha ~150.000 valori: con un solo strato nascosto da 1000 neuroni si avrebbero già 150 milioni di parametri.

Limiti dell'MLP per le immagini

  • Esplosione dei parametri: ogni pixel connesso a ogni neurone
  • Nessuna invarianza spaziale: lo stesso oggetto in posizione diversa attiva neuroni completamente diversi
  • Nessuna sfruttamento della struttura locale: pixel vicini sono trattati esattamente come pixel lontani

Convolutional Neural Network (CNN)

Connessioni Locali e Pesi Condivisi

Definizione

Una CNN è una rete neurale progettata per lavorare su dati strutturati in griglia (immagini). Sfrutta due principi fondamentali: connessioni locali (ogni neurone vede solo una regione dell’input) e condivisione dei pesi (lo stesso filtro viene applicato in tutta l’immagine).

In pratica: invece di avere un peso diverso per ogni coppia pixel-neurone, si impara un filtro (es. ) che viene fatto scorrere su tutta l’immagine. Questo riduce drasticamente i parametri e insegna alla rete a riconoscere lo stesso pattern ovunque si trovi nell’immagine.

Note

La condivisione dei pesi introduce l’invarianza alla traslazione: se la rete impara a riconoscere un bordo verticale, lo riconosce in alto a sinistra come in basso a destra.

Operazione di Convoluzione

La convoluzione scorre un filtro (kernel) di dimensione sull’immagine di input, calcolando il prodotto scalare tra il filtro e ogni regione locale. Il risultato è una feature map che indica dove e quanto fortemente quella caratteristica è presente.

Parametri importanti:

  • Stride : di quanti pixel si sposta il filtro a ogni passo. Stride riduce le dimensioni dell’output.
  • Padding : aggiunta di pixel (tipicamente zeri) ai bordi per controllare le dimensioni dell’output.
  • Dimensione output:

Un layer convoluzionale applica filtri diversi, producendo feature map — ognuna cattura un tipo di caratteristica (bordi orizzontali, verticali, angoli, texture…).

Example

Con un’immagine , 16 filtri , stride 1 e padding 0:

  • Output:
  • Parametri per layer: (molto meno di un MLP)

Pooling

Definizione

Il pooling è un’operazione di sottocampionamento che riduce le dimensioni spaziali delle feature map mantenendo le informazioni più salienti.

I due tipi principali:

  • Max pooling: prende il valore massimo in ogni regione — mantiene il segnale più forte (presenza di una feature)
  • Average pooling: calcola la media — più morbido, usato in alcuni punti specifici (es. global average pooling)

In pratica: un max pooling con stride 2 dimezza larghezza e altezza. Se un neurone aveva rilevato un bordo verticale “da qualche parte” in una regione , il max pooling mantiene questa informazione indipendentemente da dove esattamente.

Vantaggi del pooling:

  • Riduce il costo computazionale degli strati successivi
  • Introduce invarianza a piccole traslazioni e deformazioni
  • Riduce il rischio di overfitting

Parte Fully Connected

Dopo i layer convoluzionali e di pooling, le feature map vengono “appiattite” in un vettore e passate a uno o più layer fully connected (identici a un MLP). Questi strati combinano le feature estratte dai layer precedenti per produrre la classificazione finale.

L’ultimo layer ha tanti neuroni quante sono le classi, con attivazione softmax che produce una distribuzione di probabilità sulle classi.

[Conv → Pool] × N  →  Flatten  →  [FC] × M  →  Softmax  →  Classe

Addestrare una CNN

Procedura di Training

Il training di una CNN segue un ciclo iterativo:

  1. Inizializzazione casuale: i pesi della rete sono inizializzati con valori casuali piccoli (es. da una distribuzione gaussiana). Inizializzare tutto a zero non funziona: tutti i neuroni calcolerebbero lo stesso gradiente e rimarrebbero simmetrici.

  2. Forward propagation: l’immagine di input attraversa tutti i layer della rete fino a produrre una predizione.

  3. Calcolo dello scostamento (loss): si misura quanto la predizione si discosta dall’etichetta corretta. La funzione di loss più comune per la classificazione è la cross-entropy:

  4. Back propagation: si calcola il gradiente della loss rispetto a ogni peso della rete usando la regola della catena, propagando l’errore all’indietro attraverso i layer.

  5. Aggiornamento dei pesi: si sposta ogni peso nella direzione opposta al gradiente (gradient descent):

  6. Si ripete su tutti i batch del dataset (un’epoca), per molte epoche, fino a convergenza.

Mini-Batch Gradient Descent

Definizione

Il mini-batch gradient descent è una variante del gradient descent che aggiorna i pesi calcolando il gradiente su un sottoinsieme (mini-batch) del training set, tipicamente 32–512 esempi, anziché su un singolo esempio o sull’intero dataset.

Confronto con le varianti:

  • Batch GD: gradiente esatto ma lento e costoso in memoria
  • SGD (Stochastic): aggiornamento per ogni singolo esempio — veloce ma rumoroso
  • Mini-batch: compromesso ottimale — sfrutta la parallelizzazione GPU, gradiente abbastanza stabile

In pratica: con batch size 64, si calcola il gradiente mediando sui 64 esempi del batch, poi si aggiornano i pesi. Si passa poi al batch successivo finché non si sono usati tutti gli esempi (un’epoca).


LeNet-5 — La Prima CNN di Successo

Definizione

LeNet-5 (LeCun et al., 1998) è la prima CNN dimostrata su larga scala, progettata per il riconoscimento di cifre scritte a mano (dataset MNIST).

Architettura:

  • 3 layer convoluzionali (filtri )
  • 2 layer di average pooling
  • 2 layer fully connected

Innovazioni di LeNet-5:

  • Ha dimostrato che l’apprendimento gerarchico di feature funziona
  • Ha introdotto l’alternanza Conv → Pool
  • Usava la funzione di attivazione tanh (poi sostituita da ReLU)
  • Training con mini-batch gradient descent

Note

LeNet-5 rimase una curiosità per anni, limitata dalla mancanza di dati e di potenza computazionale. La rivoluzione arrivò con AlexNet nel 2012, quando le GPU e ImageNet resero possibile scalare l’idea.


Evoluzione delle Architetture

AlexNet

AlexNet (Krizhevsky et al., 2012) ha vinto ImageNet LSVRC 2012 con un margine enorme, segnando l’inizio dell’era del deep learning per la visione artificiale.

Architettura:

  • 5 layer convoluzionali
  • 3 layer di max pooling
  • 3 layer fully connected
  • ~60 milioni di parametri

Innovazioni chiave:

ReLU (Rectified Linear Unit)

Definizione

La ReLU è una funzione di attivazione definita come .

Sostituì le attivazioni sigmoidali e tanh. Il vantaggio principale è che non satura per valori positivi, eliminando il problema del vanishing gradient negli strati profondi. Semplice da calcolare e molto efficace in pratica.

Dropout

Definizione

Il dropout è una tecnica di regolarizzazione che, durante il training, “spegne” casualmente ogni neurone con probabilità (tipicamente 0.5).

In pratica: a ogni forward pass, metà dei neuroni di un layer FC vengono azzerati. La rete non può fare affidamento su singoli neuroni e impara rappresentazioni più robuste e distribuite. Al test time tutti i neuroni sono attivi ma i pesi vengono scalati di .

Note

Il dropout fu applicato principalmente agli strati fully connected di AlexNet, riducendo significativamente l’overfitting su ImageNet.

Data Augmentation

Definizione

La data augmentation aumenta artificialmente la dimensione del training set applicando trasformazioni casuali alle immagini: ritagli, flip orizzontale, variazioni di colore/luminosità.

In pratica: se la rete vede lo stesso gatto ritagliato in 10 modi diversi, impara che un gatto è un gatto indipendentemente da dove si trova e come è illuminato. Riduce l’overfitting senza raccogliere nuovi dati.


VGGNet

VGGNet (Simonyan & Zisserman, 2014) ha esplorato il ruolo della profondità usando esclusivamente filtri .

Architettura:

  • 13 layer convoluzionali (tutti con filtri )
  • 5 layer di max pooling
  • 3 layer fully connected

Note

Due convolzioni in sequenza hanno lo stesso campo ricettivo di una convoluzione , ma con meno parametri e con una non-linearità in più. VGGNet ha dimostrato che reti più profonde con filtri piccoli battono reti meno profonde con filtri grandi.

Il limite di VGGNet è il numero enorme di parametri (~138M), concentrati nei layer fully connected, che lo rende costoso in memoria.


GoogLeNet

GoogLeNet (Szegedy et al., 2014) ha vinto ImageNet 2014 con un’architettura molto più efficiente di VGGNet pur avendo solo ~5 milioni di parametri.

Architettura:

  • 3 layer convoluzionali iniziali
  • 4 layer di max pooling
  • 9 Inception module
  • 1 global average pooling
  • 1 layer fully connected

Convoluzione 1×1

Definizione

Una convoluzione applica un filtro di dimensione al volume di feature map. Non combina informazioni spaziali, ma combina le feature lungo la dimensione dei canali.

In pratica: è come un MLP applicato indipendentemente a ogni posizione spaziale. Permette di ridurre o aumentare il numero di canali (bottleneck), controllando i costi computazionali degli strati successivi.

Inception Module

Definizione

Un Inception module applica in parallelo convolzioni di diverse dimensioni (, , ) e un max pooling alla stessa feature map, concatenando poi i risultati lungo la dimensione dei canali.

In pratica: invece di scegliere a priori la scala dei filtri, l’Inception module lascia che la rete impari quale scala sia più utile per ciascuna feature. Le convoluzione prima delle convoluzione più grandi riducono i canali, contenendo il costo computazionale.

Global Average Pooling

Definizione

Il global average pooling sostituisce i layer fully connected finali calcolando la media di ogni feature map fino a ottenere un singolo valore per canale.

Se prima dei layer FC si ha un volume , il global average pooling produce direttamente un vettore di 1024 valori. Questo elimina milioni di parametri e riduce l’overfitting.


ResNet

ResNet (He et al., 2015) ha vinto ImageNet 2015 con un’architettura da 152 strati, risolvendo il problema del vanishing gradient nelle reti molto profonde.

Architettura:

  • 1 layer convoluzionale iniziale
  • 1 layer di max pooling
  • 4 gruppi di residual block
  • 1 global average pooling
  • 1 layer fully connected

Residual Blocks (Skip Connection)

Definizione

Un residual block introduce una connessione residua (skip connection) che somma l’input del blocco al suo output: , dove è la trasformazione appresa dai layer del blocco.

Perché è importante

In reti molto profonde, il gradiente tende ad azzerarsi (vanishing) o esplodere nei primi strati. Le skip connection forniscono un percorso diretto per il gradiente che bypassa i layer convoluzionali, permettendo di addestrare reti con centinaia di strati.

In pratica: il blocco non deve imparare la trasformazione completa , ma solo il residuo . Se la trasformazione ottimale è l’identità, basta che i pesi vadano a zero — molto più semplice da imparare.

Batch Normalization

Definizione

La Batch Normalization normalizza l’output di ogni layer rispetto al mini-batch corrente: sottrae la media e divide per la deviazione standard del batch, poi applica due parametri apprendibili (, ) per riscalare e traslare.

Il problema che risolve è il cosiddetto internal covariate shift: durante il training, la distribuzione degli input a ogni layer cambia continuamente perché i pesi degli strati precedenti si aggiornano. Questo rallenta il training perché ogni layer deve continuamente adattarsi a input con distribuzione diversa.

Note

La Batch Normalization:

  • Permette l’uso di learning rate più alti (training più veloce)
  • Ha effetto regolarizzante (riduce la necessità di dropout)
  • Va inserita tipicamente prima della funzione di attivazione

MobileNet

MobileNet (Howard et al., 2017) è progettata per dispositivi con risorse limitate (smartphone, sistemi embedded) mantenendo buone prestazioni.

Architettura:

  • 27 layer convoluzionali (quasi tutti depthwise separable)
  • 1 global average pooling
  • 1 layer fully connected

Depthwise Separable Convolution

Definizione

La depthwise separable convolution fattorizza una convoluzione standard in due operazioni separate: una depthwise convolution e una pointwise convolution.

  • Depthwise convolution: applica un filtro distinto a ciascun canale dell’input, indipendentemente dagli altri canali. Cattura correlazioni spaziali, non tra canali.
  • Pointwise convolution: convoluzione che combina i risultati della depthwise. Cattura correlazioni tra canali, non spaziali.

In pratica: su un input con canali, una convoluzione standard ha costo (per filtri). La versione separabile ha costo , circa 8-9 volte meno per configurazioni tipiche.


Confronto tra Architetture CNN

Le principali architetture CNN possono essere lette come una sequenza di soluzioni a problemi diversi: riduzione dei parametri, aumento della profondità, controllo dell’overfitting, efficienza computazionale e addestrabilità di reti molto profonde.

ReteArchitetturaConcetto nuovoDifferenza principale
LeNet-5Conv + average pooling + FCPrima CNN di successoDimostra che l’alternanza Conv Pool funziona per apprendere feature gerarchiche
AlexNet5 conv, 3 max pooling, 3 FCReLU, dropout, data augmentation, uso GPUPorta il deep learning su larga scala nella classificazione ImageNet
VGGNetMolti layer , max pooling, FCProfondità con filtri piccoliArchitettura semplice e profonda, ma con moltissimi parametri
GoogLeNetModuli Inception + global average poolingInception, convoluzioni , GAPMolto più efficiente di VGG, riduce i parametri finali
ResNetResidual block + skip connectionConnessioni residuePermette di addestrare reti molto profonde, anche centinaia di layer
MobileNetDepthwise separable convolutionConvoluzioni separabiliPensata per mobile/embedded, riduce drasticamente il costo computazionale
ViTTransformer su patch immagineSelf-attention globaleNon usa convoluzioni classiche, cattura relazioni globali ma richiede molti dati
Swin TransformerTransformer gerarchico con finestre localiShifted windowsRiduce il costo dell’attention e recupera una struttura multi-scala simile alle CNN

Lettura Comparativa delle Reti

LeNet-5 è importante perché introduce la struttura base delle CNN classiche: convoluzioni per estrarre feature locali, pooling per ridurre la dimensione spaziale e layer fully connected per la classificazione. Era progettata per cifre scritte a mano, quindi per un problema relativamente semplice rispetto a ImageNet.

AlexNet scala l’idea di LeNet a dataset grandi. Le novità principali sono la ReLU, che rende il training più efficace rispetto a tanh e sigmoid, il dropout per ridurre l’overfitting nei fully connected e la data augmentation per aumentare artificialmente la variabilità del training set.

VGGNet mostra che la profondità è un fattore chiave. Usa quasi solo convoluzioni : due convoluzioni consecutive hanno campo ricettivo simile a una , ma con meno parametri e una non linearità in più. Il limite è il costo in memoria, dovuto soprattutto ai layer fully connected.

GoogLeNet punta sull’efficienza. Gli Inception module applicano in parallelo filtri di dimensione diversa (, , ) e pooling, lasciando alla rete la scelta della scala più utile. Le convoluzioni funzionano da bottleneck sui canali e il global average pooling sostituisce gran parte dei fully connected finali.

ResNet risolve il problema dell’addestramento di reti molto profonde. Le skip connection permettono al gradiente di propagarsi più facilmente e fanno sì che ogni blocco impari un residuo invece della trasformazione completa. Il blocco produce quindi .

MobileNet cambia il tipo di convoluzione per ridurre il costo. Con la depthwise separable convolution separa il filtraggio spaziale dalla combinazione tra canali: prima un filtro per canale, poi una convoluzione per mescolare i canali. È quindi adatta a dispositivi con risorse limitate.

ViT cambia paradigma: invece di usare convoluzioni, divide l’immagine in patch fisse e tratta ogni patch come un token, in modo analogo alle parole in un Transformer testuale. La self-attention permette di mettere in relazione direttamente patch anche lontane tra loro, catturando dipendenze globali. Il limite è che non ha l’inductive bias spaziale delle CNN, quindi richiede molti dati per funzionare bene.

Swin Transformer rende i Transformer più adatti alla visione introducendo una struttura gerarchica. L’attention non è calcolata globalmente su tutte le patch, ma dentro finestre locali che vengono spostate tra i layer. In questo modo riduce il costo computazionale e produce feature multi-scala, utili anche per task come detection e segmentazione.


Transformer per la Visione

ViT — Vision Transformer

Definizione

ViT (Dosovitskiy et al., 2020) applica il meccanismo Transformer (originariamente pensato per il testo) alle immagini, dividendo l’immagine in patch fisse (es. pixel) e trattando ogni patch come un “token”.

In pratica: un’immagine viene divisa in patch, ognuna linearizzata e proiettata in un vettore. L’attention del Transformer può mettere in relazione ogni patch con ogni altra, catturando dipendenze globali che le CNN vedono solo attraverso molti strati.

Note

ViT richiede grandi quantità di dati per superare le CNN: le CNN hanno l’inductive bias spaziale (invarianza alla traslazione) integrato nella loro struttura, mentre ViT lo deve imparare dai dati. Con dataset enormi (JFT-300M), ViT batte le CNN.

Swin Transformer

Definizione

Swin (Liu et al., 2021) è un Transformer gerarchico che introduce una struttura a livelli analoga a quella delle CNN: patch più piccole nei layer iniziali, patch aggregate nei layer successivi.

A differenza di ViT, l’attention non è globale ma calcolata dentro finestre locali che si spostano tra i layer (Shifted Windows — da cui “Swin”). Questo riduce il costo computazionale da quadratico in numero di patch a lineare.

In pratica: Swin combina la gerarchia multi-scala delle CNN (utile per detection e segmentazione, dove servono feature a diversa risoluzione) con la potenza espressiva dei Transformer. È diventato backbone di riferimento per molti task di visione.


Pratiche di Training

Image Pre-processing

Prima di passare le immagini alla rete è necessario un pre-processing standardizzato:

  • Resize: le CNN richiedono input di dimensione fissa (es. )
  • Normalizzazione: si sottraggono la media e si divide per la deviazione standard del training set, canale per canale. Questo porta i valori dei pixel in un range simile per tutti i canali e accelera la convergenza
  • Augmentation (solo in training): flip, crop casuale, variazioni di colore, rotazioni leggere

Note

Per reti pre-addestrate su ImageNet, si usano tipicamente la media e la deviazione standard di ImageNet (, ) anche su nuovi dataset, poiché le statistiche sono simili per la maggior parte delle immagini naturali.

Transfer Learning

Definizione

Il transfer learning consiste nell’utilizzare i pesi di una rete pre-addestrata su un task (es. classificazione su ImageNet) come punto di partenza per un task diverso, invece di inizializzare i pesi casualmente.

Strategie principali:

Feature extraction: si congela la parte convoluzionale della rete (pesi fissi) e si addestra solo un nuovo classificatore finale. I layer convoluzionali estraggono feature generali (bordi, texture, forme) che sono utili per quasi qualunque task visivo.

Fine-tuning: si parte dai pesi pre-addestrati e si continua il training sull’intero modello (o solo sugli strati finali) con un learning rate molto basso. Le feature vengono adattate al nuovo dominio.

Tip

Regola pratica: più il nuovo dataset è piccolo e simile a ImageNet, più conviene congelare i layer iniziali. Se il dataset è grande e/o molto diverso (es. immagini mediche), è utile il fine-tuning di tutti i layer.

In pratica: anche con poche centinaia di immagini, una ResNet pre-addestrata su ImageNet con feature extraction supera spesso una CNN addestrata da zero su migliaia di immagini.