Convolutional Neural Network (CNN)
Una rete neurale convoluzionale (CNN) apprende le caratteristiche delle immagini con filtri condivisi che scorrono sull'input. Scopri i suoi livelli, le proprietà, i modelli principali e le differenze tra CNN e ViT.
Una rete neurale convoluzionale (CNN) è un'architettura di deep learning che elabora dati strutturati a griglia, più spesso immagini, con piccoli filtri apprendibili che scorrono sull'input. Ogni filtro riutilizza gli stessi pesi in ogni posizione, così una CNN rileva uno schema, come un bordo o una ruota, ovunque compaia, usando molti meno parametri di una rete completamente connessa. La sovrapposizione dei livelli crea una gerarchia di caratteristiche: dai bordi e dalle texture nei primi livelli alle parti e agli oggetti interi in quelli più profondi. Le CNN hanno guidato gran parte dei progressi nella visione artificiale da quando AlexNet ha vinto la sfida ImageNet nel 2012 e restano la scelta più comune per la visione in tempo reale su hardware edge.
Come funziona una CNN#
Una CNN ripete in più fasi alcuni tipi di livelli, ciascuno dei quali opera a una risoluzione inferiore rispetto al precedente:
- Livelli di convoluzione: Ogni livello fa scorrere sull'altezza e sulla larghezza dell'input una serie di filtri apprendibili, in genere 3×3. Ogni filtro produce un canale della mappa di caratteristiche in output, quindi un livello con 64 filtri produce 64 canali.
- Normalizzazione e attivazione: La normalizzazione batch mantiene gli output di ogni livello in un intervallo stabile durante l'addestramento e una funzione di attivazione non lineare, come ReLU o SiLU, permette ai livelli sovrapposti di rappresentare più di una singola trasformazione lineare.
- Riduzione della risoluzione: Il max pooling o una convoluzione con stride 2 dimezza l'altezza e la larghezza, ampliando il campo recettivo dei livelli successivi e riducendo i calcoli. Molte architetture moderne riducono la risoluzione soprattutto con convoluzioni dotate di stride.
- Testa: Per la classificazione delle immagini, il global average pooling riduce ogni canale finale a un unico numero e un livello completamente connesso mappa questi numeri sui punteggi delle classi. I modelli di rilevamento e segmentazione sostituiscono questa testa con livelli che prevedono riquadri o maschere per pixel.
Proprietà chiave delle CNN#
Tre proprietà spiegano perché le convoluzioni sono adatte alle immagini. La connettività locale fa sì che ogni output dipenda solo da una piccola area dell'input, coerentemente con la forte correlazione tra pixel vicini. La condivisione dei pesi permette a un filtro di servire l'intera immagine, mantenendo invariato il numero di parametri a qualsiasi dimensione dell'input. L'equivarianza alla traslazione fa sì che, se l'input si sposta, la mappa di caratteristiche si sposti della stessa quantità: uno schema appreso in un angolo viene quindi riconosciuto ovunque. I livelli di pooling aggiungono una certa tolleranza ai piccoli spostamenti. Insieme, queste proprietà costituiscono il bias induttivo della CNN, ovvero le assunzioni integrate che le permettono di apprendere da meno immagini rispetto a un transformer.
Il frammento di codice PyTorch qui sotto confronta un livello convoluzionale con un livello completamente connesso applicati alla stessa immagine RGB 224×224.
import torch
from torch import nn
image = torch.randn(1, 3, 224, 224)
# 64 learnable 3x3 filters, each reused at every position of the RGB image
conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
# A fully connected layer mapping the same flattened image to only 64 numbers
dense = nn.Linear(3 * 224 * 224, 64)
conv_params = sum(p.numel() for p in conv.parameters())
dense_params = sum(p.numel() for p in dense.parameters())
print(f"Conv2d: output {tuple(conv(image).shape)}, {conv_params:,} parameters")
print(f"Linear: output {tuple(dense(image.flatten(1)).shape)}, {dense_params:,} parameters")Stampa Conv2d: output (1, 64, 224, 224), 1,792 parameters e Linear: output (1, 64), 9,633,856 parameters. Grazie alla condivisione dei pesi, la convoluzione produce 64 mappe di caratteristiche a piena risoluzione con 1,792 parametri; il livello completamente connesso ne richiede 5,376 volte tanti per produrre solo 64 numeri.
Architetture CNN fondamentali#
- LeNet-5 (1998): La rete di Yann LeCun per leggere cifre scritte a mano ha definito lo schema di livelli convoluzionali e di pooling alternati, seguiti da livelli completamente connessi; è stata distribuita commercialmente per leggere gli assegni bancari.
- AlexNet (2012): Addestrata su due GPU con attivazioni ReLU e dropout, ha vinto la sfida ILSVRC 2012 con un errore di test top-5 del 15.3%, rispetto al 26.2% del secondo classificato.
- VGG (2014): Ha dimostrato che sovrapporre piccole convoluzioni 3×3 fino a una profondità di 16-19 livelli dotati di pesi migliora notevolmente la precisione su ImageNet.
- ResNet (2015): Le connessioni residue hanno reso possibile addestrare reti profonde fino a 152 livelli e un ensemble ResNet ha vinto ILSVRC 2015.
- U-Net (2015): Una CNN encoder-decoder con connessioni skip, diventata l'architettura standard per la segmentazione di immagini biomediche.
- ConvNeXt (2022): Una ResNet modernizzata con scelte progettuali dell'era dei transformer, che raggiunge una precisione top-1 dell'87.8% su ImageNet e supera Swin Transformer nel rilevamento su COCO.
Applicazioni delle CNN#
- Rilevamento di oggetti: I rilevatori CNN a uno stadio individuano e classificano gli oggetti in un unico passaggio in avanti, abbastanza rapidamente per i video acquisiti da telecamere, telefoni e schede embedded.
- Analisi delle immagini mediche: Le CNN basate su U-Net segmentano organi, tumori e lesioni nelle scansioni TC e RM, dove l'etichetta di ogni pixel è importante.
- Stima della posa: Le CNN prevedono i keypoint del corpo per l'analisi sportiva, l'ergonomia e le app per il fitness.
- Segnali oltre le immagini: Le convoluzioni unidimensionali elaborano forme d'onda audio e serie temporali dei sensori; le CNN bidimensionali classificano gli spettrogrammi nel riconoscimento vocale.
CNN e Vision Transformer#
Un vision transformer (ViT) suddivide un'immagine in patch e mette in relazione ogni patch con tutte le altre tramite la self-attention, ottenendo un contesto globale fin dal primo livello. Il suo bias induttivo più debole ha un costo: addestrato solo su ImageNet, il ViT originale era inferiore alle ResNet di dimensioni simili e le eguagliava o superava solo dopo un preaddestramento su 14-300 milioni di immagini. Il costo dell'attention cresce inoltre con il quadrato del numero di patch, rendendo costosi gli input ad alta risoluzione, mentre il costo di una convoluzione cresce solo in modo lineare con il numero di pixel. Molti modelli attuali combinano quindi le due tecniche, mantenendo gli stadi convoluzionali ad alta risoluzione e aggiungendo l'attention dove la mappa di caratteristiche è piccola. YOLO26 segue questo schema: i blocchi Conv (convoluzione, normalizzazione batch e SiLU) e i blocchi C3k2 svolgono la maggior parte del lavoro, mentre la self-attention multi-head opera solo sulla mappa di caratteristiche con stride 32, una griglia 20×20 per un'immagine 640×640.










