Dans le cas d’images multi-label il faut être astucieux avec Keras.
Lire à ce sujet : A simple trick about multi-label image classification with ImageDataGenerator in Keras et aussi How to manually specify class labels in keras flow_from_directory?
Dans les cas d’apprentissage supervisé, multi-classe les répertoires de stockage des données définissent l’organisation des données.
CodeExplication du Code
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
import tensorflow as tf
import PIL.Image
Tout d’abord on définit les augmentations à effectuer.
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
Exemple avec une image.
image_path = tf.keras.utils.get_file("cat.jpg", "https://storage.googleapis.com/download.tensorflow.org/example_images/320px-Felis_catus-cat_on_snow.jpg")
PIL.Image.open(image_path)
image_string=tf.io.read_file(image_path)
image=tf.image.decode_jpeg(image_string,channels=3)
image.shape
TensorShape([213, 320, 3])
img = tf.expand_dims(image, 0)
i = 0
for batch in datagen.flow(img, batch_size=1, save_to_dir='.', save_prefix='cat', save_format='jpeg'):
i += 1
if i > 20:
break # otherwise the generator would loop indefinitely
!ls -al
total 280
drwxr-xr-x 1 root root 4096 May 27 17:31 .
drwxr-xr-x 1 root root 4096 May 27 17:29 ..
-rw-r--r-- 1 root root 11505 May 27 17:31 cat_0_1217.jpeg
-rw-r--r-- 1 root root 10779 May 27 17:31 cat_0_1807.jpeg
-rw-r--r-- 1 root root 11573 May 27 17:31 cat_0_2549.jpeg
-rw-r--r-- 1 root root 11113 May 27 17:31 cat_0_2916.jpeg
-rw-r--r-- 1 root root 12403 May 27 17:31 cat_0_2961.jpeg
-rw-r--r-- 1 root root 11183 May 27 17:31 cat_0_3303.jpeg
-rw-r--r-- 1 root root 11813 May 27 17:31 cat_0_3464.jpeg
-rw-r--r-- 1 root root 11906 May 27 17:31 cat_0_3562.jpeg
-rw-r--r-- 1 root root 11253 May 27 17:31 cat_0_3869.jpeg
-rw-r--r-- 1 root root 12114 May 27 17:31 cat_0_4343.jpeg
-rw-r--r-- 1 root root 11860 May 27 17:31 cat_0_4669.jpeg
-rw-r--r-- 1 root root 12070 May 27 17:31 cat_0_4956.jpeg
-rw-r--r-- 1 root root 12104 May 27 17:31 cat_0_5296.jpeg
-rw-r--r-- 1 root root 12116 May 27 17:31 cat_0_6003.jpeg
-rw-r--r-- 1 root root 10763 May 27 17:31 cat_0_7401.jpeg
-rw-r--r-- 1 root root 11530 May 27 17:31 cat_0_7717.jpeg
-rw-r--r-- 1 root root 12346 May 27 17:31 cat_0_7784.jpeg
-rw-r--r-- 1 root root 11956 May 27 17:31 cat_0_9652.jpeg
-rw-r--r-- 1 root root 12004 May 27 17:31 cat_0_9658.jpeg
-rw-r--r-- 1 root root 12306 May 27 17:31 cat_0_9772.jpeg
-rw-r--r-- 1 root root 11180 May 27 17:31 cat_0_9851.jpeg
drwxr-xr-x 1 root root 4096 May 20 16:14 .config
drwxr-xr-x 1 root root 4096 May 13 16:29 sample_data
PIL.Image.open("cat_0_1217.jpeg")
PIL.Image.open("cat_0_2549.jpeg")
PIL.Image.open("cat_0_2916.jpeg")
PIL.Image.open("cat_0_9851.jpeg")