Come fa una macchina a vedere?

La vista, tra tutti, è il senso che più diamo per scontato. Ci permette di riconoscere oggetti, volti e dinamiche dell'ambiente circostante in una frazione di secondo. Ma cosa succede quando proviamo a insegnare questa capacità a un computer?
Nel campo del Deep Learning, questa materia prende il nome di Computer Vision e trova applicazione in ambiti rivoluzionari come la guida autonoma, la robotica, la medicina e l'accessibilità.
Ma come fa un computer a capire cosa si trova davanti?
Cosa vedono davvero i computer?
I computer non hanno gli occhi e non percepiscono i colori: vedono solo numeri.
È bene fare una distinzione tra due tipi di immagini:
• Immagini in bianco e nero: vengono rappresentate come una singola matrice bidimensionale (2D), in cui ogni numero corrisponde alla luminosità di un singolo pixel.
• Immagini a colori: per coprire lo spazio cromatico si utilizzano tre matrici 2D sovrapposte, una per ogni colore primario dello spettro RGB (Rosso, Verde, Blu), formando un volume tridimensionale.
Per risolvere i problemi visivi, gli algoritmi si dividono principalmente in due categorie: la regressione (quando l'output è un valore numerico continuo) e la classificazione (quando l'output è un vettore di probabilità che assegna l'immagine a una categoria).
Come funziona? Viene scomposta l'immagine
Se chiediamo a un essere umano come fa a riconoscere una persona, una macchina o una casa, la risposta sembrerà ovvia: una persona ha occhi e naso, una macchina ha le ruote, una casa ha le finestre.
Il nostro cervello individua caratteristiche di basso livello (bordi, linee) e le unisce per riconoscere strutture ad alto livello (oggetti complessi).
Il problema è che gli umani, rispetto a ciò che serve a una macchina, danno troppe cose per scontate. Definire matematicamente una "casa" a un computer è difficilissimo perché cambiano le dimensioni, le luci, le prospettive e centinaia di altre dinamiche.
Mentre in passato gli ingegneri dovevano programmare a mano gli algoritmi per descrivere ogni singola forma, oggi, grazie alle reti neurali, la macchina impara direttamente dai dati, completamente da sola.
Perché le reti tradizionali falliscono?
Se usassimo una rete completamente connessa (FCNN, ovvero Fully Connected Neural Network), dovremmo "schiacciare" l'immagine bidimensionale trasformandola in un unico lungo vettore di pixel. Questo approccio ha due enormi difetti:
1. Inefficienza: un'immagine da 100x100 pixel diventerebbe un vettore di 10.000 elementi, richiedendo troppi calcoli.
2. Perdita di informazioni: distruggerebbe completamente la struttura spaziale e geometrica dell'immagine (che ci serve per capire cosa rappresenta davvero; le posizioni degli elementi nello spazio sono essenziali).
Qui entrano in gioco le CNN (Convolutional Neural Networks)
Per non perdere la struttura spaziale, le reti convoluzionali utilizzano un approccio che imita la corteccia visiva umana: invece di guardare l'intera immagine contemporaneamente, analizzano piccole porzioni locali alla volta attraverso un filtro (o kernel).
Come funziona la convoluzione
Il filtro è una piccola matrice di pesi che fa una scansione dell'immagine scorrendo pixel dopo pixel, su porzioni della sua stessa dimensione. Questo passo di scorrimento si chiama stride:
• Stride = 1: massima sovrapposizione. Il filtro si sposta di un solo pixel, garantendo di non perdere nessun dettaglio posizionato a cavallo tra due aree.
• Stride = 2 o più: spostamenti più grandi. La scansione è più veloce ma rischia di tralasciare dettagli micro.
Durante la scansione, il filtro esegue una moltiplicazione elemento per elemento con la porzione di immagine che sta toccando, somma i risultati, aggiunge un valore di bias e applica una funzione di attivazione non lineare come la ReLU (g(z) = max(0, z)), che azzera i valori negativi e mantiene i positivi.
Il risultato finale di questo processo è la Feature Map, una nuova mappa che evidenzia esattamente dove si trova la caratteristica cercata nell'immagine (un bordo, una curva o una diagonale).
I pesi di questi filtri non vengono decisi dagli ingegneri, non vengono scritti a mano. Durante l'addestramento, la rete impara da sola quali numeri inserire nel filtro per identificare i pattern più utili al suo compito.
L'architettura a strati: dai bordi ai concetti astratti
In una CNN, i livelli (layer) sono ottimizzati per lavorare in profondità in una struttura a "volume". Man mano che ci si sposta verso l'interno della rete, avviene una magia:
1. Layer iniziali: i filtri imparano a riconoscere strutture semplicissime (linee verticali, orizzontali, contrasti di colore).
2. Layer intermedi: combinando le linee precedenti, i filtri iniziano a riconoscere forme geometriche, curve e angoli.
3. Layer profondi: le forme si uniscono per identificare concetti complessi e astratti (un occhio, una ruota, la texture del pelo).
Il ruolo del Pooling
Insieme alla convoluzione, si applica spesso il Pooling (solitamente Max Pooling), che serve a ridurre la risoluzione della feature map prendendo solo il valore più alto di una sotto-porzione.
Rimpicciolendo la matrice, il Pooling permette alla rete di "zoomare all'indietro". In questo modo i neuroni successivi smettono di concentrarsi sul "dove" esatto si trovi un singolo pixel e iniziano a capire "cosa" c'è in quella macro-regione, aumentando la capacità di generalizzazione del modello.
Una struttura, infinite applicazioni
La forza straordinaria delle CNN sta nella loro modularità. La rete è divisa in due blocchi: il Feature Extractor (che impara a "vedere" e capire l'immagine) e il Classifier (la parte finale che prende le decisioni).
Cambiando semplicemente la "testa" finale, la stessa rete può svolgere compiti completamente diversi.
Classificazione
• Domanda a cui risponde: "Che cos'è?"
• Output finale: probabilità per classe
• Esempio pratico: capire se in una foto c'è un cane o un gatto.
Object Detection
• Domanda a cui risponde: "Dove si trova?"
• Output finale: classe + coordinate spaziali (Bounding Box)
• Esempio pratico: la guida autonoma che individua pedoni e cartelli stradali in tempo reale (es. modelli YOLO).
Segmentazione
• Domanda a cui risponde: "Qual è la forma esatta?"
• Output finale: etichetta per singolo pixel
• Esempio pratico: isolare chirurgicamente l'area di un tumore in una risonanza magnetica.
Controllo (Regressione)
• Domanda a cui risponde: "Come devo agire?"
• Output finale: valore numerico continuo
• Esempio pratico: calcolare di quanti gradi girare il volante di un'auto in base alle condizioni della strada.
Grazie a questa flessibilità, oggi possiamo usare il Transfer Learning: prendere una rete che ha già imparato a "vedere" milioni di immagini generiche e adattarla in pochissimi minuti a un problema specifico, trasformando una macchina in un osservatore formidabile.
Se sei interessato ad altri dettagli, al seguente link puoi trovare un manuale molto più tecnico e approfondito sul funzionamento delle CNN.
Fonti: MiT OpenCourseWare, Introduction To Deep Learning. L’immagine è generata con Nano Banana 2 (Gemini).