1. Livres & vidéos
  2. Le deep learning avec TensorFlow/Keras
  3. Jeux de données avec des fichiers d'images
Extrait - Le deep learning avec TensorFlow/Keras 42 programmes Python pour passer de la théorie à la pratique
Extraits du livre
Le deep learning avec TensorFlow/Keras 42 programmes Python pour passer de la théorie à la pratique Revenir à la page d'achat du livre

Jeux de données avec des fichiers d'images

Manipulation des images avec TensorFlow/Keras

1. Codage et conversion des images

Comme nous l’avons vu au chapitre Programmation d’un perceptron multicouche, le format RGB est couramment utilisé pour coder les images couleur. Cette représentation correspond au fonctionnement des écrans, qui génèrent chaque pixel à partir de sources de lumière rouge, verte et bleue :

images/Ch07.1.1a.png

Principe de codage d’une image au format RGB

Il existe différents formats pour stocker des images RGB sur disque. Les fichiers non compressés comme BMP contiennent les matrices complètes de pixels. Ils conservent donc une qualité maximale, mais au détriment d’une taille souvent volumineuse.

Les formats compressés utilisent des algorithmes pour réduire la quantité d’informations mémorisées. On distingue ceux sans perte d’informations, comme PNG ou GIF, de ceux, à l’instar de JPEG, qui suppriment des éléments jugés non perceptibles par l’œil humain.

En mémoire, une image est généralement stockée sous la forme d’un objet PIL (défini par la bibliothèque Pillow), ou d’un tableau ndarray (module NumPy). TensorFlow met à disposition quatre fonctions de conversion entre ces représentations :

images/Ch07.1.1b.png

Fonctions de conversion entre les différentes...

Jeux de données du module tensorflow_datasets

images/telechargement.png Ch07_2-TFDS_Chifoumi-Installation.ipynb

1. Présentation du module

a. Catalogue de jeux de données

Tensorflow propose dans son écosystème l’accès à des collections de données, avec le module tensorflow_datasets. Il s’agit d’une bibliothèque complémentaire à TensorFlow, avec une documentation séparée, accessible en ligne à l’adresse : https://www.tensorflow.org/datasets.

images/Ch07.2.1.1a.png

Page d’accueil de la bibliothèque tensorflow_datasets

Le menu Catalog affiche sur la gauche de l’écran une liste avec toutes les catégories de jeux de données disponibles. Celles qui nous intéressent ici sont ’Image’ et ’Image classification’ :

images/Ch07.2.1.1b.png

Familles de jeux de données du module tensorflow_datasets

b. API intégrée au module

Le module met à disposition une API pour faciliter l’exploitation de ces collections de données :

images/Ch07.2.1.2a.png

API pour utiliser le module tensorflow_datasets

Trois fonctions seront utiles :

  • tfds.load() pour charger un dataset :

images/Ch07.2.1.2b.png
  • tfds.show_examples() pour visualiser des exemples d’images :

images/Ch07.2.1.2c.png
  • tfds.as_numpy() pour convertir un jeu de données TensorFlow en tableau(x) NumPy :

images/Ch07.2.1.2d_bis.png

2. Exemple du dataset « rock_paper_scissors »

a. Chargement du jeu de données

Un jeu de données nommé « rock_paper_scissors » est disponible dans la catégorie ’image classification’. Il est composé d’images de mains avec les trois figures classiques du Chifoumi : la pierre, la feuille et les ciseaux :

images/Ch07.2.2.1a.png

Figures « pierre - feuille - ciseaux » du jeu du Chifoumi

En interface anglaise, ce dataset est classé dans ’Image’ ; en interface française, il apparaît dans ’Image classification’.

Le notebook associé à cette section commence par l’importation du module tensorflow_datasets, qui est une bibliothèque distincte de TensorFlow :

import tensorflow_datasets as tfds 

L’installation du jeu de données sur la VM de Colab est réalisée avec l’instruction :

(ds_train_org, ds_valid_org), ds_info = tfds.load( 
                                        'rock_paper_scissors', ...

Exploitation d’objets Dataset par un modèle

1. Objectifs du programme

Le but du programme est d’exploiter les données de ds_train_org et ds_valid_org de la section précédente, pour entraîner et valider un modèle capable de reconnaître les figures « pierre », « feuille » ou « ciseaux » sur des images de mains.

Le réseau à utiliser possède l’architecture suivante :

images/Ch07.3.1.png

Modèle à convolution pour la classification des images de mains

Les différents paramètres sont initialisés au début du notebook :

# Caractéristiques du jeu de données 
NB_CLASSES = ds_info.features["label"].num_classes 
HT_IMG_ORG = ds_info.features["image"].shape[0] 
LG_IMG_ORG = ds_info.features["image"].shape[1] 
DIM_TRAIN  = ds_train_org.cardinality() 
 
# Optimisation de l'exploitation du tf.data.Dataset 
AUTOTUNE = tf.data.AUTOTUNE 
 
# Construction du modèle 
HT_IMG_EXP = 100  # hauteur des images en entrée 
LG_IMG_EXP = 100  # largeur des images en entrée 
NB_EPOQUES = 10   # durée de l'apprentissage 
TAILLE_LOT = 20   # taille des lots 

Comme présenté en introduction, il existe deux approches pour la préparation des données : modifier directement les Dataset (avec un pipeline) ou réaliser les prétraitements dans les premières couches du modèle.

2. Solution avec prétraitement sur le Dataset

images/telechargement.png Ch07_3.2-TFDS_Chifoumi-PreparationDonnees-v1.ipynb

Cette approche correspond au cheminement avec les cases blanches :

images/Ch07.3.2.0.png

Démarche d’exploitation des images avec prétraitement sur les Dataset

a. Mise en forme des images

Les images de notre dataset ont une résolution de 300×300 pixels codés avec des entiers sur l’intervalle [0..255]. Il faut les redimensionner à la dimension des entrées du modèle et normaliser leurs valeurs avec des réels entre 0 et 1.

Les dimensions (hauteur/largeur) des images sont stockées dans les variables HT_IMG_ORG et LG_IMG_ORG (ORG pour « origine ») et celles des entrées du modèle dans HT_IMG_EXP...

Exploitation directe de fichiers d’images

1. Origine des fichiers

Les sections précédentes étaient consacrées à l’exploitation des jeux de données disponibles dans le module tensorflow_datasets. Nous nous intéressons maintenant aux collections de fichiers d’images accessibles via la plateforme Kaggle ou directement depuis une adresse URL :

images/Ch07.4.1.png

Démarches pour exploiter des fichiers d’images avec Keras

Dans les deux cas, la démarche est la même. Les fichiers doivent d’abord être transférés sur un disque directement accessible par le programme. Cette étape est essentielle pour ensuite permettre une exploitation sous la forme d’objets tf.data.Dataset, identique à celle développée précédemment.

2. Jeux de données de la plateforme Kaggle

images/telechargement.png Ch07_4.2-Kaggle_Mammals-Installation.ipynb

a. Présentation de la plateforme

Kaggle (kaggle.com) est une plateforme collaborative pour la science des données et l’apprentissage automatique. Créée en 2010 par Anthony Goldbloom, puis rachetée en 2017 par Google, elle est maintenant reconnue mondialement comme un lieu d’émulation et de partage d’informations. Les membres de la communauté scientifique, les ingénieurs et plus généralement tous les passionnés y partagent toutes sortes d’informations et de résultats autour du Machine Learning.

L’onglet Datasets nous intéresse plus particulièrement, avec la mise à disposition de milliers de jeux de données prêts à l’emploi. Les rubriques ’classification’ et ’computer vision’ proposent une multitude de bases d’images idéales pour expérimenter et entraîner des modèles de deep learning. Les domaines d’application sont extrêmement variés avec des exemples aussi bien dans le diagnostic médical, que dans la classification d’espèces animales ou végétales ou encore la reconnaissance faciale :

images/Ch07.4.2.1.png

Nombreux jeux de données disponibles sur la plateforme Kaggle

Parmi les autres ressources disponibles, on trouve également de nombreuses formations interactives, une vaste collection d’exemples de code et de modèles...

Conclusion

L’objet de ce chapitre était de montrer comment exploiter avec TensorFlow/Keras des jeux de données archivés sur disque. Les solutions présentées sont indispensables pour pouvoir appliquer le deep learning sur des problèmes avec des images de grandes dimensions et des bases d’apprentissage composées de plusieurs dizaines, voire centaines de milliers d’exemples.

Les mécanismes de pipeline, disponibles dans TensorFlow, sont spécialement adaptés pour faire le lien entre un modèle développé sous Keras et une base d’entraînement avec des fichiers d’images. Ils simplifient considérablement l’écriture du code, tout en optimisant l’exploitation des ressources (mémoire, disque, processeur et GPU).

Après des rappels sur le codage et la manipulation des images, le module tensorflow_datasets a été présenté avec son catalogue de jeux de données. Pour les utiliser, il faut commencer par associer les images à des objets tf.data.Dataset. Ceux-ci servent ensuite à la création des pipelines qui alimentent les modèles pour l’apprentissage et les tests. Une collection de figures de mains au jeu du Chifoumi (pierre, feuille, ciseaux), a été choisie comme exemple pour illustrer le codage d’une solution.

La section suivante a été...