Explication du modèle de diffusion stable

La dernière capacité de génération d'images démontrée par le modèle d'IA dépasse de loin les attentes des gens. Elle peut créer des images avec des effets visuels étonnants directement basés sur des descriptions textuelles. Le mécanisme de fonctionnement derrière cela semble très mystérieux et magique, mais il affecte la façon dont les humains créent art. Façon.

La dernière capacité de génération d'images démontrée par le modèle d'IA dépasse de loin les attentes des gens. Elle peut créer des images avec des effets visuels étonnants directement basés sur des descriptions textuelles. Le mécanisme de fonctionnement derrière cela semble très mystérieux et magique, mais il affecte la façon dont les humains créent art. Façon.

La sortie de Stable Diffusion est une étape importante dans le développement de la génération d'images IA. Cela équivaut à fournir au public un modèle utilisable de haute performance. Non seulement la qualité de l'image générée est très élevée, elle fonctionne rapidement, mais elle a également faibles besoins en ressources et en mémoire. .

Je pense que tous ceux qui ont essayé la génération d'images IA voudront savoir comment cela fonctionne. Cet article dévoilera le mystère du fonctionnement de la diffusion stable pour vous.

La diffusion stable comprend principalement deux aspects en termes de fonction :

1) Sa fonction principale est de générer des images basées uniquement sur des invites de texte en entrée (text2img) ;

2) Vous pouvez également l'utiliser pour modifier des images en fonction de descriptions textuelles (c'est-à-dire saisie sous forme de texte + image). 

Les illustrations seront utilisées ci-dessous pour expliquer les composants de Stable Diffusion, comment ils interagissent les uns avec les autres et la signification des options et paramètres de génération d'images.

Composant de diffusion stable

Stable Diffusion est un système composé de plusieurs composants et modèles, et non d'un modèle unique.

Lorsque nous examinons l'intérieur du modèle du point de vue du modèle dans son ensemble, nous pouvons constater qu'il contient un composant de compréhension du texte permettant de traduire les informations textuelles en une représentation numérique afin de capturer les informations sémantiques du texte.

Bien que nous analysions encore le modèle d'un point de vue macro et que nous donnerons plus de détails sur le modèle plus tard, nous pouvons également spéculer approximativement que cet encodeur de texte est un modèle de langage Transformer spécial (en particulier l'encodeur de texte du modèle CLIP ) .

L'entrée du modèle est une chaîne de texte et la sortie est une liste de nombres utilisés pour représenter chaque mot/jeton dans le texte, c'est-à-dire que chaque jeton est converti en vecteur.

Ces informations sont ensuite soumises au générateur d'images, qui contient également plusieurs composants.

 

Le générateur d'images se compose principalement de deux étapes :

1. Créateur d'informations sur l'image

Ce composant est la sauce secrète exclusive de Stable Diffusion, et bon nombre de ses gains de performances par rapport aux modèles précédents sont obtenus ici.

Ce composant exécute plusieurs étapes pour générer des informations sur l'image, où les étapes sont également des paramètres dans l'interface et la bibliothèque Stable Diffusion, généralement par défaut 50 ou 100 .

Le créateur d'informations d'image fonctionne entièrement dans l'espace d'informations d'image (ou espace latent), une fonctionnalité qui le rend plus rapide que les autres modèles de diffusion qui fonctionnent dans l'espace des pixels ; techniquement, ce composant se compose d'un réseau neuronal UNet et d'un algorithme de planification composé .

Le mot diffusion décrit ce qui se passe lors du fonctionnement interne de ce composant, c'est-à-dire que les informations sont traitées étape par étape, et finalement une image de haute qualité est générée par le composant suivant (le décodeur d'image).

2. Décodeur d'images

Le décodeur d'image dessine une image sur la base des informations obtenues auprès du créateur d'informations d'image, et l'ensemble du processus n'est exécuté qu'une seule fois pour générer l'image pixel finale.

 

Comme vous pouvez le voir, Stable Diffusion contient un total de trois composants principaux , chacun possédant un réseau neuronal indépendant :

1) Clip Text est utilisé pour l’encodage du texte.

Texte de saisie

Sortie : 77 vecteurs d'intégration de jetons, chacun contenant 768 dimensions

2) UNet + Scheduler traite/diffuse progressivement les informations dans l'espace d'informations (latentes).

Entrée : intégration de texte et un tableau multidimensionnel initial de bruit (liste structurée de nombres, également appelée tenseur).

Sortie : un tableau d’informations traitées

3) Autoencoder Decoder , un décodeur qui utilise la matrice d'informations traitées pour dessiner l'image finale.

Entrée : matrice d'informations traitées avec des dimensions (4, 64, 64)

Sortie : Image résultante, chaque dimension est (3, 512, 512), c'est-à-dire (rouge/vert/bleu, largeur, hauteur)

Qu’est-ce que la diffusion ?

La diffusion est un processus qui se produit dans le composant créateur d'informations d'image rose dans la figure ci-dessous. Le processus comprend l'intégration de jetons qui représente le texte d'entrée et la matrice d'informations d'image initiale aléatoire (également appelée latentes). Ce processus devra également utiliser Décodeur d'image pour dessiner la matrice d'informations de l'image finale.

 

L'ensemble du processus en cours se déroule étape par étape et des informations plus pertinentes seront ajoutées à chaque étape.

Pour avoir une idée plus intuitive de l'ensemble du processus, vous pouvez examiner la matrice des latentes aléatoires à mi-chemin et observer comment elle est convertie en bruit visuel, où une inspection visuelle est effectuée via le décodeur d'image.

 

L'ensemble du processus de diffusion contient plusieurs étapes, dont chacune fonctionne sur la base de la matrice latente d'entrée et génère une autre matrice latente pour mieux s'adapter au « texte d'entrée » et aux « informations visuelles » obtenues à partir de l'ensemble d'images modèles. 

 

Visualiser ces latents permet de voir comment ces informations s'additionnent à chaque étape. 

L’ensemble du processus part de zéro, ce qui semble assez excitant.

https://jalammar.github.io/images/stable-diffusion/diffusion-steps-all-loop.webm

La transition du processus entre les étapes 2 et 4 semble particulièrement intéressante, comme si les contours de l'image émergeaient du bruit.

Comment fonctionne la diffusion

Un modèle de diffusion est un modèle génératif utilisé pour générer des données similaires aux données d'entraînement. En termes simples, les modèles de diffusion fonctionnent en ajoutant de manière itérative du bruit gaussien pour « corrompre » les données d'entraînement, puis apprennent à supprimer le bruit pour restaurer les données.

Un modèle de diffusion standard comporte deux processus principaux : la diffusion directe et la diffusion inverse.

Lors de l'étape de diffusion directe, l'image est détruite en introduisant progressivement du bruit jusqu'à ce que l'image devienne un bruit complètement aléatoire.

Lors de l'étape de rétrodiffusion, une série de chaînes de Markov sont utilisées pour supprimer progressivement le bruit de prédiction et récupérer les données du bruit gaussien.

Chaîne de Markov de processus de diffusion avant (inverse) d'échantillons générés en ajoutant (supprimant) lentement du bruit (Crédit image : Jonathan Ho, Ajay Jain, Pieter Abbeel. 2020)

Pour l’estimation et la suppression du bruit, U-Net est le plus couramment utilisé. L'architecture de ce réseau de neurones ressemble à la lettre U, d'où son nom. U-Net est un réseau neuronal convolutif entièrement connecté, ce qui le rend très utile pour le traitement d'images. La caractéristique d'U-Net est qu'il peut prendre une image comme entrée et trouver une représentation de faible dimension de cette image en réduisant l'échantillonnage, ce qui la rend plus adaptée au traitement et à la recherche d'attributs importants, puis à la restauration de l'image en augmentant échantillonnage.
 

Un exemple typique d'architecture U-Net

Plus précisément, ce qu'on appelle la suppression du bruit est la transformation de la période t en période t − 1, où t est n'importe quelle période comprise entre t 0 (pas de bruit) et t_{max} (bruit complet). Les règles de transformation sont :

  1. Entrez une image à la période t, et il y a un bruit spécifique dans l'image à cette période ;
  2. Utilisez U-Net pour prédire la quantité totale de bruit ;
  3. Ensuite, une "partie" du bruit total est supprimée de l'image de la période t, et l'image de la période t − 1 avec moins de bruit est obtenue.
     
Ajouter/supprimer progressivement du bruit à une image

Mathématiquement parlant, il est plus logique d'exécuter cette méthode ci-dessus T fois plutôt que d'essayer d'éliminer la totalité du bruit. En répétant ce processus, le bruit est progressivement supprimé et on obtient une image « plus propre ». Par exemple, pour les images avec du bruit, nous ajoutons du bruit complet à l'image initiale, puis le supprimons de manière itérative pour générer une image sans bruit. L'effet est meilleur que la suppression directe du bruit de l'image d'origine.

Ces dernières années, les modèles de diffusion ont montré des performances exceptionnelles dans les tâches de génération d’images et ont remplacé les GAN dans de nombreuses tâches telles que la synthèse d’images. Puisque le modèle de diffusion est capable de conserver la structure sémantique des données, il n’est pas affecté par l’effondrement du schéma.

Cependant, la mise en œuvre d'un modèle de diffusion présente certaines difficultés. Étant donné que tous les états de Markov doivent être conservés en mémoire pour la prédiction, cela signifie que plusieurs instances de grands réseaux profonds doivent être conservées en mémoire, ce qui fait que le modèle de diffusion consomme beaucoup de mémoire. De plus, les modèles de diffusion peuvent s'embourber dans des complexités imperceptiblement fines dans les données d'image, ce qui rend les temps de formation trop longs (de quelques jours à plusieurs mois). Paradoxalement, la génération d'images à granularité fine est l'un des principaux avantages des modèles de diffusion et nous ne pouvons éviter ce « doux désagrément ». Étant donné que le modèle de diffusion nécessite des calculs très élevés, la formation nécessite de très grandes quantités de mémoire et de puissance, ce qui a rendu impossible pour la plupart des chercheurs de mettre en œuvre le modèle dans la réalité.
 

Diffusion stable

Le plus gros problème du modèle de diffusion est qu'il est extrêmement « coûteux » à la fois en termes de temps et de coûts économiques. L’émergence de la diffusion stable vise à résoudre les problèmes ci-dessus. Si nous voulons générer une image de taille 1024 × 1024 1024, U-Net utilisera un bruit de taille 1024 × 1024 1024, puis générera l'image à partir de celui-ci. La quantité de calcul requise pour effectuer une diffusion en une étape est ici très importante, sans parler de la nécessité d'itérer plusieurs fois jusqu'à ce qu'elle atteigne 100 %. Une solution consiste à diviser une grande image en plusieurs images de plus petite résolution pour la formation, puis à utiliser un réseau neuronal supplémentaire pour générer une image de plus grande résolution (diffusion en super-résolution).

Le modèle Latent Diffusion sorti en 2021 propose une approche différente. Le modèle de Diffusion Latente n'opère pas directement sur l'image, mais dans l'espace latent. En codant les données originales dans un espace plus petit, U-Net peut ajouter et supprimer du bruit sur la représentation de basse dimension (le principe de base de la diffusion stable est la diffusion latente).

L'idée principale de l'utilisation de modèles de diffusion pour générer des images est toujours basée sur de puissants modèles de vision par ordinateur existants. Tant qu'un ensemble de données suffisamment grand est saisi, ces modèles peuvent apprendre des opérations arbitrairement complexes.

Supposons que nous ayons déjà une image , générons du bruit et l'ajoutons à l'image, puis traitons l'image comme un exemple de formation.

 Les exemples de formation sont générés en générant du bruit et en ajoutant une certaine quantité de bruit à l'ensemble de données de formation (diffusion vers l'avant)

En utilisant la même opération, un grand nombre d'échantillons d'apprentissage peuvent être générés pour entraîner les composants principaux du modèle de génération d'images.

L'exemple ci-dessus montre un certain nombre de niveaux de bruit sélectionnables, allant de l'image d'origine (niveau 0, pas de bruit) à tout le bruit ajouté (niveau 4), ce qui facilite le contrôle de la quantité de bruit ajoutée à l'image.

Nous pouvons donc répartir ce processus sur des dizaines d'étapes et générer des dizaines d'échantillons d'entraînement pour chaque image de l'ensemble de données.

Sur la base de l'ensemble de données ci-dessus, nous pouvons former un prédicteur de bruit avec d'excellentes performances . Chaque étape de formation est similaire à la formation d'autres modèles. Lorsqu'il est exécuté dans une certaine configuration, le prédicteur de bruit peut générer des images.

Supprimez le bruit et dessinez des images

Un prédicteur de bruit entraîné peut débruiter une image avec du bruit ajouté et peut également prédire la quantité de bruit ajouté.

 Étant donné que le bruit des échantillons est prévisible, si le bruit est soustrait de l'image, l'image finale sera plus proche de l'image sur laquelle le modèle a été formé.

L'image résultante n'est pas une image originale exacte, mais une distribution, c'est-à-dire la disposition des pixels dans le monde. Par exemple, le ciel est généralement bleu, les gens ont deux yeux, les chats ont des oreilles pointues, etc. Le style dépend entièrement de l'ensemble de données d'entraînement.

Non seulement Stable Diffusion génère des images par débruitage, mais également DALL-E 2 et le modèle Imagen de Google.

Il est important de noter que le processus de diffusion décrit jusqu'à présent n'utilise aucune donnée textuelle pour générer des images . Ainsi, si nous déployons ce modèle, il peut générer de belles images, mais l'utilisateur n'a aucun moyen de contrôler ce qui est généré.

Dans les sections suivantes, nous décrivons comment incorporer du texte conditionnel dans le processus pour contrôler le type d'images générées par le modèle.

Accélération : Diffusion sur données compressées

     Espace latent

L'espace latent est simplement une représentation de données compressées. La compression fait référence au processus de codage des informations avec moins de bits que la représentation originale. Par exemple, nous utilisons un canal de couleur (noir, blanc et gris) pour représenter une image composée à l'origine de trois couleurs primaires RVB. À ce stade, le vecteur de couleur de chaque pixel passe de 3 dimensions à 1 dimension. La réduction de dimensionnalité fera perdre certaines informations, mais dans certains cas, la réduction de dimensionnalité n'est pas une mauvaise chose. Grâce à la réduction de dimensionnalité, nous pouvons filtrer certaines informations moins importantes et ne conserver que les informations les plus importantes.

Supposons que nous formions un modèle de classification d'images via un réseau neuronal convolutif entièrement connecté. Quand on dit que le modèle apprend, on entend qu'il apprend les propriétés spécifiques de chaque couche du réseau neuronal, comme les bords, les angles, les formes, etc... Chaque fois que le modèle apprend à partir de données (images déjà existantes), l'image est La taille est d'abord réduite puis restaurée à sa taille d'origine. Enfin, le modèle utilise un décodeur pour reconstruire l'image à partir des données compressées tout en apprenant toutes les informations pertinentes précédentes. L’espace devient donc plus petit afin d’extraire et de conserver les attributs les plus importants. C'est pourquoi l'espace latent convient aux modèles de diffusion.

Extrayez les attributs les plus importants à l'aide de réseaux de neurones convolutifs

 Il y a deux étapes principales dans toute méthode d’apprentissage génératif : la compression perceptuelle et la compression sémantique :

    Au cours de la phase d’apprentissage par compression perceptuelle, la méthode d’apprentissage doit supprimer les détails à haute fréquence pour encapsuler les données dans une représentation abstraite. Cette étape est nécessaire pour construire une représentation stable et robuste de l’environnement. Les GAN excellent dans la compression perceptuelle, qu'ils obtiennent en projetant des données redondantes de grande dimension depuis l'espace des pixels dans un hyperespace d'espace latent. Un vecteur latent dans l'espace latent est une forme compressée de l'image pixel d'origine et peut remplacer efficacement l'image d'origine.

Plus précisément, la compression perceptuelle est capturée à l’aide d’une architecture Auto Encoder. L'encodeur d'un encodeur automatique projette des données de grande dimension dans un espace latent, et le décodeur récupère l'image à partir de l'espace latent.
 

Les auto-encodeurs et décodeurs constituent une compression perceptuelle

compression sémantique


Dans la deuxième étape de l'apprentissage, la méthode de génération d'images doit être capable de capturer la structure sémantique présente dans les données. Cette structure conceptuelle et sémantique assure la préservation du contexte et des interrelations des divers objets de l'image. Transformer est efficace pour capturer la structure sémantique du texte et des images. La combinaison des capacités de généralisation du Transformer et des capacités de préservation des détails du modèle de diffusion offre le meilleur des deux mondes et permet de générer des images fines et très détaillées tout en préservant la structure sémantique de l'image (le Transformer dans la structure UNet principalement pour la compression sémantique).

perte perçue


Les auto-encodeurs dans les modèles de diffusion latente capturent la structure perceptuelle des données en les projetant dans un espace latent. Les auteurs de l'article utilisent une fonction de perte spéciale pour entraîner cet auto-encodeur appelée « perte de perception ». Cette fonction de perte garantit que la reconstruction est confinée à la variété d'images et réduit le flou qui se produit lors de l'utilisation de pertes dans l'espace des pixels (telles que les pertes L1/L2).
 

Afin d'accélérer le processus de génération d'image, Stable Diffusion n'a pas choisi d'exécuter le processus de diffusion sur l'image pixel elle-même , mais a choisi de l'exécuter sur la version compressée de l'image , également appelée "Départ vers l'espace latent" dans le papier.

L'ensemble du processus de compression, y compris la décompression ultérieure et le dessin de l'image, est complété par l'auto-encodeur , qui compresse l'image dans l'espace latent et utilise ensuite uniquement le décodeur pour la reconstruire à l'aide des informations compressées.

Le processus de diffusion directe est effectué sur des latents compressés, et des tranches de bruit sont appliquées au bruit sur les latents, et non à l'image pixel, de sorte que le prédicteur de bruit est en fait entraîné pour prédire la représentation compressée (bruit latent dans l'espace).

Le processus direct, c'est-à-dire utilise l'encodeur dans l'encodeur automatique pour entraîner le prédicteur de bruit. Une fois la formation terminée, les images peuvent être générées en exécutant le processus inverse (le décodeur dans l'auto-encodeur).

Les processus avant et arrière sont présentés ci-dessous. La figure comprend également un composant de conditionnement pour décrire les invites textuelles que le modèle doit générer pour l'image .

 

Encodeur de texte : un modèle de langage de transformateur

Le composant de compréhension du langage du modèle utilise le modèle de langage Transformer, qui peut convertir les invites de texte d'entrée en vecteurs d'intégration de jetons. Le modèle de diffusion stable publié utilise ClipText (un modèle basé sur GPT). Dans cet article, le modèle BERT est choisi pour la commodité de l'explication.

Les expériences menées dans l'article Imagen montrent qu'un modèle de langage plus grand peut apporter davantage d'améliorations de la qualité d'image que le choix d'un composant de génération d'image plus grand.

Le premier modèle Stable Diffusion utilisait le modèle ClipText pré-entraîné publié par OpenAI, mais dans Stable Diffusion V2, il est passé à la nouvelle variante de modèle CLIP plus grande, OpenClip.

Comment se forme le CLIP ?

Les données requises par CLIP sont des images et leurs légendes, et l'ensemble de données contient environ 400 millions d'images et de descriptions.

L'ensemble de données est collecté à partir d'images récupérées sur le Web et du texte de la balise "alt" correspondant.

CLIP est une combinaison d'encodeur d'image et d'encodeur de texte. Son processus de formation peut être simplifié en prenant des images et des descriptions de texte et en utilisant deux encodeurs pour encoder les données séparément.

Les intégrations résultantes sont ensuite comparées en utilisant la distance cosinus . Au début de la formation, même si la description textuelle et l'image correspondent, la similarité entre elles est définitivement très faible.

Au fur et à mesure que le modèle est continuellement mis à jour, les intégrations obtenues par l'encodeur encodant les images et le texte deviendront progressivement similaires au cours des étapes suivantes.

En répétant ce processus sur l'ensemble de l'ensemble de données et en utilisant un encodeur avec une grande taille de lot, nous sommes finalement en mesure de générer un vecteur d'intégration où l'image du chien est similaire à la phrase « image d'un chien ».

Tout comme dans word2vec, le processus de formation doit également inclure des exemples négatifs d'images et de légendes qui ne correspondent pas, et le modèle doit leur attribuer des scores de similarité inférieurs.

Les informations textuelles sont introduites dans le processus de génération d'images :

Synthèse texte-image : dans l'implémentation Python, nous pouvons utiliser la dernière implémentation officielle utilisant LDM v4 pour générer des images. Dans la synthèse texte-image, le modèle de diffusion latente utilise le modèle CLIP 3 pré-entraîné, qui fournit des intégrations universelles basées sur Transformer pour plusieurs modalités telles que le texte et les images. La sortie du modèle Transformer est ensuite entrée dans l'API Python du modèle de diffusion latente appelée « diffuseurs », et certains paramètres peuvent également être définis (par exemple, le nombre d'étapes de diffusion, la graine de nombres aléatoires, la taille de l'image, etc.).
 

Afin d'incorporer le conditionnement de texte dans le processus de génération d'images, l'entrée du prédicteur de bruit doit être adaptée pour être du texte .

Toutes les opérations sont effectuées sur l'espace latent , y compris le texte codé, les images d'entrée et le bruit de prédiction.

Afin de mieux comprendre comment les jetons de texte sont utilisés dans Unet, vous devez d'abord comprendre le modèle Unet.

Calques dans le prédicteur de bruit Unet (pas de texte)

Une Unet de diffusion qui n'utilise pas de texte, ses entrées et sorties sont les suivantes :

A l'intérieur du modèle, vous pouvez voir :

1. Les couches du modèle Unet sont principalement utilisées pour convertir les latentes ;

2. Chaque couche opère sur la sortie de la couche précédente ;

3. Certaines sorties (via des connexions résiduelles) les alimentent dans le traitement derrière le réseau

4. Convertissez les pas de temps en vecteurs d'intégration de pas de temps, qui peuvent être utilisés en couches.

Calques dans le prédicteur de bruit Unet (avec texte)

Il faut maintenant convertir le système précédent en version texte.

diffusion conditionnelle


Les modèles de diffusion sont des modèles conditionnels qui s'appuient sur des a priori. Dans les tâches de génération d'images, le prior est généralement du texte, une image ou une carte sémantique. Afin d'obtenir une représentation latente a priori, il faut utiliser un transformateur (par exemple CLIP) pour intégrer le texte/l'image dans le vecteur latent τ\tauτ. Par conséquent, la fonction de perte finale dépend non seulement de l’espace latent de l’image originale, mais également de l’intégration latente des conditions.
 

 La principale modification consiste à ajouter la prise en charge de la saisie de texte (terme : conditionnement de texte) en ajoutant une couche d'attention entre les blocs ResNet .

Il convient de noter que le bloc ResNet ne voit pas directement le contenu du texte, mais fusionne la représentation du texte latente via la couche d'attention, puis le ResNet suivant peut utiliser les informations textuelles supérieures dans ce processus.

Les références:

https://jalammar.github.io/illustrated-stable-diffusion/

https://www.reddit.com/r/MachineLearning/comments/10dfex7/d_the_illustrated_stable_diffusion_video/

Je suppose que tu aimes

Origine blog.csdn.net/zcyzcyjava/article/details/130559867
conseillé
Classement