Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Sfida: Costruzione di una CNN | Reti Neurali Convoluzionali
Fondamenti di Computer Vision
course content

Contenuti del Corso

Fondamenti di Computer Vision

Fondamenti di Computer Vision

1. Introduzione alla Computer Vision
2. Elaborazione delle Immagini con OpenCV
3. Reti Neurali Convoluzionali
4. Rilevamento Oggetti
5. Panoramica degli Argomenti Avanzati

book
Sfida: Costruzione di una CNN

Le reti neurali convoluzionali (CNN) sono ampiamente utilizzate nella classificazione delle immagini grazie alla loro capacità di estrarre caratteristiche gerarchiche. In questo esercizio, implementerai e addestrerai una CNN simile a VGG utilizzando TensorFlow e Keras sul dataset CIFAR-10. Il dataset è composto da 60.000 immagini (32×32×3) appartenenti a 10 classi differenti, tra cui aerei, automobili, uccelli, gatti e altro.

Questo progetto ti guiderà attraverso il caricamento del dataset, la preprocessazione delle immagini, la definizione del modello CNN, il suo addestramento e la valutazione delle prestazioni.

1. Preprocessazione dei dati per le CNN

Prima di addestrare una CNN, la preprocessazione dei dati è un passaggio fondamentale per garantire migliori prestazioni e una convergenza più rapida. I metodi di preprocessazione più comuni includono:

  • Normalizzazione: questo metodo consiste nello scalare i valori dei pixel delle immagini da un intervallo compreso tra 0 e 255 a un intervallo tra 0 e 1. Viene spesso implementato come x_train / 255.0, x_test / 255.0;

  • One-Hot Encoding: le etichette vengono spesso convertite in vettori one-hot encoded per i compiti di classificazione. Questo viene tipicamente eseguito tramite la funzione keras.utils.to_categorical, che trasforma le etichette intere (ad esempio, 0, 1, 2, ecc.) in un vettore one-hot encoded, come [1, 0, 0, 0] per un problema di classificazione a 4 classi.

2. Costruzione dell'architettura CNN

Un'architettura CNN è composta da diversi strati che svolgono compiti differenti per estrarre caratteristiche e generare previsioni. È possibile implementare i principali strati delle CNN tramite:

Strato convoluzionale (Conv2D)

Nota

Il parametro input_shape deve essere specificato solo nello strato di input.

Strato di Pooling (MaxPooling2D)

Strato di Flatten

Strato Denso

Nota

Lo strato denso finale di solito ha un numero di unità uguale al numero di classi e utilizza una funzione di attivazione softmax per restituire una distribuzione di probabilità tra le classi.

3. Compilazione del Modello

Dopo aver definito l'architettura, il modello deve essere compilato. Questo passaggio prevede la specifica della funzione di perdita, dell'ottimizzatore e delle metriche che guideranno il modello durante l'addestramento. I seguenti metodi sono comunemente utilizzati nelle CNN:

Ottimizzatore (Adam)

L'ottimizzatore regola i pesi del modello per minimizzare la funzione di perdita. L'ottimizzatore Adam è popolare per la sua efficienza e la capacità di adattare il tasso di apprendimento durante l'addestramento.

Funzione di perdita (Entropia incrociata categoriale)

Per la classificazione multiclasse, l'entropia incrociata categoriale è solitamente utilizzata come funzione di perdita. Può essere implementata come segue:

Metriche

Le prestazioni del modello vengono monitorate utilizzando metriche per compiti di classificazione, come accuratezza, precisione, richiamo, ecc. Queste possono essere definite come segue:

Compilazione

4. Addestramento del Modello

L'addestramento di una CNN consiste nell'inviare i dati di input alla rete, calcolare la perdita e aggiornare i pesi tramite backpropagation. Il processo di addestramento è gestito dai seguenti metodi principali:

  • Adattamento del Modello: il metodo fit() viene utilizzato per addestrare il modello. Questo metodo richiede i dati di addestramento, il numero di epoche e la dimensione del batch. Include anche una suddivisione di validazione opzionale per valutare le prestazioni del modello su dati non visti durante l'addestramento:

  • Dimensione del Batch ed Epoche: la dimensione del batch determina il numero di campioni elaborati prima di aggiornare i pesi del modello, mentre il numero di epoche indica quante volte l'intero dataset viene passato attraverso il modello.

5. Valutazione

Classification Report

sklearn.metrics.classification_report() confronta i valori veri e predetti dal dataset di test. Include precisione, richiamo e F1 score per ciascuna classe. Tuttavia, i metodi richiedono solo le etichette di classe, quindi ricordarsi di convertirle nuovamente dai vettori ([0,0,1,0] -> 2):

Valutazione

Una volta che il modello è stato addestrato, viene valutato sul dataset di test per verificarne la capacità di generalizzazione. La valutazione fornisce metriche, che sono state menzionate nel metodo .compile(). La valutazione viene eseguita utilizzando .evaluate():

Matrice di Confusione

Per ottenere ulteriori informazioni sulle prestazioni del modello, è possibile visualizzare la matrice di confusione, che mostra le predizioni di veri positivi, falsi positivi, veri negativi e falsi negativi per ciascuna classe. La matrice di confusione può essere calcolata utilizzando TensorFlow:

Questa matrice può quindi essere visualizzata utilizzando heatmap per osservare quanto bene il modello si comporta su ciascuna classe:

1. Caricamento e preprocessamento del dataset

  • Importazione del dataset CIFAR-10 da Keras;

  • Normalizzazione dei valori dei pixel nell'intervallo [0,1] per una migliore convergenza;

  • Conversione delle etichette di classe in formato one-hot encoded per la classificazione categoriale.

2. Definizione del modello CNN

Implementazione di un'architettura CNN simile a VGG con i seguenti strati principali: VGG like architecture

Strati convoluzionali:

  • Dimensione kernel: 3×3;

  • Funzione di attivazione: ReLU;

  • Padding: 'same'.

Strati di pooling:

  • Tipo di pooling: max pooling;

  • Dimensione pooling: 2×2.

Strati di dropout (Prevengono l'overfitting disabilitando casualmente i neuroni):

  • Tasso di dropout: 25%.

Strato di flatten - converte le mappe di caratteristiche 2D in un vettore 1D per la classificazione.

Strati completamente connessi - strati densi per la classificazione finale, con uno strato di output relu o softmax.

Compilazione del modello utilizzando:

  • Adam optimizer (per un apprendimento efficiente);

  • Funzione di perdita Categorical cross-entropy (per classificazione multi-classe);

  • Accuracy metric per misurare le prestazioni (le classi sono bilanciate, puoi aggiungere altre metriche a tua discrezione).

3. Addestramento del modello

  • Specificare i parametri epochs e batch_size per l'addestramento (ad es. epochs=20, batch_size=64);

  • Specificare il parametro validation_split per definire la percentuale di dati di training che diventa di validazione per monitorare le prestazioni del modello su immagini non viste;

  • Salvare la cronologia dell'addestramento per visualizzare andamento di accuratezza e perdita.

4. Valutazione e visualizzazione dei risultati

  • Testare il modello sui dati di test CIFAR-10 e stampare l'accuratezza;

  • Tracciare training loss vs. validation loss per verificare l'overfitting;

  • Tracciare training accuracy vs. validation accuracy per assicurare la progressione dell'apprendimento.

PROGETTO CNN COLAB

question-icon

Inserisci le parti della chiave (Le hai ricevute dopo aver completato il progetto)

1.  2.  3.  4.  5.
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 7

Chieda ad AI

expand
ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

course content

Contenuti del Corso

Fondamenti di Computer Vision

Fondamenti di Computer Vision

1. Introduzione alla Computer Vision
2. Elaborazione delle Immagini con OpenCV
3. Reti Neurali Convoluzionali
4. Rilevamento Oggetti
5. Panoramica degli Argomenti Avanzati

book
Sfida: Costruzione di una CNN

Le reti neurali convoluzionali (CNN) sono ampiamente utilizzate nella classificazione delle immagini grazie alla loro capacità di estrarre caratteristiche gerarchiche. In questo esercizio, implementerai e addestrerai una CNN simile a VGG utilizzando TensorFlow e Keras sul dataset CIFAR-10. Il dataset è composto da 60.000 immagini (32×32×3) appartenenti a 10 classi differenti, tra cui aerei, automobili, uccelli, gatti e altro.

Questo progetto ti guiderà attraverso il caricamento del dataset, la preprocessazione delle immagini, la definizione del modello CNN, il suo addestramento e la valutazione delle prestazioni.

1. Preprocessazione dei dati per le CNN

Prima di addestrare una CNN, la preprocessazione dei dati è un passaggio fondamentale per garantire migliori prestazioni e una convergenza più rapida. I metodi di preprocessazione più comuni includono:

  • Normalizzazione: questo metodo consiste nello scalare i valori dei pixel delle immagini da un intervallo compreso tra 0 e 255 a un intervallo tra 0 e 1. Viene spesso implementato come x_train / 255.0, x_test / 255.0;

  • One-Hot Encoding: le etichette vengono spesso convertite in vettori one-hot encoded per i compiti di classificazione. Questo viene tipicamente eseguito tramite la funzione keras.utils.to_categorical, che trasforma le etichette intere (ad esempio, 0, 1, 2, ecc.) in un vettore one-hot encoded, come [1, 0, 0, 0] per un problema di classificazione a 4 classi.

2. Costruzione dell'architettura CNN

Un'architettura CNN è composta da diversi strati che svolgono compiti differenti per estrarre caratteristiche e generare previsioni. È possibile implementare i principali strati delle CNN tramite:

Strato convoluzionale (Conv2D)

Nota

Il parametro input_shape deve essere specificato solo nello strato di input.

Strato di Pooling (MaxPooling2D)

Strato di Flatten

Strato Denso

Nota

Lo strato denso finale di solito ha un numero di unità uguale al numero di classi e utilizza una funzione di attivazione softmax per restituire una distribuzione di probabilità tra le classi.

3. Compilazione del Modello

Dopo aver definito l'architettura, il modello deve essere compilato. Questo passaggio prevede la specifica della funzione di perdita, dell'ottimizzatore e delle metriche che guideranno il modello durante l'addestramento. I seguenti metodi sono comunemente utilizzati nelle CNN:

Ottimizzatore (Adam)

L'ottimizzatore regola i pesi del modello per minimizzare la funzione di perdita. L'ottimizzatore Adam è popolare per la sua efficienza e la capacità di adattare il tasso di apprendimento durante l'addestramento.

Funzione di perdita (Entropia incrociata categoriale)

Per la classificazione multiclasse, l'entropia incrociata categoriale è solitamente utilizzata come funzione di perdita. Può essere implementata come segue:

Metriche

Le prestazioni del modello vengono monitorate utilizzando metriche per compiti di classificazione, come accuratezza, precisione, richiamo, ecc. Queste possono essere definite come segue:

Compilazione

4. Addestramento del Modello

L'addestramento di una CNN consiste nell'inviare i dati di input alla rete, calcolare la perdita e aggiornare i pesi tramite backpropagation. Il processo di addestramento è gestito dai seguenti metodi principali:

  • Adattamento del Modello: il metodo fit() viene utilizzato per addestrare il modello. Questo metodo richiede i dati di addestramento, il numero di epoche e la dimensione del batch. Include anche una suddivisione di validazione opzionale per valutare le prestazioni del modello su dati non visti durante l'addestramento:

  • Dimensione del Batch ed Epoche: la dimensione del batch determina il numero di campioni elaborati prima di aggiornare i pesi del modello, mentre il numero di epoche indica quante volte l'intero dataset viene passato attraverso il modello.

5. Valutazione

Classification Report

sklearn.metrics.classification_report() confronta i valori veri e predetti dal dataset di test. Include precisione, richiamo e F1 score per ciascuna classe. Tuttavia, i metodi richiedono solo le etichette di classe, quindi ricordarsi di convertirle nuovamente dai vettori ([0,0,1,0] -> 2):

Valutazione

Una volta che il modello è stato addestrato, viene valutato sul dataset di test per verificarne la capacità di generalizzazione. La valutazione fornisce metriche, che sono state menzionate nel metodo .compile(). La valutazione viene eseguita utilizzando .evaluate():

Matrice di Confusione

Per ottenere ulteriori informazioni sulle prestazioni del modello, è possibile visualizzare la matrice di confusione, che mostra le predizioni di veri positivi, falsi positivi, veri negativi e falsi negativi per ciascuna classe. La matrice di confusione può essere calcolata utilizzando TensorFlow:

Questa matrice può quindi essere visualizzata utilizzando heatmap per osservare quanto bene il modello si comporta su ciascuna classe:

1. Caricamento e preprocessamento del dataset

  • Importazione del dataset CIFAR-10 da Keras;

  • Normalizzazione dei valori dei pixel nell'intervallo [0,1] per una migliore convergenza;

  • Conversione delle etichette di classe in formato one-hot encoded per la classificazione categoriale.

2. Definizione del modello CNN

Implementazione di un'architettura CNN simile a VGG con i seguenti strati principali: VGG like architecture

Strati convoluzionali:

  • Dimensione kernel: 3×3;

  • Funzione di attivazione: ReLU;

  • Padding: 'same'.

Strati di pooling:

  • Tipo di pooling: max pooling;

  • Dimensione pooling: 2×2.

Strati di dropout (Prevengono l'overfitting disabilitando casualmente i neuroni):

  • Tasso di dropout: 25%.

Strato di flatten - converte le mappe di caratteristiche 2D in un vettore 1D per la classificazione.

Strati completamente connessi - strati densi per la classificazione finale, con uno strato di output relu o softmax.

Compilazione del modello utilizzando:

  • Adam optimizer (per un apprendimento efficiente);

  • Funzione di perdita Categorical cross-entropy (per classificazione multi-classe);

  • Accuracy metric per misurare le prestazioni (le classi sono bilanciate, puoi aggiungere altre metriche a tua discrezione).

3. Addestramento del modello

  • Specificare i parametri epochs e batch_size per l'addestramento (ad es. epochs=20, batch_size=64);

  • Specificare il parametro validation_split per definire la percentuale di dati di training che diventa di validazione per monitorare le prestazioni del modello su immagini non viste;

  • Salvare la cronologia dell'addestramento per visualizzare andamento di accuratezza e perdita.

4. Valutazione e visualizzazione dei risultati

  • Testare il modello sui dati di test CIFAR-10 e stampare l'accuratezza;

  • Tracciare training loss vs. validation loss per verificare l'overfitting;

  • Tracciare training accuracy vs. validation accuracy per assicurare la progressione dell'apprendimento.

PROGETTO CNN COLAB

question-icon

Inserisci le parti della chiave (Le hai ricevute dopo aver completato il progetto)

1.  2.  3.  4.  5.
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 7
Siamo spiacenti che qualcosa sia andato storto. Cosa è successo?
some-alt