Vous souvenez-vous encore du Transformer graphique devenu populaire sur Internet ?
Récemment, ce grand blogueur Jay Alammar a également écrit une illustration sur le modèle populaire de diffusion stable sur son blog, vous permettant de bien comprendre les principes du modèle de génération d'images à partir de zéro, avec des informations super détaillées Explication vidéo !
Lien de l'article : https://jalammar.github.io/illustrated-stable-diffusion/
Lien vidéo : https://www.youtube.com/watch?v= MXmacOUJUaw
Les capacités de génération d'images récemment démontrées par le modèle d'IA dépassent de loin les attentes des gens. Il peut créer des images avec des effets visuels étonnants directement basés sur des descriptions textuelles. Le mécanisme de fonctionnement derrière celui-ci est très. mystérieux et magique, mais il a influencé la façon dont les humains créent de l'art.
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 hautes performances. Non seulement la qualité de l'image générée est très élevée, mais elle s'exécute rapidement. mais dispose également de ressources et de mémoire. Les exigences sont également inférieures.
Je pense que quiconque a essayé la génération d'images IA voudra savoir comment cela fonctionne. Cet article dévoilera le mystère du fonctionnement de la diffusion stable pour vous.
Fonctionnellement parlant, Stable Diffusion comprend principalement deux aspects : 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 décrire des images basées sur du texte ; Apportez des modifications (c'est-à-dire saisissez sous forme de texte + image).
Les illustrations seront utilisées ci-dessous pour aider à expliquer les composants de la diffusion stable, comment ils interagissent les uns avec les autres et la signification des options et paramètres de génération d'images.
Stable Diffusion est un système composé de plusieurs composants et modèles, pas d'un seul modèle.
Lorsque nous examinons l'intérieur du modèle du point de vue du modèle global, nous pouvons constater qu'il contient un composant de compréhension du texte pour traduire les informations textuelles en représentation numérique afin de capturer les informations sémantiques dans le texte.
Bien que le modèle soit toujours analysé d'un point de vue macro, et qu'il y aura 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, le modèle CLIP) encodeur).
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.
Ensuite, ces informations seront soumises au générateur d'images (générateur d'images), qui contient également plusieurs composants en interne.
Le générateur d'images se compose principalement de deux étapes :
1. Créateur d'informations sur l'image
Ce composant est la recette secrète exclusive de Stable Diffusion. Par rapport au modèle précédent, il a. de nombreux gains de performances sont tous réalisés 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 sur 50 ou 100.
Le créateur d'informations d'image fonctionne entièrement dans l'espace d'informations d'image (ou espace latent). Cette fonctionnalité le rend plus rapide que les autres modèles de diffusion qui fonctionnent techniquement dans l'espace de pixels, ce composant est constitué d'un neurone UNet ; réseau et un algorithme de planification.
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 enfin une image de haute qualité est générée par le composant suivant (le décodeur d'image).
2. Décodeur d'image
Le décodeur d'image dessine une image basée sur les informations obtenues auprès du créateur d'informations d'image. L'ensemble du processus ne s'exécute qu'une seule fois pour générer l'image finale en pixels.
Comme vous pouvez le voir, Stable Diffusion contient un total de trois composants principaux, dont chacun possède un réseau neuronal indépendant :
1) Clip Text est utilisé pour l'encodage du texte.
Entrée : texte
Sortie : 77 vecteurs d'intégration de jetons, où chaque vecteur contient 768 dimensions
2)UNet + SchedulerTraitement/diffusion de l'information étape par étape dans l'espace d'information (latente) .
Entrée : intégration de texte et un tableau multidimensionnel initial composé de bruit (liste structurée de nombres, également appelée tenseur).
Sortie : un tableau d'informations traitées
3) Autoencoder Decoder (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, les dimensions sont (4, 64, 64)
Sortie : image résultat, chaque dimension est (3, 512, 512), c'est-à-dire (rouge/vert/bleu, largeur, élevé)
La diffusion est le processus qui se produit dans le composant créateur d'informations d'image rose dans l'image ci-dessous. Le processus comprend l'intégration du jeton qui représente le texte d'entrée et la matrice d'informations d'image initiale aléatoire (également appelée latentes). Un décodeur d'image est nécessaire pour dessiner la matrice d'informations de l'image finale.
L'ensemble du processus opérationnel se déroule étape par étape et des informations plus pertinentes seront ajoutées à chaque étape.
Pour ressentir l'ensemble du processus de manière plus intuitive, vous pouvez visualiser la matrice latente aléatoire à mi-chemin et observer comment elle est convertie en bruit visuel, où l'inspection visuelle est effectuée via le décodeur d'image.
L'ensemble du processus de diffusion contient plusieurs étapes, où chaque étape 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 à l'image du modèle "Informations visuelles" obtenu dans de manière concentrée.
Visualisez ces latents pour voir comment ces informations s'additionnent à chaque étape.
L'ensemble du processus part de zéro, ce qui semble assez excitant.
La transition du processus entre les étapes 2 et 4 semble particulièrement intéressante, comme si le contour de l'image émergeait du bruit.
L'idée de base consistant à utiliser des 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 l'image peut être considérée comme un exemple de formation.
En utilisant la même opération, un grand nombre d'échantillons d'entraînement 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 certains niveaux de bruit facultatifs, de l'image d'origine (niveau 0, pas de bruit) au bruit entièrement ajouté (niveau 4), ce qui facilite le contrôle de la quantité de bruit ajoutée dans l'image. image.
Nous pouvons ainsi 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.
Le 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é.
Le bruit d'échantillonnage étant prévisible, si le bruit est soustrait de l'image, l'image finale sera plus proche de l'image obtenue par l'entraînement du modèle.
L'image obtenue 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 et les chats ont pointé du doigt. oreilles, etc., le style d'image spécifique généré dépend entièrement de l'ensemble de données d'entraînement.
Non seulement Stable Diffusion effectue la génération d'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 la section suivante, nous décrirons comment incorporer du texte conditionnel dans le processus pour contrôler le type d'images générées par le modèle.
Afin d'accélérer le processus de génération d'image, Stable Diffusion ne choisit pas d'exécuter le processus de diffusion sur l'image pixel elle-même, mais choisit de s'exécuter sur la version compressée de l'image, également appelé dans l'article Il s'agit de "Départ vers l'espace latent".
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, puis utilise uniquement le décodeur pour la reconstruire à l'aide des informations compressées.
Le processus de diffusion directe est terminé lors de la compression des latents. Les 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 réellement utilisé pour prédire le bruit dans les représentations compressées. (espaces latents).
Processus avancé, c'est-à-dire utiliser 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 de l'image que le modèle doit générer.
Le composant de compréhension du langage dans le modèle utilise le modèle de langage Transformer, qui peut convertir l'invite de texte de saisie en un vecteur d'intégration de jetons. Le modèle de diffusion stable publié utilise ClipText (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é de l'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 plus grande du modèle CLIP OpenClip.
CLIP Comment avez-vous entraîné ?
CLIP nécessite 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é via des images récupérées sur Internet et le 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.
Utilisez ensuite la distance cosinus pour comparer les intégrations résultantes lorsque vous démarrez la formation pour la première fois, même si la description du texte correspond à l'image, la similitude entre elles est définitivement très faible.
Au fur et à mesure que le modèle est mis à jour en permanence, dans les étapes suivantes, les intégrations obtenues par l'encodeur encodant les images et le texte deviendront progressivement similaires.
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 enfin capables de générer un vecteur d'intégration où il y a une similitude entre l'image du chien et la phrase "image de un chien".
Tout comme dans word2vec, le processus de formation doit également inclure des échantillons 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.
Afin d'incorporer les conditions de texte dans le cadre du processus de génération d'image, l'entrée du prédicteur de bruit doit être ajustée pour être du texte.
Toutes les opérations se font sur l'espace latent, y compris le texte codé, l'image 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.
Couches dans le prédicteur de bruit Unet (sans texte)
Une diffusion Unet qui n'utilise pas de texte, ses entrée et sortie sont les suivantes :
A l'intérieur du modèle, vous peut voir :
1. Les couches du modèle Unet sont principalement utilisées pour transformer les latents ;
2. Chaque couche opère sur la sortie de la couche précédente
3. connexion) l'alimente dans le traitement derrière le réseau
4. Convertissez le pas de temps en un vecteur d'intégration de pas de temps, qui peut être utilisé dans la couche.
Couches dans Unet Noise Predictor (avec texte)
Vous devez maintenant modifier le système précédent vers la version texte.
La principale partie de la modification consiste à ajouter la prise en charge de la saisie de texte (terme : conditionnement de texte), c'est-à-dire l'ajout d'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 en latents à travers la couche d'attention, et ensuite le prochain ResNet peut profiter de ce processus de message texte .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!