11 août 2022

Utiliser l'IA générative pour la manipulation d'images : explication des modèles de diffusion à absorption discrète

Les contributeurs
Bert Christiaens
Ingénieur en machine learning
Jan Van Looy
Chef de projet et spécialiste de l'IA générative
Lucas Desard
Ingénieur en machine learning
Matthias Feys
Q / CTO
S'abonner à la newsletter
Partager cet article

Dans le cadre de l'apprentissage automatique, il existe une classe de modèles de vision par ordinateur qui peuvent donner des résultats avec une capacité d'étonnement inégalée : les modèles génératifs. Ces modèles peuvent modifier le style d'une image, imaginer des parties manquantes et bien plus encore. Ils nous montrent à quel point l'apprentissage profond s'est amélioré pour ce qui est d'apprendre à partir de données, mais aussi de les générer.

Les modèles génératifs pour la vision par ordinateur fonctionnent généralement en échantillonnant des vecteurs à partir d'une distribution apprise, l'espace latent, et en les projetant dans l'espace image à l'aide d'un modèle décodeur. Bien que cela permette d'obtenir des images de haute qualité, ces modèles offrent généralement un contrôle limité sur l'espace latent, ce qui rend difficile l'orientation du processus de génération.

Diverses méthodes ont été mises au point pour résoudre ce problème : conditionnement sur des cartes de segmentation (GauGAN), invites textuelles (DALL-E), vecteurs de style (StyleGAN), ... et permettent à l'utilisateur de spécifier certains détails sur le résultat souhaité. Malheureusement, ces méthodes ne permettent pas de contrôler finement l'espace latent. Dans ce blogpost, nous discuterons d'une nouvelle technique appelée " Discrete Absorbing Diffusion models", qui nous donne plusieurs options pour piloter le modèle génératif et améliorer la facilité d'utilisation pour les applications créatives.

Dans ce billet, nous commencerons par quelques avancées récentes en Deep Learning, telles que Transformers (vaswani et al. 2017) et VQGANs, pour finalement approfondir le modèle Discrete Absorbing Diffusion de: Unleashing Transformers : Parallel Token Prediction with Discrete Absorbing Diffusion for Fast High-Resolution Image Generation from Vector-Quantized Codes.

Si vous voulez voir les applications créatives que cette architecture permet, vous pouvez lire l'article de blog sur les applications!

Comprendre la VQVAE

Il existe plusieurs modèles capables de générer de nouvelles données. Les familles de modèles les plus connues sont les GAN, les modèles de flux, les modèles autorégressifs et les autoencodeurs variationnels. Aujourd'hui, nous allons jeter un coup d'œil rapide et de haut niveau sur la famille des autoencodeurs, puis nous plongerons dans la VQVAE.

Autoencodeur Vanilla (AE)

La famille des autoencodeurs commence par un modèle non génératif, l'autoencodeur vanille. L'idée sous-jacente à ce modèle est de compresser les données d'entrée, telles que les images, en une représentation conceptuelle (généralement de dimension inférieure) qui contient la plupart des informations de l'entrée. Son objectif est de reconstruire l'entrée originale à partir de cette représentation intermédiaire compressée (ou latente), en la faisant passer par un réseau de décodeurs.

Bien que cette architecture codeur-décodeur soit innovante, elle présente une limitation : il n'est pas possible d'échantillonner des valeurs de cet espace latent et de générer de nouvelles images. En effet, nous ne savons pas quelles valeurs de l'espace latent correspondent à des sorties sensées, de sorte que de nombreuses combinaisons de valeurs latentes n'auront aucun sens.

L'autoencodeur vanille : l'entrée est projetée sur un espace latent de faible dimension (le code) par l'encodeur. Le décodeur projette ensuite ce code dans l'espace image afin de reconstruire les valeurs d'entrée. https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798

Autoencodeur variationnel (VAE)

Pour résoudre ce problème, nous devons imposer une structure dans l'espace latent. La VAE y parvient en ajoutant l'objectif selon lequel les variables latentes produites par le codeur doivent se rapprocher d'une distribution préalable. Cet objectif est atteint en incluant la divergence de Kullback-Leibler dans la fonction de perte, qui mesure l'écart entre une distribution et une autre. En régularisant cet espace latent, les variables latentes deviennent plus lisses et plus significatives.

Nous savons maintenant qu'un échantillon de cette distribution préalable (s'il est bien entraîné) produit une image similaire aux données d'entraînement. Nous disposons enfin d'un véritable modèle génératif !

https://en.wikipedia.org/wiki/File:Reparameterized_Variational_Autoencoder.png

Quantification vectorielle VAE

Un membre plus récent de la famille des auto-encodeurs est le VAE quantifiée par vecteur (VQVAE), qui adopte une approche légèrement différente, à savoir qu'elle représente l'espace latent à l'aide d'une grille de codes discrets.

Comment passer de variables latentes continues à des codes discrets ?

La VQVAE y parvient en utilisant un nouvel élément : le livre de codes. L'idée est d'apprendre un nombre fixe de vecteurs autorisés dans l'espace latent. Tout d'abord, le codeur traite l'entrée et produit une grille de vecteurs. Ces vecteurs sont ensuite comparés aux codes du livre de codes et remplacés par le code le plus proche (en utilisant la distance L2), ce que l'on appelle l'étape de quantification vectorielle .

Chaque vecteur de la grille correspond désormais à l'un des vecteurs du livre de codes et peut se voir attribuer un indice correspondant à son emplacement dans le livre de codes. Il en résulte une discrétisation de l'espace latent, contrairement à la nature continue de la VAE. Comme pour tous les autoencodeurs, le décodeur prend les variables latentes et les ramène à une image.

Architecture de la VQVAE : l'image est encodée dans une grille de vecteurs latents. Ces vecteurs sont remplacés par le vecteur le plus proche du livre de codes dans le goulot d'étranglement. Enfin, les vecteurs quantifiés passent par le décodeur pour reconstruire l'entrée.

Pourquoi s'intéresser aux espaces discrets ?

Très bien, mais pourquoi se donner tant de mal pour contraindre l'espace latent ?

  • Le passage de vecteurs à valeurs flottantes à des indices discrets permet de comprimer davantage l'espace latent et d'obtenir une représentation compacte.
  • En utilisant le maximum de vraisemblance au lieu d'un objectif variationnel, la formation devient plus stable.
  • En utilisant l'ensemble de l'espace latent dans le goulot d'étranglement, nous évitons l'effondrement postérieur. Il s'agit d'un problème courant dans les VAE, où le décodeur ignore un sous-ensemble de variables latentes.
  • En discrétisant l'espace latent avec le codebook, nous obtenons une représentation naturelle, un peu comme un langage de concepts visuels. Les représentations discrètes permettent également d'utiliser des modèles très puissants tels que les célèbres transformateurs.

Il s'agit d'une explication de haut niveau qui omet quelques informations concernant l'architecture et la formation des VQVAE. Si vous souhaitez en savoir plus, consultez l'une des explications suivantes :

Métaphore VQVAE : l'architecte

Essayons donc de trouver une bonne métaphore pour le codeur, le livre de codes, l'espace latent et le décodeur.

Vous voulez construire votre propre église et vous vous adressez à un architecte qui s'y connaît en matière d'églises. Dans votre tête, vous savez à peu près comment vous voulez votre bâtiment, mais vous n'êtes capable que de le décrire. L'architecte vous dit : j'ai ici un catalogue de tous les éléments qui peuvent se trouver dans une église (le codebook), montrez-moi où je dois mettre tel ou tel élément. Vous convertissez (c'est-à-dire vous encodez) l'image que vous avez en tête en cette petite grille en utilisant les éléments du catalogue (un toit va ici, la porte va là, ...).

Puisque l'architecte (alias le décodeur) est si expérimenté et sait comment ces éléments doivent former un bâtiment, il peut maintenant décoder votre schéma de haut niveau (alias l'espace latent) en une belle représentation de l'église. Et wow, elle ressemble exactement à ce que vous aviez imaginé !

C'est l'idée principale de la VQVAE : l'espace latent représente une vue d'ensemble conceptuelle de l'espace à l'aide d'éléments (codes discrets) du livre de codes. Le décodeur est alors en mesure de projeter cette vue d'ensemble à faible dimension (par exemple 16x16) dans une image à haute dimension (256x256).

Métaphore de l'espace latent et du livre de codes de la VQVAE. Les codes représentent un catalogue de concepts de haut niveau, appris à partir des données, qui peuvent être utilisés pour construire une représentation conceptuelle d'une image. Le décodeur (l'architecte) sait comment interpréter et cartographier la petite grille conceptuelle dans l'espace de l'image.

Améliorer la VQVAE à l'aide d'un cadre contradictoire

L'une des qualités d'une VAE est d'obtenir une probabilité élevée (ce qui signifie que la reconstruction est bonne en moyenne). Toutefois, cela peut signifier que la VAE tente de minimiser les erreurs en moyenne en jouant la carte de la sécurité et en prédisant une valeur de pixel "sûre" en moyenne, ce qui se traduit par des images floues.

Pour éviter ces images floues, nous pouvons nous inspirer des éléments suivants réseaux adversoriels génératifs (GAN), où l'objectif est de créer des échantillons réalistes qui peuvent tromper un modèle discriminant. Le VQGAN ajoute un discriminateur à la VQVAE qui prédit si chaque parcelle d'image est réelle ou générée. Cette perte contradictoire supplémentaire encourage le décodeur VQVAE à produire des échantillons nets et réalistes. Pour une explication plus approfondie, consultez cet article.

Architecture du VQGAN : un modèle discriminant examine les images générées par le VQVAE pour prédire si chaque patch est vrai ou faux.

Échantillonnage de la VQVAE

Nous avons vu ce qu'est une VQVAE et comment elle utilise une représentation discrète pour représenter des images. Toutefois, pour générer des données, il faut pouvoir générer de nouvelles combinaisons de codes latents qui, une fois décodées, produisent des images sensées.

Distribution antérieure

Une première idée consiste à utiliser une distribution préalable pour échantillonner les variables latentes, à l'instar de l'autoencodeur variationnel.

Comme il s'agit de variables discrètes, nous pouvons utiliser un a priori uniforme sur les codes discrets, de sorte que chaque code a la même probabilité d'être choisi dans la grille. Toutefois, dans la réalité, cela donne des échantillons très incohérents et de faible qualité.

Si l'on reprend notre métaphore, on ne peut pas placer au hasard une fenêtre dans l'air et un toit sous la porte et s'attendre à ce que l'architecte crée quelque chose de logique. Cela vient du fait que dans la distribution originale des données, les codes ne sont pas indépendants et que la "pertinence" d'un code dépend des codes déjà présents. Nous avons besoin d'un moyen de mieux représenter la distribution des codes discrets afin de créer des images cohérentes.

Apprentissage de l'antériorité

Pour résoudre ce problème d'échantillonnage, l'article original sur la VQVAE proposait d'apprendre la distribution préalable au lieu d'utiliser une distribution uniforme fixe.

Cependant, au lieu d'apprendre directement la distribution conjointe, ce qui est irréalisable en raison de l'énorme quantité de combinaisons à apprendre, nous aimerions diviser la distribution en plusieurs probabilités conditionnelles plus petites.

Modèles autorégressifs

Les modèles autorégressifs (AR) résolvent ce problème en tirant parti de la règle de la chaîne de probabilité :

Appliqué à notre espace latent discret, nous devons dérouler la grille NxN de variables dans un tableau unidimensionnel de longueur N². À chaque étape, il suffit de modéliser les probabilités de la variable suivante en examinant les variables précédentes (probabilité conditionnelle).

Pour modéliser ces probabilités factorisées, l'étude VQVAE a utilisé le modèle autorégressif pixelCNN. Ce modèle utilise une fenêtre coulissante masquée, qui examine les variables environnantes, pour prédire la variable suivante. Par rapport à notre simple a priori uniforme, cette approche améliore considérablement la capacité à générer de nouvelles images cohérentes en apprenant quels sont les codes qui apparaissent ensemble.

Prédiction autorégressive des jetons avec le pixelCNN.

Dans l'article intitulé Taming transformers for high resolution image synthesis, la modélisation de l'antériorité est encore améliorée par l'utilisation d'un décodeur de transformateur comme modèle autorégressif.

Un décodeur transformateur (tel que GPT-2, GPT-3, ...) prend une séquence de jetons et prédit le jeton suivant dans la séquence. Cette architecture peut modéliser des dépendances à longue portée dans une séquence, puisque son mécanisme d'attention lui permet d'examiner chaque jeton de la séquence. Il s'agit d'une grande amélioration par rapport au pixelCNN, qui ne peut examiner qu'une partie de l'information, en raison de sa fenêtre coulissante.

Ce transformateur permet donc une meilleure modélisation des relations entre les codes latents tout en tirant parti de la représentation compacte et des capacités de reconstruction d'images du VQGAN.

Génération autorégressive de codes discrets avec le modèle de décodeur à transformateur

Limites

Bien que cette architecture soit assez impressionnante et qu'elle combine plusieurs techniques SOTA, elle a ses limites : elle utilise un modèle de transformateur unidirectionnel contraint qui génère des codes de gauche à droite. Or, les images ne sont pas naturellement structurées de cette manière, ce qui pourrait entraîner un manque de cohérence globale des images générées. Comme les codes sont générés un par un, ce processus séquentiel est beaucoup plus lent que les GAN et les VAE, qui produisent des échantillons en un seul passage dans le réseau.

Modèles de diffusion

Comment résoudre les problèmes de cohérence globale et de rapidité d'échantillonnage ?

  • Pour améliorer la cohérence globale, la génération de nouveaux jetons ne doit pas être unidirectionnelle mais bidirectionnelle. Nous voulons examiner l'ensemble du contexte et le modèle devrait être autorisé à produire un nouveau jeton à un endroit choisi. De cette manière, la structure globale de l'image peut être choisie en premier et le reste peut être complété par la suite pour compléter l'image.
  • Pour améliorer la vitesse d'échantillonnage, nous devrions nous débarrasser de la génération d'un jeton par étape et être autorisés à en générer plusieurs si nécessaire.

Ces deux solutions sont proposées dans l'article "Unleashing transformers" qui étudie les modèles de diffusion par absorption discrète.

Modèles de diffusion

L'idée principale des modèles de diffusion est de corrompre progressivement les données et d'apprendre un modèle capable d'inverser ce processus de corruption.

L'hypothèse est que si l'on supprime une très petite partie de l'information des données, on peut prédire quelle information a été supprimée et restaurer les données d'origine.

Nous allons rendre cela plus concret (et un peu plus technique) et examiner comment un processus de diffusion continue est appliqué aux images. Il se compose d'un processus de diffusion vers l'avant et d'un processus de débruitage.

Processus de diffusion vers l'avant

Comme nous l'avons vu plus haut, nous devons d'abord corrompre l'information contenue dans les données. Cela se fait par le processus de diffusion vers l'avant, qui définit une chaîne de Markov

qui ajoute à l'image de petites quantités de bruit, généralement gaussien et échelonné, sur un grand nombre d'étapes. Ce processus détruit itérativement l'information contenue dans l'image d'origine, ce qui ne nous laisse rien d'autre qu'un bruit gaussien à la fin.

Du bruit est ajouté à l'image originale (à gauche) à chaque étape jusqu'à ce que l'échantillon soit constitué de bruit pur.

Processus de débruitage

D'accord, nous avons rendu notre image méconnaissable, mais pourquoi ne pas le faire en une seule étape ? Étant donné que notre image ne perd que de petites quantités d'informations à chaque étape, il n'est pas impensable qu'un modèle puisse apprendre à supprimer ce bruit. En d'autres termes, un modèle peut être entraîné à inverser le processus de bruit et à prédire les données de l'étape T-1 à partir de l'étape T.

Pour créer de nouveaux échantillons inédits à partir de ce modèle, il suffit d'échantillonner un bruit aléatoire et de le débruiter en tirant parti de notre chaîne de Markov inversée. Si le modèle est bien entraîné, nous obtiendrons une image plausible à partir de notre distribution de données après N étapes de débruitage.

Inverser le processus de bruitage

Diffusion absorbante discrète

Diffusion par absorption vers l'avant : les jetons sont masqués à chaque étape.

Alors, comment créer une variante discrète du processus de bruits ? En absorbant de l'information, bien sûr ! La diffusion absorbante discrète n'ajoute pas de bruit continu aléatoire mais sélectionne un sous-ensemble de variables discrètes (dans notre cas, les codes latents VQGAN) à masquer à chaque étape. Cela détruit à nouveau progressivement l'information contenue dans les données, puisque nous nous retrouvons avec une image entièrement masquée après un nombre suffisant d'étapes.

Comme précédemment, un modèle peut alors être optimisé pour modéliser le processus inverse, ce qui signifie qu'il doit prédire quelle variable discrète était à l'origine de chaque masque.

Espace latent discret de VQGAN

Processus de (dé)bruitage en avant et en arrière

L'article choisit un modèle de transformateur d'encodeur bidirectionnel, similaire au BERT bien-aimé des NLP, qui prend en compte tous les tokens. L'avantage d'utiliser un modèle bidirectionnel est qu'il peut examiner tous les tokens (dont un sous-ensemble est masqué) et utiliser ces informations globales pour démasquer les tokens. À chaque étape, nous choisissons un jeton masqué au hasard et prédisons le code qu'il contenait à l'origine. Après N² étapes (la taille de la grille latente), chaque jeton est prédit et la grille de codes produite peut être décodée par le décodeur VQVAE pour produire une image.

Accélérer la déduction

Pour accélérer le processus, vous pouvez démasquer plusieurs (K) jetons en une seule étape, ce qui réduit le nombre d'étapes d'échantillonnage d'un facteur K. Cette technique permet à l'utilisateur de contrôler le compromis qualité-vitesse.

Le tableau ci-dessous illustre ce compromis en comparant la FID pour différents nombres d'étapes de débruitage (50, 100, 150, 200 et 256). Pour l'ensemble de données Churches, le passage de 256 à 150 étapes n'ajoute que 0,23 à la métrique FID, tout en étant presque deux fois plus rapide. Le passage à 50 étapes augmente cette métrique de 1,28 et est 5 fois plus rapide.

https://arxiv.org/pdf/2111.12701.pdf

Conclusion

Dans ce billet, nous avons construit progressivement nos connaissances en examinant les autoencodeurs, les modèles autorégressifs, les transformateurs et les processus de diffusion.

Le résultat est le modèle discret de diffusion par absorption qui exploite les capacités de reconstruction du VQGAN, la nature discrète et les capacités de modélisation à longue portée du transformateur, ainsi que la nature itérative des processus de diffusion. Ce modèle nous donne des images générées globalement cohérentes et de haute qualité, tout en nous donnant un certain contrôle sur le processus d'inférence.

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