Ce tutoriel est destiné aux personnes ayant déjà utilisé Stable Diffusion. Si vous ne l’avez jamais utilisé, rendez-vous sur cet article : les bases pour démarrer dans Stable Diffusion.

Dans cet article, on va aller un cran plus loin, en générant des photos inspirées de photos personnelles.

Dreambooth est une extension permettant d’intégrer n’importe quoi — votre tête, votre chien, votre jouet préféré — dans un modèle Stable Diffusion. Nous allons présenter ce qu’est Dreambooth, comment cela fonctionne et comment réaliser l’entraînement du modèle.

Vous suivrez un guide étape par étape pour préparer vos images d’entraînement et utiliser notre notebook Colab pour l’entraînement Dreambooth. Aucune compétence en codage n’est nécessaire !

Savez-vous que de nombreux modèles personnalisés sont entraînés avec Dreambooth ? Après avoir terminé ce tutoriel, vous saurez comment créer le vôtre.

Vous apprendrez d’abord ce qu’est Dreambooth et comment il fonctionne. Mais vous pouvez passer directement au guide étape par étape si vous êtes uniquement intéressé par l’entraînement.

Qu’est ce que DreamBooth ?

Dreambooth est une technique développée en 2022 par l’équipe de recherche de Google. Elle permet d’affiner les modèles de diffusion (comme Stable Diffusion) en intégrant un sujet personnalisé dans le modèle.

Pourquoi ce nom, Dreambooth ? Selon l’équipe de recherche de Google, c’est un peu comme une cabine photo, mais une fois que le sujet est capturé, il peut être synthétisé dans tous les contextes imaginables.

Ça semble prometteur, mais est-ce efficace ? Voici un exemple tiré de l’article de recherche. Avec seulement trois images d’un chien spécifique en entrée, le modèle « dreamboothé » peut générer des images du chien dans différents contextes.

De quoi avez-vous besoin pour entrainer un modèle avec Dreambooth ?

Vous aurez besoin de trois choses :

  1. Quelques images personnalisées
  2. Un identifiant unique (le nom précis de la chose / personne que vous importez)
  3. Un nom de classe

Dans l’exemple ci-dessus, on pourrait utiliser l’identifiant unique « Devora » et le nom de classe est dog.

Ensuite, vous devrez construire votre prompt :

a photo of [identifiant unique] [nom de classe]

Et un prompt de classe :

a photo of a [nom de classe]

Dans l’exemple ci-dessus, le prompt d’instance est :

a photo of Devora dog

Puisque Devora est un chien, le prompt de classe est :

a photo of a dog

Maintenant que vous comprenez ce dont vous avez besoin, plongeons dans l’entraînement !

NB : les prompts doivent être en anglais !

Le guide étape par étape

Dans notre cas, nous allons entrainer un modèle sur une personne, dans mon cas, un homme (moi 😅).

1/ Ouvrez le notebook Google Colab et faites-en une copie. Le Notebook

2/ Entrez le nom d’un modèle dans MODEL_NAME. Vous pouvez utiliser le modèle Stable Diffusion v1.5 (page HuggingFace). Vous trouverez plus de modèles sur HuggingFace ici. Le nom du modèle doit être au format utilisateur/modèle. Dans mon cas, comme je vais travailler sur des personnes, je vais utiliser :

SG161222/Realistic_Vision_V3.0_VAE


3/ Mettez le nom de la branche ( vous trouvez ça sur la page HuggingFace) dans mon cas, c’est main


Pour personnaliser vos images, vous devez utiliser deux types de prompts :

  1. Instance prompt : Pour mes images, j’ai besoin d’un identifiant unique : je vais choisir « photo of numerogeek man« 
  2. Class prompt : Pour la catégorie plus générale, on va mettre : « photo of man« .

Cela permet de différencier une instance spécifique (numerogeek, c’est-à-dire moi) d’une catégorie plus large (un homme, en général).

Dans output file, vous pouvez laisser comme c’est. Ce sera le fichier qui contient votre modèle, entrainé.

Votre notebook devrait ressembler à ça :

4/ Préparez vos photos qui serviront à l’entrainement.

Pour utiliser vos images dans l’entraînement, vous devrez d’abord les redimensionner à 512×512 pixels.

BIRME est un site pratique pour redimensionner les images :

  1. Glissez vos images sur la page BIRME.
  2. Ajustez le canevas de chaque image pour bien cadrer le sujet.
  3. Assurez-vous que la largeur et la hauteur soient toutes deux de 512 px.
  4. Cliquez sur « SAVE FILES » pour enregistrer les images redimensionnées sur votre ordinateur.

Je conseille d’en mettre une petite dizaine. Plus vous en mettez, plus le modèle va être long à entrainer.

Ces quelques images me serviront à entrainer le modèle, utilisez les vôtres 😉

5/ Dans colab, selectionnez le processeur A100

Et là, mettez le processeur A100 :

6/ Cliquez le bouton Play, et accepter les notifications de connexion à Google Drive

7/ Sélectionnez vos images : peu après avoir cliqué sur play, vous devriez avoir une invitation à envoyer vos images :

8/ Patientez, cela peut prendre jusqu’à 30 minutes.

9/ Faites un essai dans l’interface Colab: Voici mon prompt :
Photo of numerogeek man, sitting outside restaurant, wearing suit, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed eyes, high detailed skin, skin pores

Et en négative prompt :

disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

Puis, cliquez sur play. À ce stade, le rendu devrait être crade, mais ce n’est pas grave. On travaillera les prompts dans Automatic1111 :

Le modèle a été sauvegardé dans votre Google Drive (dans AI_PICS/models/my_dreambooth_model.safetensors).

10/ Stoppez le Colab Dreambooth (pour économiser vos unités de calculs)

11 / Lancez une instance d’Automatic1111 en suivant le tutoriel adéquat
Note : vous pouvez décocher les modèles précochés : on va utiliser celui qu’on vient de générer.

12/ Sélectionnez le modèle que vous venez de générer. Il porte le nom qu’il y avait dans le champs « Output file ». Si vous ne l’avez pas changé, c’est « my_dreambooth_model.safetensor »

13/ Promptez ! Il faut utiliser dans vos prompts le nom que vous avez donné dans le prompt d’instance : Voici un exemple de prompt :

A stylish photo of numerogeek man standing in a modern office environment, framed by a large window with a blurred cityscape in the background. He sports a fashionable hairstyle with blond, wavy hair neatly swept to one side. His gaze is direct and friendly, with a hint of a smile playing on his lips, suggesting approachability and charisma. He is dressed in a sharp navy blue suit with a pristine white shirt and a matching dark blue tie. His suit jacket is buttoned, adding to the formality of his attire, and he is making a subtle adjustment to his tie, giving the impression of meticulous attention to detail. The lighting is soft and natural, highlighting his features and lending an air of sophistication to the scene. sharp focus, natural lighting, subsurface scattering, f2, 35mm, film grain,(photorealistic:1. 4),(8k, RAW photo:1. 2), (best quality:1. 4),(ultra highres:1. 2)<lora:epiCRealismHelper:1>

Et en négative prompt :

animation, doll, anime, painting, cartoon, drawing, illustration, 3d, sketch, surreal, (cropped head), (cropped body), out of frame, crossed eyes, bad hands, ((disfigured)), ((deformed)), strange anatomy, (bad proportions), ((extra limbs)), (ugly), ((b&w)), weird colors, blurry, ((monochrome)), lowres, (low quality:2), jpeg artifacts, (deformed iris, deformed pupils, semi-realistic, cgi, render:1.4), text, close up, cropped, worst quality, low quality, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, dehydrated, bad anatomy, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, (deformed, distorted, disfigured:1.3), poorly drawn, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutated, disgusting, amputation.

Résultat :

Comme d’habitude : faites des essais : changez le sampling steps, la sampling method, touchez au CFG Scale… et voyez les outputs. En règle générale, je mets un batch size à 4, et je garde 1 image sur les 4 générées.

Exemples de prompts

Numerogeek journaliste

Prompt : a tenacious photo of (numerogeek man) journalist uncovering a high-stakes conspiracy in a bustling metropolis, weaving through crowded streets and dark alleyways, close up, Detailed clothes, green eyes, flowing hair, determined expression, shiny glossy skin, subsurface scattering, (sharp:0.7), [(colorful explosion psychedelic paint colors:1.21)::0.05], amazing fine detail, Nikon D850 film stock photograph Kodak Portra 400 camera f1.6 lens, rich colors, lifelike texture, dramatic lighting, urban environment, skyscrapers, neon signs, street vendors, dynamic composition, unreal engine, trending on ArtStation, cinestill 800 tungsten lora:epiCRealismHelper:1

Negative Prompt :

animation,doll,anime,painting,cartoon,drawing,illustration,3d,sketch,surreal,(cropped head), (cropped body),out of frame,crossed eyes, bad hands,((disfigured)),((deformed)),strange anatomy,(bad proportions),((extra limbs)),(ugly),((b&w)),weird colors,blurry,((monochrome)),lowres,(low quality:2),jpeg artifacts Asian, Japanese, Korean, Chinese, blurry, logo, watermark, signature, cropped, out of frame, worst quality, low quality, jpeg artifacts, poorly lit, overexposed, underexposed, glitch, error, out of focus, (semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, digital art, anime, manga:1.3), amateur, (poorly drawn hands, poorly drawn face:1.2), deformed iris, deformed pupils, morbid, duplicate, mutilated, extra fingers, mutated hands, poorly drawn eyes, mutation, deformed, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, incoherent, (deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.4), text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck

Résultat :

Numerogeek dramatic cinema shot

Prompt :

breathtaking professional photo of numerogeek man, dark background, rimlight, shoulder portrait, lora:epiCRealismHelper:0.8, masterpiece, award-winning, professional, highly detailed, RAW candid cinema, 16mm, color graded portra 400 film, remarkable color, ultra realistic, textured skin, remarkable detailed pupils, realistic dull skin noise, visible skin detail, skin fuzz, dry skin, shot with cinematic camera

Même Négative prompt que le précédent.

Résultat :

Astuce : trouver les bons prompts

avec ChatGPT

Passez une image dans chatGPT et demandez-lui de la décrire le plus précisément possible, avec ce prompt.

avec Civitai

Civitai propose une galerie d’images présentant les modèles et les Loras, comme ici par exemple. Lorsqu’on clique sur une image, le prompt associé s’affiche. C’est utile pour découvrir de nouveaux Loras ou trouver de l’inspiration pour ses propres prompts.

Aller plus loin

C’est seulement le début. Vous pouvez améliorer les images en entraînant vos modèles avec une base différente, comme le modèle Stable Diffusion 1.5, par exemple. Expérimentez également avec ControlNet, une extension très puissante. Il y a de nombreuses possibilités à explorer.

Ressources utiles :

Promptology : Une formation généraliste pour bien prompter. Le module sur Stable Diffusion est une excellente introduction.

Prompthero : une bibliothèque de prompt et de Lora

PoseMyArt : Utile pour donner à ControlNet les positions attendues.