Image augmentation

Les bénéfices de la data augmentation ne sont pas discutés ici tant il sont évidents lorsque le jeu de données est insuffisant.

Il existe une librairie Python spécialisée dans l’image augmentation : imgaug. Cette librairie est très complète.

TensorFlow a aussi, en natif, des fonctions d’augmentation dans le module tf.image.

Il y a, pour simplifier, deux façons de faire de l’augmentation d’image, soit en preprocessing, soit online.

Dans le 1er cas, on augmente le jeu de données, dans le 2nd cas, les opérations de transformation se font lors de l’apprentissage. C’est cette solution qui est préférée par Tensorflow.

Le code suivant montre un exemple de data augmentation sur des images avec imgaug.

from imgaug import augmenters as iaa
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import tensorflow_datasets as tfds
seq = iaa.Sequential([
    iaa.Crop(px=(0, 4)), # crop images from each side by 0 to 4px (randomly chosen)
    iaa.Fliplr(0.5), # horizontally flip 50% of the images
    iaa.GaussianBlur(sigma=(0, 3.0)) # blur images with a sigma of 0 to 3.0
])
def augment_batch(image):

    def augment_image(image):
        return seq.augment(images=image.numpy())

    image = tf.cast(image, tf.uint8)
    image = tf.py_function(augment_image, [image], tf.uint8)
    return image

# Create a dataset and apply the augmentation.
image = tf.random.uniform((1, 10, 10, 1), minval=0, maxval=100, dtype=tf.float32)
dataset = tf.data.Dataset.from_tensor_slices((image))
#dataset = dataset.batch(2)
dataset = dataset.map(augment_batch)

Le suivant est un exemple avec Tf.