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.

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.

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.

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 | ||||
| ModÚle de diffusion conditionné par la classe |
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 :
- Denoising Diffusion Implicit Models est une introduction de la mĂ©thode dâĂ©chantillonnage DDIM (utilisĂ©e par DDIMScheduler)
- GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models est une introduction de méthodes pour conditionner les modÚles de diffusion sur le texte
- eDiffi: Text-to-Image Diffusion Models with an Ensemble of Expert Denoisers montre comment diffĂ©rents types de conditionnement peuvent ĂȘtre utilisĂ©s ensemble pour contrĂŽler encore davantage les types dâĂ©chantillons gĂ©nĂ©rĂ©s
Vous avez identifiĂ© dâautres ressources intĂ©ressantes ? Faites-le nous savoir et nous les ajouterons Ă cette liste.