Migliorare la classificazione di immagini con la data augmentation in python
Articolo in lingua originale di Senaa
La data augmentation è una tecnica utilizzata nella computer vision e nel deep learning per aumentare la quantità e la diversità dei dati disponibili per l’addestramento di un modello. Questo articolo presenta una panoramica sull’incremento delle immagini e fornisce un tutorial su come eseguirlo in Python utilizzando la libreria Keras.preprocessing.image. L’articolo include anche una discussione sui vantaggi e sui limiti della data augmentation e fornisce suggerimenti su come utilizzarlo in modo efficace.
Negli ultimi anni, la computer vision e il deep learning hanno fatto passi da gigante nel classificare e rilevare con precisione gli oggetti nelle immagini. Uno dei fattori chiave che contribuiscono al successo di queste tecniche è la disponibilità di grandi e diversi set di dati per l’addestramento dei modelli. Tuttavia, la raccolta e l’annotazione di grandi insiemi di dati può richiedere tempo e denaro. È qui che entra in gioco la data augmentation.
L’aumento delle immagini è una tecnica utilizzata per aumentare artificialmente le dimensioni e la diversità di un set di dati di immagini applicando varie trasformazioni alle immagini esistenti. Queste trasformazioni possono includere la rotazione, il ridimensionamento, il ritaglio, il capovolgimento e la modifica della luminosità e del contrasto. Applicando queste trasformazioni, il dataset risultante diventa più vario e può aiutare il modello a generalizzare meglio.
In questo articolo forniremo una panoramica sulla data augmentation e dimostreremo come eseguire l’incremento delle immagini in Python utilizzando la libreria Keras.preprocessing.image. Discuteremo anche i vantaggi e i limiti della data augmentation e forniremo suggerimenti su come utilizzarla in modo efficace.
Panoramica della data augmentation delle immagini
L’aumento dei dati immagine è una tecnica utilizzata nel deep learning per generare nuove immagini applicando varie trasformazioni alle immagini esistenti. Queste trasformazioni possono includere trasformazioni geometriche come la rotazione, il ridimensionamento e il ritaglio, nonché trasformazioni del colore come la modifica della luminosità e del contrasto. L’obiettivo dell’aumento delle immagini dei dati è quello di aumentare la dimensione e la diversità del set di dati di addestramento, che può aiutare il modello a generalizzarsi meglio a nuove immagini non viste.
Uno dei vantaggi principali dell’aumento delle immagini è che può contribuire a ridurre l’overfitting. L’overfitting si verifica quando un modello impara ad adattarsi troppo bene ai dati di addestramento e non è in grado di generalizzare a nuovi dati non visti. Generando nuove immagini diverse, l’aumento dei dati può aiutare a evitare che il modello memorizzi il training set e apprenda invece caratteristiche più generali.
Tuttavia, è importante notare che la data augmentation deve essere usata con giudizio. L’applicazione di troppe trasformazioni può produrre immagini irrealistiche che non permettono al modello di generalizzare bene in presenza di nuovi dati. Inoltre, l’aumento delle immagini può talvolta portare a un overfitting se non viene utilizzato con attenzione.
Applicare la data augmentation sulle immagini in Python
In Python sono disponibili diverse librerie per eseguire la data augmentation. Una delle librerie più popolari è Keras.preprocessing.image. Questa libreria fornisce una comoda API per l’aumento delle immagini dei dati che può essere facilmente integrata con i modelli di deep learning costruiti con la libreria Keras.
Per aumentare il numero di immagini utilizzando Keras.preprocessing.image, si crea innanzitutto un oggetto ImageDataGenerator che definisce le trasformazioni da applicare alle immagini di input. Si utilizza quindi il metodo flow di ImageDataGenerator per generare al volo nuove immagini aumentate.
Ecco un esempio di come utilizzare Keras.preprocessing.image per applicare la data augmentation sulle immagini:
Innanzitutto importiamo e carichiamo le librerie necessarie ed il dataset.
import matplotlib.pyplot as plt import numpy as np import tensorflow as tf import tensorflow_datasets as tfds import PIL.Image from keras import layers import keras (train_ds, val_ds, test_ds), metadata = tfds.load( 'cats_vs_dogs', split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'], with_info=True, as_supervised=True, )
Ridimensionare l’immagine
Qui ridimensioniamo l’immagine utilizzando la funzione resize_and_rescale
Width_Height = 300 resize_and_rescale = keras.Sequential([ layers.Resizing(Width_Height, Width_Height), layers.Rescaling(1./255) ]) result = resize_and_rescale(image) plt.imshow(result);
Ruotare casualmente l’immagine: orizzontalmente e verticalmente
In questa parte ruotiamo l’immagine a caso utilizzando le funzioni RandomFlip e RandomRotation
data_augmentation = keras.Sequential([ layers.RandomFlip("horizontal_and_vertical"), layers.RandomRotation(0.4), ]) plt.figure(figsize=(8, 7)) for i in range(9): augmented_image = data_augmentation(image) ax = plt.subplot(3, 3, i + 1) plt.imshow(augmented_image.numpy()/255) plt.axis("off")
Aumento di immagini in bianco e nero
In questa parte cambiamo la scala di colore dell’immagine attraverso tf.image.rgb._to_grayscale
grayscaled = tf.image.rgb_to_grayscale(image) visualize(image, tf.squeeze(grayscaled))
Aumento delle immagini tagliandole
In questa parte tagliamo l’immagine attraverso la funzione tf.image.central_crop
cropped = tf.image.central_crop(image, central_fraction=0.3) visualize(image, cropped)
Aumento delle immagini attraverso la saturazione
In questa parte aggiustiamo la saturazione dell’immagine attraverso la funzione tf.image.adjust_saturation
saturated = tf.image.adjust_saturation(image, 3) visualize(image, saturated)
Modificare la luminosità in modo casuale
In questa parte modifichiamo la luminosità in modo casuale attraverso la funzione tf.image.stateless_random_brightness
for i in range(2): seed = (i, 0) # tuple of size (2,) stateless_random_brightness = tf.image.stateless_random_brightness( image, max_delta=0.5, seed=seed) visualize(image, stateless_random_brightness)
Conclusione
La data augmentation delle immagini è una tecnica potente utilizzata nella computer vision e nel deep learning per aumentare la quantità e la diversità dei dati disponibili per l’addestramento dei modelli. In questo articolo, abbiamo fornito una panoramica sull’incremento delle immagini e abbiamo dimostrato come eseguirlo in Python utilizzando la libreria `Keras.preprocessing.image`. Abbiamo anche discusso i vantaggi e i limiti dell’aumento delle immagini e abbiamo fornito suggerimenti su come usarlo in modo efficace. Applicando la data augmentation sulle immagini, possiamo generare nuove immagini diverse che possono aiutare i modelli a generalizzarsi meglio a nuovi dati non visti. Tuttavia, è importante usare l’aumento delle immagini dei dati con giudizio ed evitare l’overfitting generando troppe immagini irrealistiche. Con un uso attento, l’aumento delle immagini può essere un potente strumento per migliorare l’accuratezza dei modelli di computer vision.