Les réseaux de neurones antagonistes génératifs
Objectif du chapitre
Ce chapitre aborde le sujet de la génération d’images réalistes avec les réseaux de neurones de type Generative Adversarial Networks ou GAN.
À la fin de ce chapitre, le lecteur aura abordé :
-
des généralités sur les GAN ;
-
l’installation d’un environnement de travail pour PyTorch ;
-
le chargement et la manipulation des images avec PyTorch et dans Google Colab ;
-
la réalisation des opérations de bases et des opérations avancées sur des images avec PyTorch ;
-
le développement de réseaux de neurones profonds de type Deep Learning avec PyTorch ;
-
le développement d’un modèle GAN avec PyTorch pour la génération d’images réalistes.
Avant de vous plonger dans la lecture de ce chapitre, il est impératif d’avoir une bonne compréhension des réseaux de neurones et d’être déjà habitué à programmer en Python.
Introduction au GAN
Les réseaux antagonistes génératifs, communément appelés GAN, représentent une avancée majeure dans le domaine de l’intelligence artificielle. Introduits en 2014 par Ian Goodfellow, un ex chercheur scientifique chez Google Brain, puis directeur des équipes Machine Learning chez Apple, les GAN ont ouvert de nouvelles perspectives pour la création de contenu généré artificiellement. En exploitant la puissance de deux réseaux neuronaux qui s’entraînent de manière compétitive, les GAN permettent de modéliser et de recréer des données complexes avec un réalisme impressionnant. Cette technologie se distingue par son adaptabilité et ses nombreuses applications, allant de la synthèse d’images à la production audio, en passant par la création de modèles 3D et l’amélioration de données existantes. Cependant, malgré leur potentiel indéniable, les GAN posent également des défis techniques et éthiques qui nécessitent une réflexion approfondie. Ce chapitre explore les bases conceptuelles et techniques des GAN, en offrant une vue d’ensemble sur leur importance croissante dans l’apprentissage profond, mais surtout, ce chapitre vous montre comment développer vos propres GAN avec vos données pour ainsi développer une intelligence artificielle générative complètement personnalisée pour la génération d’images réalistes.
1. Comprendre les différents types de modèles d’IA générative
Les modèles d’IA générative sont une catégorie particulière de modèles d’intelligence artificielle conçus pour produire de nouvelles données ressemblant à celles sur lesquelles ils ont été entraînés. Ces modèles se distinguent par leur capacité à apprendre les distributions complexes des données. Contrairement aux modèles discriminants, qui se concentrent sur la distinction entre les classes de données, les modèles génératifs apprennent une représentation probabiliste sous-jacente des données....
Fonctionnement des GAN
Lorsque nous parlons d’un GAN, il s’agit avant tout de réseaux de neurones. En ce sens que les objets manipulés sont des réseaux de neurones classiques du Deep Learning. La particularité d’un GAN réside dans le fait que lors de la phase d’entraînement, nous n’allons pas seulement entraîner un seul réseau de neurones, mais deux réseaux de neurones ! Bien sûr, il ne s’agit pas non plus d’entraîner deux réseaux de neurones indépendants l’un de l’autre, mais plutôt il s’agit d’entraîner deux réseaux de neurones dépendants. Justement, cette section est dédiée à l’explication de la boucle d’entraînement d’un GAN et des relations qui existent entre ses deux réseaux de neurones. Ainsi, nous allons étape par étape décortiquer le processus d’entraînement de GAN.
Comme nous l’avons déjà mentionné, un GAN est composé de deux réseaux de neurones. Le premier est le Discriminator qui est là pour dire si une image est réaliste ou pas et un deuxième réseau de neurones nommé le générateur dont le rôle est justement de générer des images. À partir de maintenant, nous allons désigner le réseau de neurones Discriminator par le Discriminator et le réseau de neurones générateur pour le Generator.
Avant d’aller plus loin et pour bien comprendre le fonctionnement du mécanisme d’apprentissage non supervisé des GAN, il est nécessaire de garder à l’esprit les trois points ci-après, qui sont de points simples, mais importants pour vous aider à visualiser les concepts qui seront abordés par la suite :
-
Le premier point consiste à savoir que le Discriminator est un réseau de neurones à convolution classique qui prend en entrée une image et qui retourne la probabilité que cette image soit une vraie image. Donc plus cette probabilité est élevée plus le Discriminator a confiance dans le fait que l’image en question est une vraie image et non pas une image générée par le Generator. A contrario, plus...
Mes premiers pas avec PyTorch
Pour illustrer les concepts et les applications des GAN dans ce chapitre, nous avons choisi d’utiliser PyTorch comme bibliothèque principale. Cette décision repose sur plusieurs arguments clés. Premièrement, PyTorch offre une grande flexibilité dans la définition et la manipulation des architectures de réseaux neuronaux, ce qui est particulièrement avantageux pour les expérimentations fréquentes requises par les GAN. Ensuite, PyTorch adopte une approche intuitive grâce à son API basée sur Python natif, rendant le code plus lisible et accessible aux développeurs professionnels, étudiants et chercheurs. En comparaison avec TensorFlow, utilisé dans le chapitre Le Deep Learning avec TensorFlow, PyTorch facilite le débogage en permettant une exécution dynamique des graphes computationnels. Enfin, PyTorch est devenu un standard dans la recherche sur l’apprentissage profond, avec une communauté active et un vaste éventail de ressources dédiées aux GAN. Cette transition vers PyTorch dans ce chapitre reflète ainsi un choix stratégique pour offrir un équilibre entre facilité d’utilisation, puissance et alignement avec les pratiques actuelles de la recherche, de plus, cela va nous permettre de diversifier les technologies explorées dans ce livre.
Pour les exemples pratiques de ce chapitre, nous avons opté pour Google Colab comme environnement de développement. Google Colab offre plusieurs avantages significatifs, en particulier pour l’utilisation de PyTorch et des GAN. Tout d’abord, il fournit un accès à des GPU, ce qui est essentiel pour l’entraînement des modèles GAN, connu pour leur forte demande en puissance de calcul. De plus, Google Colab est entièrement basé sur le cloud, permettant aux utilisateurs de travailler depuis n’importe quel appareil sans nécessiter une configuration matérielle spécifique. L’intégration native avec PyTorch facilite également l’importation des bibliothèques nécessaires et la gestion des dépendances. Enfin, son interface conviviale et ses fonctionnalités collaboratives permettent de partager et d’itérer facilement sur le code, en faisant...
Développer des réseaux de neurones avec PyTorch
Nous allons commencer par le développement d’un réseau de neurones convolutif de classification qui sait reconnaître et distinguer les vraies images des fausses images. Le but est toujours de se familiariser avec la bibliothèque PyTorch avant de développer notre GAN dans la section Générer des images réalistes avec un GAN. Nous allons voir comment entraîner un modèle à accepter les images qui sont très proches des vraies images d’une base de données de référence.
Nous devons d’abord préparer l’ensemble des données qui seront utilisées. Dans notre cas, nous allons utiliser les images contenues dans le dossier GAN qui accompagnent ce chapitre.
Commencez par le chargement du dossier GAN dans votre Google Drive, ou à défaut dans votre espace de travail. Ce dossier contient le fichier compressé anime_images.zip et le dossier Data. Le fichier compressé anime_images.zip sera utilisé lorsque nous allons développer notre GAN dans la section Générer des images réalistes avec un GAN et le dossier Data contient les quatre dossiers ci-après que nous utiliserons dans cette section même :
-
real_images : un ensemble d’images que nous considérerons comme de vraies images réalistes de référence.
-
bad_fake_images : un ensemble d’images générées par un réseau de neurones que nous allons considérer en tant que des images fakes, mais qui ne sont pas réalistes. C’est-à-dire des images que notre GAN ne devrait pas accepter.
-
good_fake_images : un ensemble d’images générées par un réseau de neurones que nous allons considérer aussi comme des images fakes mais qui sont suffisamment réalistes. C’est-à-dire des images que notre GAN devrait accepter.
Les images des trois dossiers ci-dessus seront utilisées dans l’exemple du code de cette section afin de montrer comment développer un réseau de neurones convolutif classique de classification. Ce réseau de neurones sera entraîné pour détecter si la classe, ou la catégorie, d’une image est la classe des vraies images...
Générer des images réalistes avec un GAN
Enfin nous sommes prêts pour entrer dans le vif du sujet, ainsi nous allons développer un GAN concret et complet. C’est-à-dire, que nous allons entraîner de manière incrémentale deux réseaux de neurones à savoir le réseau de neurones Discriminator et le réseau de neurones Generator. Le réseau de neurones Discriminator sera entraîné pour détecter les images fakes tandis que le Generator sera entraîné pour générer des images réalistes les plus proches possibles des vraies images. Cet entraînement suivra le processus que nous avons expliqué en détail dans la section Fonctionnement des GAN plus haut dans ce chapitre. Une fois que le processus d’entraînement mutuel des deux réseaux de neurones sera terminé, nous allons pouvoir utiliser le Generator pour générer des images réalistes et utiliser le Discriminator pour détecter les images fakes même si ces images fakes sont réalistes.
Pour développer notre exemple de GAN, suivez les étapes ci-dessous :
Dans votre espace Google Drive, déplacez les deux dossiers Real_images et good_fake_images du dossier où ils se trouvent actuellement à savoir le dossier datasets vers le dossier Data.
Déplacez le dossier images qui se trouve dans le dossier anime_images dans le dossier datasets. Attention, à la fin de ces opérations de déplacement de données, vous devriez n’avoir que le dossier images dans le dossier datasets.
Ouvrez le notebook 05.ipynb.
Voici l’explication du code de ce notebook :
La première cellule contient les directives d’import des bibliothèques, les instructions de connexion à votre espace Google Drive et l’instruction de configuration de la ressource GPU si elle est disponible sinon la ressource CPU.
import os
import random
import torch
import torchvision
import torch.nn as nn
import torch.optim as optim
import torch.utils.data
import torchvision.datasets as dset
import torchvision.transforms as transforms
from tqdm import tqdm
from torchvision import transforms
from torchvision.utils import save_image...Conclusion
Ce chapitre nous a permis d’aborder les réseaux de neurones de type GAN qui ont joué un rôle important dans le domaine de l’IA générative. Après avoir abordé quelques généralités, nous avons passé en revue toutes les étapes du processus d’apprentissage de GAN, puis nous avons abordé la bibliothèque PyTorch via Google Colab. Nous avons conclu ce chapitre par un exemple complet et concret de GAN.