30 août 2022

Applications potentielles des modèles de diffusion discrète

Les contributeurs
Bert Christiaens
Ingénieur en machine learning
Aucun élément trouvé.
S'abonner à la newsletter
Partager cet article

Introduction

Dans ce billet, nous examinerons les applications de l'utilisation de VQGAN combinée avec les modèles de diffusion par absorption discrète de l'incroyable article :

Libérer les transformateurs : Prédiction parallèle de jetons avec diffusion absorbante discrète pour la génération rapide d'images à haute résolution à partir de codes quantifiés en vecteur.

Si vous êtes curieux de connaître les techniques astucieuses qui ont rendu cela possible, l'article lui-même et notre article de blog technique vous intéresseront certainement ! Dans le billet de blog technique, nous avons donné un aperçu des modèles génératifs SOTA précédents, pour ensuite arriver à une nouvelle classe de modèles, les modèles de diffusion. Nous avons approfondi l'architecture des modèles de diffusion à absorption discrète. Dans ce billet, nous prendrons un peu de recul et nous verrons comment nous pouvons exploiter les caractéristiques de ce modèle à des fins créatives.

Récapitulation de l'article de blog technique

Dans le billet techniqueI, nous avons discuté de deux modèles :

  • VQGAN, un modèle qui représente les données dans une grille 16x16 de codes latents discrets et qui est capable de les décoder dans l'espace image.
  • le modèle de diffusion par absorption discrète, un modèle de transformation qui apprend quelles combinaisons de codes latents discrets donnent des images réalistes et cohérentes

Dans le billet technique, nous avons vu qu'un modèle de diffusion discrète ne génère pas ces codes latents de gauche à droite, comme un modèle autorégressif, mais peut les générer dans un ordre aléatoire.

Génération de codes latents sans ordre

Cet échantillonnage désordonné et bidirectionnel nous permet d'utiliser de nouvelles techniques pour éditer et générer des images:

  • Génération d'images à partir de zéro
  • Génération d'images conditionnelles
  • Incrustation d'image
  • Assemblage d'images
  • Générer des images plus grandes

Génération d'images à partir de zéro

Comme dans la plupart des modèles génératifs, nous pouvons générer des images à partir de zéro. Le modèle de diffusion commence par une grille vide de 1I6x16, désignée par les jetons MASK, et génère itérativement des jetons pour remplir la grille. Une fois que chaque code est généré, le décodeur VQGAN utilise ces codes générés pour créer des images globalement cohérentes et compétitives par rapport à d'autres modèles génératifs.

Visages générés à partir de zéro par échantillonnage à partir d'un modèle de diffusion discrète entraîné sur l'ensemble de données FFHQ
Églises générées à partir de zéro par échantillonnage à partir d'un modèle de diffusion discret entraîné sur l'ensemble de données d'églises LSUN

Génération d'images conditionnelles

Parlons maintenant de la génération conditionnelle d'images. C'est une façon élégante de dire que nous choisissons une partie de l'image pour orienter la génération du reste de l'image.

Avec les modèles autorégressifs existants, il est possible d'utiliser la génération conditionnelle d'images sur la base d'une image partielle. L'idée est ici de donner au modèle la partie supérieure d'une image comme contexte, puis de compléter le contenu en prédisant les pixels suivants un par un, de haut en bas et de gauche à droite. Au lieu de prédire des pixels, nous pourrions également prédire des codes discrets de manière unidirectionnelle, une idée qui a été explorée dans l'article : Apprivoiser les transformateurs pour la synthèse d'images à haute résolution.

Impressionnant, non ? Cependant, il n'est possible de conditionner que la partie supérieure d'une image, en raison de la nature unidirectionnelle des modèles autorégressifs.

Prédiction unidirectionnelle dans les modèles autorégressifs

C'est là que notre modèle de diffusion peut faire mieux ! Nous pouvons coder une image avec le codeur VQGAN, ce qui nous donne une grille de variables latentes. Nous choisissons ensuite les parties de l'image que nous voulons conserver et laissons le modèle générer tout ce qui l'entoure.

Il s'agit d'une amélioration considérable de la flexibilité par rapport aux modèles autorégressifs, puisque nous ne sommes plus limités à des parties spécifiques d'une image. À titre de démonstration, dans la figure suivante, nous voulons conserver la tour au milieu avec différents arrière-plans générés. Nous conservons les codes de la région centrale 🏯, remplaçons les autres codes par la valeur MASK et demandons au modèle de générer plusieurs nouvelles images.

À gauche : image générée avec une région fixe au milieu. À droite : image générée complète

Comme vous pouvez le voir, le contenu et la structure de la région centrale restent fixes la plupart du temps, ne s'adaptant que légèrement pour mieux correspondre aux pixels environnants. C'est génial de dire au modèle ce qu'il doit faire 😎 !

Régénération des régions de l'image (inpainting)

De manière similaire à la génération d'images conditionnelles, nous pouvons également effectuer un inpainting d'image 🎨🖌.

Supposons que nous générions une image et que nous en aimions la majeure partie, à l'exception d'une région qui ne nous semble pas tout à fait correcte. Pas de problème, nous pouvons simplement masquer les codes latents de la grille qui correspondent à cette région indésirable et laisser le modèle de diffusion les régénérer. Pour montrer comment cela fonctionne, générons de nouvelles bouches ! En régénérant ces codes plusieurs fois, nous pouvons obtenir de nombreuses variations.

Régénération d'une région de l'image en gardant le reste du contenu fixe

Très cool ! Nous obtenons 9 nouvelles images avec exactement les mêmes cheveux, les mêmes yeux et le même fond mais avec des bouches complètement différentes 👄 .

Assemblage d'images

C'est maintenant que les choses sérieuses commencent. En raison de la structure en grille de l'espace latent du VQGAN, les codes appris par le VQGAN sont fortement corrélés spatialement au contenu des images générées. Cela signifie que les codes latents qui correspondent à la région des yeux d'un visage généré contiendront des informations sur les yeux.

D'accord, mais maintenant quoi ? Prenons les codes latents des 👀 de l'image A et les codes des 👄 de l'image B. Plaçons-les dans une grille, masquons tous les autres tokens et laissons notre modèle de diffusion faire ce qu'il sait faire de mieux.

Les variables latentes correspondant à la bouche et aux yeux sont extraites des visages de gauche et placées dans une grille vide contenant des jetons masqués. Les jetons masqués sont prédits par le modèle de diffusion et décodés dans le visage de droite.

Nous constatons que le modèle de diffusion a bien rempli les régions masquées pour créer un visage cohérent tout en restant fidèle à l'aspect original de la bouche et des yeux.

Comparaison des régions de l'œil et de la bouche dans les images source (à gauche) et générée (à droite).

Soyons créatifs et appliquons cette idée à un modèle formé sur les églises. Le pape veut que vous construisiez une nouvelle église et il aime particulièrement la base de la célèbre Notre-Dame de Paris et la tour de la magnifique cathédrale Sint-Baafs de Gand. Pas de problème, il suffit d'extraire les codes correspondant aux régions souhaitées et de les coller sur un espace latent vide.

Il ne reste plus qu'à demander au modèle de diffusion de remplir les régions vides et de les décoder avec la VQ-VAE, et vous pouvez facilement générer une quantité infinie de nouvelles églises qui respectent les contraintes.

À gauche : image générée avec la région masquée en surbrillance. À droite : image générée complète

Comme vous pouvez le voir, le contenu des tours et de la base reste le même et le modèle remplit le reste de manière réaliste. Le pape est très satisfait du résultat et vous offre un billet VIP pour éviter la file d'attente aux portes de Saint-Pierre. Un travail bien fait ! Si vous souhaitez obtenir des résultats plus fous, vous pouvez ajuster la température d'échantillonnage du modèle de diffusion afin d'obtenir davantage de variations (tout en sacrifiant une certaine cohérence globale).

Générer des images plus grandes

La dernière application intéressante de ce modèle est qu'il nous permet de générer des images plus grandes que les images sur lesquelles le modèle a été entraîné. Pour ce faire, nous divisons l'espace latent de l'image plus grande en plusieurs grilles qui se chevauchent et qui correspondent à la forme originale de 16x16. À chaque étape de prédiction, nous calculons les probabilités des nouveaux jetons et les agrégeons dans les différentes grilles.

Le processus de production d'images plus grandes que celles sur lesquelles la formation a été effectuée. La grille latente est divisée en grilles plus petites qui calculent chacune les probabilités de leurs jetons masqués. Ces probabilités sont agrégées à travers les grilles pour obtenir une carte de probabilité de la taille originale, à partir de laquelle un nouveau code peut être échantillonné. Ensuite, la grille complète de codes est décodée par le décodeur VQGAN.

Cette astuce nous permet de générer des images globalement cohérentes, même si le modèle n'a jamais été entraîné pour cela.

Images générées à plus haute résolution

Conclusion

Dans ce billet, nous avons examiné comment la nature bidirectionnelle et itérative des modèles de diffusion récemment apparus, combinée aux représentations discrètes des VQGAN et aux capacités de modélisation à longue portée des transformateurs , nous permet d'avoir un meilleur contrôle sur l'espace latent. Cette architecture produit des images de haute qualité et cohérentes tout en ajoutant la possibilité d'éditer des images dans un espace conceptuel discret.

Gardez l'œil ouvert, car ce n'est pas la dernière fois que vous verrez ces modèles de diffusion (en fait, plusieurs nouveaux articles étonnants ont été publiés pendant la rédaction de ce billet, comme DALL-E 2, ImageGen, Stable Diffusion...). Et n'oubliez pas de consulter le billet technique pour savoir ce qui se passe en coulisses!🤓




Postes connexes

Voir tout le contenu
Aucun résultat n'a été trouvé.
Il n'y a pas de résultats correspondant à ces critères. Essayez de modifier votre recherche.
Grand modèle linguistique
Modèles de fondation
Entreprise
Personnes
Données Structurées
Chat GPT
Durabilité
Voix et son
Développement frontal
Protection des données et sécurité
IA responsable/éthique
Infrastructure
Hardware et capteurs
MLOps
IA générative
Natural Language Processing
Vision par ordinateur