L'augmentació de dades és una tècnica essencial en l'aprenentatge automàtic, especialment en el camp de la visió per computador. Consisteix a generar noves mostres de dades a partir de les existents aplicant diverses transformacions. Això ajuda a millorar la generalització dels models i a reduir el sobreajustament (overfitting).
Objectius d'aquest tema
- Entendre què és l'augmentació de dades i per què és important.
- Aprendre les tècniques comunes d'augmentació de dades.
- Implementar augmentació de dades utilitzant TensorFlow.
Què és l'augmentació de dades?
L'augmentació de dades implica aplicar transformacions aleatòries a les dades d'entrenament per crear noves mostres. Aquestes transformacions poden incloure rotacions, translacions, canvis d'escala, reflexions, etc. L'objectiu és augmentar la diversitat del conjunt de dades d'entrenament sense necessitat de recollir noves dades.
Beneficis de l'augmentació de dades
- Millora la generalització: Ajuda el model a generalitzar millor a noves dades no vistes.
- Redueix el sobreajustament: En augmentar la diversitat del conjunt de dades, es redueix la probabilitat que el model s'ajusti massa a les dades d'entrenament.
- Augmenta la quantitat de dades: Genera noves mostres a partir de les existents, la qual cosa és especialment útil quan es disposa de poques dades.
Tècniques comunes d'augmentació de dades
A continuació es presenten algunes de les tècniques més comunes d'augmentació de dades:
- Rotació: Girar la imatge un cert nombre de graus.
- Translació: Desplaçar la imatge en una direcció determinada.
- Escalat: Canviar la mida de la imatge.
- Reflexió horitzontal/vertical: Reflectir la imatge al llarg de l'eix horitzontal o vertical.
- Tallat (cropping): Tallar una part de la imatge.
- Canvi de brillantor/contrast: Ajustar la brillantor o el contrast de la imatge.
- Soroll: Afegir soroll aleatori a la imatge.
Implementació d'augmentació de dades amb TensorFlow
TensorFlow proporciona diverses eines per implementar augmentació de dades de manera eficient. Utilitzarem tf.image
per aplicar transformacions a les imatges.
Exemple pràctic
A continuació es mostra un exemple pràctic d'augmentació de dades utilitzant TensorFlow:
import tensorflow as tf import matplotlib.pyplot as plt # Carregar una imatge d'exemple (image, label), _ = tf.keras.datasets.cifar10.load_data() image = image[0] # Funció per mostrar imatges def show_images(images): plt.figure(figsize=(10, 10)) for i, img in enumerate(images): plt.subplot(3, 3, i + 1) plt.imshow(img) plt.axis('off') plt.show() # Aplicar augmentació de dades def augment_image(image): image = tf.image.random_flip_left_right(image) image = tf.image.random_flip_up_down(image) image = tf.image.random_brightness(image, max_delta=0.1) image = tf.image.random_contrast(image, lower=0.9, upper=1.1) image = tf.image.random_saturation(image, lower=0.9, upper=1.1) image = tf.image.random_hue(image, max_delta=0.1) return image # Generar imatges augmentades augmented_images = [augment_image(image) for _ in range(9)] # Mostrar les imatges originals i augmentades show_images([image] + augmented_images)
Explicació del codi
- Carregar la imatge: Utilitzem el conjunt de dades CIFAR-10 per obtenir una imatge d'exemple.
- Funció per mostrar imatges: Definim una funció
show_images
per mostrar les imatges en una graella. - Funció d'augmentació: La funció
augment_image
aplica diverses transformacions aleatòries a la imatge. - Generar imatges augmentades: Generem diverses versions augmentades de la imatge original.
- Mostrar les imatges: Utilitzem la funció
show_images
per visualitzar les imatges originals i augmentades.
Exercici pràctic
Exercici 1: Augmentació de dades amb transformacions addicionals
Implementa una funció d'augmentació de dades que inclogui les següents transformacions addicionals:
- Rotació aleatòria
- Translació aleatòria
- Escalat aleatori
import tensorflow as tf import matplotlib.pyplot as plt # Carregar una imatge d'exemple (image, label), _ = tf.keras.datasets.cifar10.load_data() image = image[0] # Funció per mostrar imatges def show_images(images): plt.figure(figsize=(10, 10)) for i, img in enumerate(images): plt.subplot(3, 3, i + 1) plt.imshow(img) plt.axis('off') plt.show() # Funció d'augmentació amb transformacions addicionals def augment_image(image): image = tf.image.random_flip_left_right(image) image = tf.image.random_flip_up_down(image) image = tf.image.random_brightness(image, max_delta=0.1) image = tf.image.random_contrast(image, lower=0.9, upper=1.1) image = tf.image.random_saturation(image, lower=0.9, upper=1.1) image = tf.image.random_hue(image, max_delta=0.1) image = tf.image.rot90(image, k=tf.random.uniform(shape=[], minval=0, maxval=4, dtype=tf.int32)) image = tf.image.random_crop(image, size=[24, 24, 3]) image = tf.image.resize(image, [32, 32]) return image # Generar imatges augmentades augmented_images = [augment_image(image) for _ in range(9)] # Mostrar les imatges originals i augmentades show_images([image] + augmented_images)
Solució
La solució implementa les transformacions addicionals de rotació, translació i escalat. La funció tf.image.rot90
s'utilitza per rotar la imatge, tf.image.random_crop
per tallar una part de la imatge i tf.image.resize
per ajustar la mida de la imatge.
Resum
En aquest tema, hem après què és l'augmentació de dades, per què és important i com implementar-la utilitzant TensorFlow. Hem explorat diverses tècniques d'augmentació de dades i hem vist exemples pràctics de com aplicar-les. L'augmentació de dades és una eina poderosa per millorar la generalització dels models i reduir el sobreajustament.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres