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);
Immagine ridimensionata di gatto

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")
Immagini ruotate di gatto

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))
Immagine di gatto normale e con una scala diversa

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)
Immagine di gatto normale e ritagliata

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)
Immagine di gatto normale e saturata

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)
Immagini normali e aumentate di gatto

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.

Share:

Contenuti
Torna in alto