Corso
Le reti neurali convoluzionali alimentano alcune delle capacità di IA più impressionanti di oggi, dal riconoscimento facciale sugli smartphone al rilevamento di tumori nell'imaging medico.
In questo tutorial, vedremo cosa sono le CNN, come funzionano, i loro componenti chiave, le strategie per contrastare l'overfitting e i framework più popolari per costruirle.
Per provare concretamente il deep learning, dai un'occhiata al corso Introduction to Deep Learning in Python di DataCamp.
TL;DR
- Una rete neurale convoluzionale (CNN) è un'architettura di deep learning pensata per compiti come classificazione di immagini, rilevamento di oggetti e segmentazione.
- Le CNN hanno quattro componenti chiave: livelli convoluzionali (estrazione di caratteristiche), funzioni di attivazione come ReLU (non linearità), livelli di pooling (riduzione dimensionale) e livelli completamente connessi (classificazione).
- Il loro design si ispira alla struttura gerarchica della corteccia visiva umana.
- L'overfitting è una sfida importante; tecniche come dropout, batch normalization, data augmentation ed early stopping aiutano a mitigarla.
- TensorFlow, PyTorch e Keras sono i framework più popolari per costruire CNN.
Che cos'è una rete neurale convoluzionale (CNN)?
Una Convolutional Neural Network (CNN), nota anche come ConvNet, è un tipo specializzato di algoritmo di deep learning progettato principalmente per compiti che richiedono il riconoscimento di oggetti, tra cui classificazione, rilevamento e segmentazione di immagini. Le CNN sono impiegate in numerosi scenari pratici, come veicoli autonomi, sistemi di telecamere di sicurezza e altro ancora.
L'importanza delle CNN
Ci sono diversi motivi per cui le CNN sono importanti nel mondo moderno, come evidenziato di seguito:
- Le CNN si distinguono dagli algoritmi di machine learning classici come gli SVM e gli alberi decisionali per la loro capacità di estrarre autonomamente caratteristiche su larga scala, evitando la necessità di feature engineering manuale e aumentando così l'efficienza.
- I livelli convoluzionali conferiscono alle CNN caratteristiche di invarianza alla traslazione, consentendo loro di identificare ed estrarre pattern e caratteristiche dai dati indipendentemente da variazioni di posizione, orientamento, scala o traslazione.
- Diverse architetture di CNN pre-addestrate, tra cui VGG-16, ResNet50, Inceptionv3 ed EfficientNet, hanno dimostrato prestazioni di alto livello. Questi modelli possono essere adattati a nuovi compiti con relativamente pochi dati tramite un processo noto come fine-tuning.
- Oltre ai compiti di classificazione di immagini, le CNN sono versatili e si possono applicare a molti altri domini, come l'elaborazione del linguaggio naturale, l'analisi di serie temporali e il riconoscimento vocale.
Ispirazione alla base delle CNN e paralleli con il sistema visivo umano
Le reti neurali convoluzionali sono state ispirate dall'architettura a strati della corteccia visiva umana, e di seguito trovi alcune somiglianze e differenze chiave:

Illustrazione della corrispondenza tra le aree associate alla corteccia visiva primaria e i livelli in una rete neurale convoluzionale (fonte)
- Architettura gerarchica: Sia le CNN che la corteccia visiva hanno una struttura gerarchica, con caratteristiche semplici estratte negli strati iniziali e caratteristiche più complesse costruite negli strati più profondi. Questo consente rappresentazioni via via più sofisticate degli input visivi.
- Connettività locale: I neuroni nella corteccia visiva si collegano solo a una regione locale dell'input, non all'intero campo visivo. Allo stesso modo, i neuroni in un livello di una CNN sono connessi solo a una regione locale del volume di input tramite l'operazione di convoluzione. Questa connettività locale consente efficienza.
- Invarianza alla traslazione: I neuroni della corteccia visiva possono rilevare caratteristiche indipendentemente dalla loro posizione nel campo visivo. I livelli di pooling in una CNN forniscono un certo grado di invarianza alla traslazione riassumendo le caratteristiche locali.
- Mappe di caratteristiche multiple: A ogni stadio dell'elaborazione visiva vengono estratte molte diverse mappe di caratteristiche. Le CNN imitano questo tramite mappe di filtri multiple in ciascun livello di convoluzione.
- Non linearità: I neuroni nella corteccia visiva mostrano proprietà di risposta non lineari. Le CNN ottengono la non linearità tramite funzioni di attivazione come ReLU applicate dopo ogni convoluzione.
Le CNN imitano il sistema visivo umano ma sono più semplici, prive dei suoi complessi meccanismi di feedback e basate sull'apprendimento supervisionato piuttosto che non supervisionato; nonostante queste differenze, hanno guidato i progressi nella computer vision.
Componenti chiave di una CNN
La rete neurale convoluzionale è composta da quattro parti principali.
Ma come imparano le CNN con queste parti?
Aiutano le CNN a imitare il funzionamento del cervello umano per riconoscere pattern e caratteristiche nelle immagini:
- Livelli di convoluzione
- Rectified Linear Unit (in breve ReLU)
- Livelli di pooling
- Livelli completamente connessi
Questa sezione approfondisce la definizione di ciascuno di questi componenti attraverso il seguente esempio di classificazione di una cifra scritta a mano.

Architettura delle CNN applicata al riconoscimento delle cifre (fonte)
Livelli di convoluzione
Questo è il primo mattone di una CNN. Come suggerisce il nome, l'operazione matematica principale è la convoluzione, ossia l'applicazione di una funzione a finestra scorrevole a una matrice di pixel che rappresenta un'immagine. La funzione scorrevole applicata alla matrice è chiamata kernel o filtro, e i due termini sono intercambiabili.
Nel livello di convoluzione si applicano diversi filtri di uguale dimensione, e ciascun filtro viene usato per riconoscere uno specifico pattern dall'immagine, come la curvatura delle cifre, i bordi, l'intera forma delle cifre e altro.
In parole semplici, nel livello di convoluzione usiamo piccole griglie (chiamate filtri o kernel) che scorrono sull'immagine. Ogni piccola griglia è come una mini lente d'ingrandimento che cerca pattern specifici nella foto, come linee, curve o forme. Mentre si muove sulla foto, crea una nuova griglia che evidenzia dove ha trovato questi pattern.
Per esempio, un filtro potrebbe essere bravo a trovare linee rette, un altro a trovare curve e così via. Usando più filtri diversi, la CNN può farsi un'idea completa di tutti i diversi pattern che compongono l'immagine.
Consideriamo questa immagine in scala di grigi 32x32 di una cifra scritta a mano. I valori nella matrice sono forniti a scopo illustrativo.

Illustrazione dell'immagine di input e della sua rappresentazione in pixel
Consideriamo anche il kernel usato per la convoluzione. È una matrice con dimensione 3x3. I pesi di ciascun elemento del kernel sono rappresentati nella griglia. I pesi zero sono rappresentati nelle celle nere e gli uno nella cella bianca.
Dobbiamo trovare manualmente questi pesi?
Nella pratica, i pesi dei kernel vengono determinati durante il processo di addestramento della rete neurale.
Usando queste due matrici, possiamo eseguire l'operazione di convoluzione applicando il prodotto scalare e procedendo come segue:
- Applica la matrice kernel dall'angolo in alto a sinistra verso destra.
- Esegui la moltiplicazione elemento per elemento.
- Somma i valori dei prodotti.
- Il valore risultante corrisponde al primo valore (angolo in alto a sinistra) nella matrice convoluta.
- Sposta il kernel verso il basso in base alla dimensione della finestra scorrevole.
- Ripeti i passaggi da 1 a 5 finché la matrice immagine non è completamente coperta.
La dimensione della matrice convoluta dipende dalla dimensione della finestra scorrevole. Più grande è la finestra, più piccola è la dimensione risultante.

Applicazione della convoluzione con stride 1 e kernel 3x3
Un altro nome associato al kernel in letteratura è feature detector, perché i pesi possono essere ottimizzati per rilevare caratteristiche specifiche nell'immagine di input.
Per esempio:
- Un kernel che fa la media dei pixel vicini può essere usato per sfocare l'immagine di input.
- Un kernel che sottrae i vicini è usato per eseguire il rilevamento dei bordi.
Più livelli di convoluzione ha la rete, meglio gli strati più profondi riescono a rilevare caratteristiche più astratte.
Funzione di attivazione
Dopo ogni operazione di convoluzione si applica una funzione di attivazione ReLU. Questa funzione aiuta la rete a imparare relazioni non lineari tra le caratteristiche nell'immagine, rendendo quindi la rete più robusta nel riconoscere pattern diversi. Inoltre, aiuta a mitigare il problema del vanishing gradient.
Livello di pooling
L'obiettivo del livello di pooling è estrarre le caratteristiche più significative dalla matrice convoluta. Questo avviene applicando operazioni di aggregazione che riducono la dimensione della feature map (matrice convoluta), riducendo così la memoria utilizzata durante l'addestramento della rete. Il pooling è rilevante anche per mitigare l'overfitting.
Le funzioni di aggregazione più comuni sono:
- Max pooling, che prende il valore massimo della feature map
- Sum pooling, che corrisponde alla somma di tutti i valori della feature map
- Average pooling, che è la media di tutti i valori.
Di seguito un'illustrazione di ciascuno dei precedenti esempi:

Applicazione del max pooling con stride 2 usando un filtro 2x2
Anche la dimensione della feature map diventa più piccola man mano che si applica la funzione di pooling.
L'ultimo livello di pooling appiattisce la sua feature map in modo che possa essere elaborata dal livello completamente connesso.
Livelli completamente connessi
Questi livelli si trovano nella parte finale della rete neurale convoluzionale, e i loro input corrispondono alla matrice monodimensionale appiattita generata dall'ultimo livello di pooling. Su di essi si applicano funzioni di attivazione ReLU per introdurre non linearità.
Infine, si usa un livello di predizione softmax per generare valori di probabilità per ciascuna delle possibili etichette di output, e l'etichetta finale prevista è quella con il punteggio di probabilità più alto.
Overfitting e regolarizzazione nelle CNN
L'overfitting è una sfida comune nei modelli di machine learning e nei progetti di deep learning con CNN. Accade quando il modello impara troppo bene i dati di addestramento ("imparare a memoria"), inclusi rumore e outlier. Un apprendimento del genere porta a un modello che va bene sui dati di training ma male su nuovi dati non visti.
Questo si osserva quando il modello raggiunge un'accuratezza significativamente più alta sui dati di addestramento rispetto ai dati di validazione o test, come illustrato graficamente di seguito:

Underfitting vs. Overfitting
I modelli di deep learning, in particolare le Convolutional Neural Networks (CNN), sono particolarmente suscettibili all'overfitting a causa della loro elevata complessità e della capacità di apprendere pattern dettagliati in dati su larga scala.
Si possono applicare diverse tecniche di regolarizzazione per mitigare l'overfitting nelle CNN, alcune delle quali sono illustrate di seguito:

7 strategie per mitigare l'overfitting nelle CNN
- Dropout: consiste nell'eliminare casualmente alcuni neuroni durante l'addestramento, il che costringe i neuroni restanti a imparare nuove caratteristiche dai dati di input.
- Batch normalization: L'overfitting viene ridotto in parte normalizzando il livello di input tramite l'aggiustamento e la scalatura delle attivazioni. Questo approccio è usato anche per accelerare e stabilizzare l'addestramento.
- Livelli di pooling: Si possono usare per ridurre le dimensioni spaziali dell'immagine di input e fornire al modello una rappresentazione più astratta, riducendo così la possibilità di overfitting.
- Early stopping: consiste nel monitorare costantemente le prestazioni del modello sui dati di validazione durante l'addestramento e interrompere l'addestramento quando l'errore di validazione non migliora più.
- Iniezione di rumore: consiste nell'aggiungere rumore agli input o agli output dei livelli nascosti durante l'addestramento per rendere il modello più robusto e prevenire una debole generalizzazione.
- Regolarizzazione L1 e L2: sia L1 che L2 aggiungono una penalità alla funzione di perdita in base all'ampiezza dei pesi. In particolare, L1 incoraggia pesi sparsi, favorendo una migliore selezione delle caratteristiche. L2 (chiamata anche weight decay) incoraggia pesi piccoli, impedendo che influenzino troppo le previsioni.
- Data augmentation: è il processo di aumentare artificialmente la dimensione e la diversità del dataset di addestramento applicando trasformazioni casuali come rotazione, scalatura, ribaltamento o ritaglio alle immagini di input.
Applicazioni pratiche delle CNN
Le reti neurali convoluzionali hanno rivoluzionato il campo della computer vision, portando a notevoli progressi in molte applicazioni reali. Ecco alcuni esempi di come vengono applicate.

Alcune applicazioni pratiche delle CNN
- Classificazione di immagini: Le reti neurali convoluzionali vengono usate per la categorizzazione delle immagini, in cui le immagini vengono assegnate a categorie predefinite. Un esempio è l'organizzazione automatica delle foto sulle piattaforme social.
- Rilevamento di oggetti: le CNN sono in grado di identificare e localizzare più oggetti all'interno di un'immagine. Questa capacità è cruciale in diversi scenari di scansione degli scaffali nel retail per identificare prodotti esauriti.
- Riconoscimento facciale: è anche uno dei principali ambiti di applicazione delle CNN. Per esempio, questa tecnologia può essere integrata nei sistemi di sicurezza per un controllo efficiente degli accessi basato su caratteristiche facciali.
Per un'implementazione più pratica, il nostro tutorial Convolutional Neural Networks (CNN) with TensorFlow insegna come costruire e implementare CNN in Python con TensorFlow 2.
Architetture CNN popolari
Negli anni, i ricercatori hanno sviluppato architetture CNN sempre più potenti. Ecco alcune tra le più influenti:
- LeNet-5 (1998): una delle prime CNN, progettata per il riconoscimento di cifre scritte a mano.
- AlexNet (2012): ha vinto la competizione ImageNet e ha reso popolari le CNN profonde con training su GPU.
- VGGNet (2014): ha dimostrato che reti più profonde con piccoli filtri 3x3 migliorano l'accuratezza.
- GoogLeNet/Inception (2014): ha introdotto i moduli inception con dimensioni di filtro parallele per l'estrazione di caratteristiche su più scale.
- ResNet (2015): ha introdotto le skip connection, consentendo l'addestramento di reti con oltre 100 livelli.
- EfficientNet (2019): ha usato il compound scaling per bilanciare profondità, ampiezza e risoluzione della rete.
- ConvNeXt (2022): un design CNN modernizzato che compete con i Vision Transformer.
Sebbene i Vision Transformer (ViT) siano emersi come valide alternative dal 2020, le CNN restano ampiamente utilizzate grazie all'efficienza, al minor fabbisogno di dati e alla maturità negli ambienti di produzione.
Framework di deep learning per le CNN
La rapida crescita del deep learning è dovuta principalmente a potenti framework come TensorFlow, PyTorch e Keras, che semplificano l'addestramento di reti neurali convoluzionali e altri modelli di deep learning.
Diamo una breve panoramica di ciascun framework.
TensorFlow
TensorFlow è un framework open-source per il deep learning sviluppato da Google e rilasciato nel 2015. Offre una gamma di strumenti per lo sviluppo e la distribuzione di soluzioni di machine learning. La nostra Introduction to Deep Neural Networks fornisce una guida completa per comprendere le reti neurali profonde e la loro importanza nel moderno mondo del deep learning nell'intelligenza artificiale, con implementazioni reali in TensorFlow.
Keras
Keras è un framework di alto livello per reti neurali in Python che consente sperimentazione e sviluppo rapidi. È open-source e funge da API ufficiale di alto livello di TensorFlow (dalla versione 2.0), semplificando lo sviluppo di modelli nell'ecosistema TensorFlow. Il nostro corso Image Processing with Keras in Python insegna come svolgere analisi di immagini con Keras in Python costruendo, addestrando e valutando reti neurali convoluzionali.
PyTorch
Rilasciato dal team Meta (ex Facebook) AI Research nel 2017, PyTorch è un framework di deep learning general-purpose noto per il grafo computazionale dinamico, la sintassi Pythonic e la forte comunità di ricerca. Se vuoi approfondire l'elaborazione del linguaggio naturale, la nostra guida NLP with PyTorch: A Comprehensive Guide è un ottimo punto di partenza.
Ogni progetto è diverso, quindi la scelta dipende davvero da quali caratteristiche sono più importanti per il caso d'uso. Per aiutarti a decidere meglio, la seguente tabella offre un breve confronto tra questi framework, evidenziandone le caratteristiche uniche.
Tensorflow | Pytorch | Keras | |
Livello API | Entrambi (Alto e Basso) | Basso | Alto |
Architettura | Non facile da usare | Sintassi Pythonic, intuitiva | Semplice, concisa, leggibile |
Dataset | Dataset grandi, alte prestazioni | Dataset grandi, alte prestazioni | Dataset più piccoli |
Debug | Debug difficile | Buone capacità di debug | Rete semplice, quindi spesso non serve il debug |
Modelli pre-addestrati? | Sì | Sì | Sì |
Popolarità | Secondo più popolare dei tre | Il più usato nella ricerca e sempre più in produzione | Integrato in TensorFlow come API ufficiale di alto livello |
Velocità | Veloce, alte prestazioni | Veloce, alte prestazioni | Come TensorFlow (gira sul backend TF) |
Scritto in | C++, CUDA, Python | C++, Python | Python |
Tabella comparativa tra Tensorflow, Pytorch e Keras (fonte)
Conclusione
Questo articolo ha fornito una panoramica completa su cosa sia una CNN nel deep learning e il loro ruolo cruciale nei compiti di riconoscimento e classificazione delle immagini.
È iniziato mettendo in evidenza l'ispirazione tratta dal sistema visivo umano per il design delle CNN e poi ha esplorato i componenti chiave che permettono a queste reti di apprendere e fare previsioni.
Il problema dell'overfitting è stato riconosciuto come una sfida significativa alla capacità di generalizzazione delle CNN. Per mitigarla, sono state descritte diverse strategie rilevanti per ridurre l'overfitting e migliorare le prestazioni complessive delle CNN.
Infine, sono stati menzionati alcuni tra i principali framework di deep learning per CNN, insieme alle caratteristiche uniche di ciascuno e a come si confrontano tra loro.
Desideri approfondire ancora il mondo dell'IA e del machine learning? Porta la tua competenza al livello successivo iscrivendoti oggi al corso Deep Learning with PyTorch.
Un data scientist poliedrico che ama condividere le proprie conoscenze e restituire valore agli altri, Zoumana è un content creator su YouTube e un top writer tech su Medium. Trova soddisfazione nel parlare in pubblico, programmare e insegnare. Zoumana ha due lauree magistrali: la prima in informatica con specializzazione in Machine Learning conseguita a Parigi, Francia, e la seconda in Data Science alla Texas Tech University negli Stati Uniti. Ha iniziato la sua carriera come Software Developer presso Groupe OPEN in Francia, per poi passare a IBM come Machine Learning Consultant, dove ha sviluppato soluzioni di IA end-to-end per compagnie assicurative. Successivamente, è entrato in Axionable, la prima startup di Sustainable AI con sede a Parigi e Montréal. Lì ha lavorato come Data Scientist e ha implementato prodotti di IA, principalmente casi d’uso di NLP, per clienti in Francia, Montréal, Singapore e Svizzera. Inoltre, ha dedicato il 5% del suo tempo ad attività di Ricerca e Sviluppo. Attualmente lavora come Senior Data Scientist presso IFC - World Bank Group.
FAQ sulle CNN
Qual è la differenza tra una CNN e una rete neurale regolare?
Una rete neurale regolare (completamente connessa) collega ogni neurone a ogni neurone nello strato successivo, il che diventa computazionalmente costoso con i dati di immagine. Una CNN usa livelli convoluzionali che applicano piccoli filtri a regioni locali dell'input, riducendo drasticamente il numero di parametri e preservando le relazioni spaziali. Questo rende le CNN molto più efficienti ed efficaci per i compiti legati alle immagini.
Quali sono le architetture CNN più comuni?
Le architetture CNN più influenti includono LeNet-5 (1998), AlexNet (2012), VGGNet (2014), ResNet (2015) ed EfficientNet (2019). Più recentemente, ConvNeXt (2022) ha modernizzato l'approccio CNN per competere con i Vision Transformer. Ogni architettura ha introdotto innovazioni chiave, come le skip connection (ResNet) o il compound scaling (EfficientNet).
Le CNN sono ancora rilevanti nel 2026?
Sì, le CNN sono ancora molto rilevanti nel 2026. Sebbene i Vision Transformer (ViT) abbiano guadagnato popolarità per alcuni compiti, le CNN sono ancora preferite in molte situazioni produttive grazie alla loro efficienza computazionale, alle buone prestazioni con dati di training limitati e a pipeline di deployment ben consolidate. Architetture moderne come ConvNeXt mostrano che le CNN possono eguagliare le prestazioni dei transformer quando si usano tecniche di training aggiornate.
Come scelgo tra TensorFlow, PyTorch e Keras per costruire CNN?
PyTorch è la scelta più popolare per la ricerca e il prototipaggio rapido grazie alla sintassi Pythonic e ai grafi di calcolo dinamici. TensorFlow eccelle nella messa in produzione con strumenti come TensorFlow Serving e TensorFlow Lite per mobile. Keras, ora integrato come API ufficiale di alto livello di TensorFlow, è ideale per chi inizia e vuole costruire e addestrare CNN con poco codice.
Qual è lo scopo dei livelli di pooling in una CNN?
I livelli di pooling riducono le dimensioni spaziali (altezza e larghezza) delle feature map mantenendo le informazioni più importanti. Questo serve a tre scopi: ridurre il costo computazionale diminuendo il numero di parametri, fornire un certo grado di invarianza alla traslazione (la capacità di riconoscere caratteristiche indipendentemente dalla loro posizione esatta) e aiutare a prevenire l'overfitting fornendo una rappresentazione più astratta dell'input.


