Vue d'ensemble

Dans cette unité, vous apprendrez à utiliser et à adapter les modÚles de diffusion pré-entraßnés de nouvelles façons. Vous verrez également comment nous pouvons créer des modÚles de diffusion qui prennent des entrées supplémentaires comme conditionnement pour contrÎler le processus de génération.

Vue d’ensemble de cette unitĂ© :rocket:

Les différentes étapes à suivre pour cette unité :

  • Lisez le matĂ©riel ci-dessous pour avoir une vue d’ensemble des idĂ©es clĂ©s de cette unitĂ©
  • Consultez le notebook _Finetuning et guidage_ pour finetuner un modĂšle de diffusion existant sur un nouveau jeu de donnĂ©es en utilisant la bibliothĂšque đŸ€— *Diffusers et pour modifier la procĂ©dure d’échantillonnage en utilisant le guidage.
  • Suivez l’exemple dans le notebook pour partager une dĂ©mo Gradio pour votre modĂšle personnalisĂ©
  • (Facultatif) Consultez le *notebook ModĂšle de diffusion conditionnĂ© par la classe pour voir comment nous pouvons ajouter un contrĂŽle supplĂ©mentaire au processus de gĂ©nĂ©ration
  • (Facultatif) Regardez cette vidĂ©o (en anglais) pour une prĂ©sentation informelle du matĂ©riel de cette unitĂ©

Finetuning

Comme vous avez pu le constater dans l’unitĂ© 1, entraĂźner des modĂšles de diffusion Ă  partir de zĂ©ro peut prendre beaucoup de temps ! Le temps et les donnĂ©es nĂ©cessaires pour entraĂźner un modĂšle Ă  partir de zĂ©ro peuvent devenir irrĂ©alisables, en particulier lorsque l’on passe Ă  des rĂ©solutions plus Ă©levĂ©es. Heureusement, il existe une solution : commencer par un modĂšle qui a dĂ©jĂ  Ă©tĂ© entraĂźnĂ© ! Ainsi, nous partons d’un modĂšle qui a dĂ©jĂ  appris Ă  dĂ©bruiter des images, et nous espĂ©rons que cela constituera un meilleur point de dĂ©part qu’un modĂšle initialisĂ© de maniĂšre alĂ©atoire.

Example images generated with a model trained on LSUN Bedrooms and fine-tuned for 500 steps on WikiArt

Le finetuning fonctionne gĂ©nĂ©ralement mieux si les nouvelles donnĂ©es ressemblent quelque peu aux donnĂ©es d’entraĂźnement originales du modĂšle de base (par exemple, commencer avec un modĂšle entraĂźnĂ© sur les visages est probablement une bonne idĂ©e si vous essayez de gĂ©nĂ©rer des visages de dessins animĂ©s), mais il est surprenant de constater que les avantages persistent mĂȘme si le domaine est modifiĂ© de maniĂšre assez radicale. L’image ci-dessus est gĂ©nĂ©rĂ©e Ă  partir d’un modĂšle entraĂźnĂ© sur le jeu de donnĂ©es LSUN Bedrooms et finetunĂ© sur 500 Ă©tapes sur le jeu de donnĂ©es WikiArt. Le script d’entraĂźnement est inclus Ă  titre de rĂ©fĂ©rence dans les notebooks de cette unitĂ©.

Guidage

Les modĂšles inconditionnels ne donnent pas beaucoup de contrĂŽle sur ce qui est gĂ©nĂ©rĂ©. Nous pouvons entraĂźner un modĂšle conditionnel (plus d’informations Ă  ce sujet dans la section suivante) qui prend des entrĂ©es supplĂ©mentaires pour aider Ă  diriger le processus de gĂ©nĂ©ration, mais que faire si nous avons dĂ©jĂ  entraĂźnĂ© un modĂšle inconditionnel que nous aimerions utiliser ? C’est lĂ  qu’intervient le guidage, un processus par lequel les prĂ©dictions du modĂšle Ă  chaque Ă©tape du processus de gĂ©nĂ©ration sont Ă©valuĂ©es par rapport Ă  une fonction de guidage et modifiĂ©es de maniĂšre Ă  ce que l’image finale gĂ©nĂ©rĂ©e corresponde mieux Ă  nos attentes.

guidance example image

Cette fonction de guidage peut ĂȘtre presque n’importe quoi, ce qui en fait une technique puissante ! Dans le notebook, nous partons d’un exemple simple (contrĂŽler la couleur, comme illustrĂ© dans l’exemple de sortie ci-dessus) pour arriver Ă  un exemple utilisant un puissant modĂšle prĂ©-entraĂźnĂ© appelĂ© CLIP qui nous permet de guider la gĂ©nĂ©ration sur la base d’une description textuelle.

Conditionnement

Le guidage est un excellent moyen d’exploiter davantage un modĂšle de diffusion inconditionnel, mais si nous disposons d’informations supplĂ©mentaires (telles qu’une Ă©tiquette de classe ou une lĂ©gende d’image) pendant l’entraĂźnement, nous pouvons Ă©galement les transmettre au modĂšle afin qu’il les utilise pour Ă©tablir ses prĂ©dictions. Ce faisant, nous crĂ©ons un modĂšle conditionnel, que nous pouvons contrĂŽler au moment de l’infĂ©rence en contrĂŽlant ce qui est fourni comme conditionnement. Le notebook montre un exemple de modĂšle conditionnĂ© par une classe qui apprend Ă  gĂ©nĂ©rer des images en fonction d’une Ă©tiquette de classe.

conditioning example

Il existe un certain nombre de façons de transmettre ces informations de conditionnement, par exemple

  • En les introduisant sous forme de canaux supplĂ©mentaires dans l’entrĂ©e du UNet. Cette mĂ©thode est souvent utilisĂ©e lorsque l’information de conditionnement a la mĂȘme forme que l’image, comme un masque de segmentation, une carte de profondeur ou une version floue de l’image (dans le cas d’un modĂšle de restauration/superrĂ©solution). Cela fonctionne aussi pour d’autres types de conditionnement. Par exemple, dans le notebook, l’étiquette de la classe est associĂ©e en avec un enchĂąssement puis Ă©tendue pour avoir la mĂȘme largeur et la mĂȘme hauteur que l’image d’entrĂ©e, de sorte qu’elle puisse ĂȘtre introduite sous forme de canaux supplĂ©mentaires.
  • La crĂ©ation d’un enchĂąssement et sa projection Ă  une taille correspondant au nombre de canaux Ă  la sortie d’une ou de plusieurs couches internes du UNet, puis son ajout Ă  ces sorties. C’est ainsi que le conditionnement du pas de temps est gĂ©rĂ©, par exemple. La sortie de chaque bloc Resnet est complĂ©tĂ©e par une projection de l’enchĂąssement du pas de temps. Ceci est utile lorsque vous avez un vecteur tel qu’une l’enchĂąssement CLIP comme information de conditionnement. Un exemple notable est ‘Image Variations’ version of Stable Diffusion qui fait exactement cela.
  • L’ajout de couches d’attention croisĂ©e qui peuvent s’occuper d’une sĂ©quence transmise en tant que conditionnement. Ceci est particuliĂšrement utile lorsque le conditionnement se prĂ©sente sous la forme d’un texte. Le texte est mis en correspondance avec une sĂ©quence d’enchĂąssements Ă  l’aide d’un transformer puis les couches d’attention croisĂ©e du UNet sont utilisĂ©es pour incorporer cette information dans le chemin de dĂ©bruitage. Nous verrons cela en action dans l’unitĂ© 3 lorsque nous examinerons comment Stable Diffusion gĂšre le conditionnement du texte.

Notebooks

Chapitre Colab Kaggle Gradient Studio Lab
Finetuning et guidage Open In Colab Kaggle Gradient Open In SageMaker Studio Lab
ModÚle de diffusion conditionné par la classe Open In Colab Kaggle Gradient Open In SageMaker Studio Lab

La plus grande partie du matĂ©riel se trouve dans Finetuning et guidage, oĂč nous explorons ces deux sujets Ă  travers des exemples travaillĂ©s. Le notebook montre comment vous pouvez finetuner un modĂšle existant sur de nouvelles donnĂ©es, ajouter des conseils, et partager le rĂ©sultat sous forme de dĂ©mo Gradio. Il y a un script d’accompagnement (finetune_model.py) qui facilite l’expĂ©rimentation de diffĂ©rents paramĂštres de finetuning, et un Space que vous pouvez utiliser comme patron pour partager votre propre dĂ©mo sur đŸ€— Spaces.

Dans le notebook ModĂšle de diffusion conditionnĂ© par la classe, nous montrons un bref exemple de crĂ©ation d’un modĂšle de diffusion conditionnĂ© par les Ă©tiquettes de classe Ă  l’aide du jeu de donnĂ©es MNIST. L’objectif est de dĂ©montrer l’idĂ©e principale aussi simplement que possible : en donnant au modĂšle des informations supplĂ©mentaires sur ce qu’il est censĂ© dĂ©bruiter, nous pouvons contrĂŽler ultĂ©rieurement les types d’images gĂ©nĂ©rĂ©es au moment de l’infĂ©rence.

Projet

En suivant les exemples du notebook Fine-tuning and Guidance, finetunez votre propre modĂšle ou choisissez un modĂšle existant, puis crĂ©ez une dĂ©mo Gradio pour mettre en valeur vos nouvelles compĂ©tences en guidage. N’oubliez pas de partager votre dĂ©mo sur Discord, Twitter, etc., afin que nous puissions admirer votre travail !

Ressources complémentaires

Une liste non exhaustive de ressources (en anglais) Ă  consulter :

Vous avez identifiĂ© d’autres ressources intĂ©ressantes ? Faites-le nous savoir et nous les ajouterons Ă  cette liste.