Aller au contenu principal

Module 4 — De texte vers image et d'image vers image

Le pipeline du module 1 démarrait sur du bruit pur. C'est le mode dit texte vers image (text2img). Mais rien n'oblige à démarrer sur du bruit : on peut aussi partir d'une image existante, la bruiter partiellement, puis laisser le modèle la débruiter sous la contrainte d'une nouvelle consigne. C'est le mode image vers image (img2img), et il ouvre un espace de manipulation que la génération pure ne permet pas.

Le principe : partir en cours de route sur la trajectoire de diffusion

Le mode texte vers image lance le débruitage depuis un latent tiré au hasard — pur bruit gaussien. Le mode image vers image effectue un travail préparatoire : il encode l'image de départ dans l'espace latent avec le VAE, puis y ajoute du bruit selon la trajectoire du planificateur, en s'arrêtant à une étape intermédiaire. Le débruitage reprend ensuite depuis cette étape, jusqu'à la fin.

L'unique paramètre qui gouverne ce mode est la force de débruitage (strength dans diffusers, souvent appelée denoising strength dans les interfaces graphiques). Elle indique à quelle proportion de la trajectoire on démarre.

  • Une force de 0 ne bruite pas du tout : le mode image vers image est un simple aller-retour dans le VAE, l'image ressort à peu près identique.
  • Une force de 1 bruite l'image jusqu'au bruit pur : autant lancer un texte vers image standard, l'image de départ n'a plus aucune influence.
  • Les valeurs utiles vivent entre 0,3 et 0,8.

Ce que chaque plage de force produit

ForceEffet sur l'imageCas d'usage
0,1 à 0,25retouche cosmétique, correction de couleuraffiner un rendu, corriger un défaut mineur
0,3 à 0,45même composition, style modifiépasser du photo au dessin, ambiance différente
0,5 à 0,65même structure, variantes marquéesvariantes de couleur, changement de matériau
0,7 à 0,85composition préservée, sujet transforméréinterprétation, la chaise devient un fauteuil
0,9 à 1,0image de départ à peine reconnaissableéquivalent d'un texte vers image

C'est le paramètre le plus intéressant du cours parce qu'il donne un contrôle continu sur la fidélité à l'image de départ, ce qu'aucun autre outil ne fournit aussi simplement.

Une variante de couleur, en douze lignes

Pour le fil rouge — décliner la chaise scandinave en trois couleurs sans en changer la forme — l'image vers image avec une force autour de 0,5 fait exactement ce qu'il faut : la structure est conservée, la teinte et le matériau changent.

import torch
from PIL import Image
from diffusers import StableDiffusionXLImg2ImgPipeline

pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
torch_dtype=torch.float16,
).to("cuda")

reference = Image.open("chaise-reference.png").convert("RGB").resize((1024, 1024))

for couleur, seuil in [("noyer fonce", 0.55), ("blanc laque", 0.50), ("bleu ardoise", 0.60)]:
image = pipeline(
prompt=f"une chaise scandinave en {couleur}, atelier lumineux, photographie produit",
image=reference,
strength=seuil,
num_inference_steps=30, # nombre reel = 30 * strength
guidance_scale=7.0,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save(f"chaise-{couleur.replace(' ', '-')}.png")

Un détail qui piège au premier essai : le nombre d'étapes effectivement exécuté n'est pas num_inference_steps, mais num_inference_steps * strength. Avec 30 étapes et une force de 0,5, le débruitage tourne sur 15 étapes seulement. Pour obtenir un rendu comparable au texte vers image à 30 étapes, il faut prévoir davantage d'étapes de départ lorsque la force est basse.

Chaîner les deux modes : produire, puis affiner

En pratique, on utilise rarement l'un sans l'autre. La chaîne la plus courante est en deux temps.

Premier passage en texte vers image, avec une consigne large et 30 étapes, pour produire une image qui capte l'idée générale. On accepte que le résultat soit un peu grossier — visages imparfaits, textures approximatives, quelques défauts locaux.

Second passage en image vers image sur ce résultat, avec une force basse (0,2 à 0,35), une consigne plus précise, et souvent un modèle différent (un modèle spécialisé « affinage » ou le SDXL Refiner). Cette seconde passe rehausse les détails sans modifier la composition.

C'est exactement la logique du raffineur de SDXL : deux modèles, le second prenant la relève sur les dernières étapes de débruitage pour se concentrer sur les détails fins.

Conserver la composition d'une image de référence

Une question revient : « je veux garder exactement la même pose, juste changer le style ». Avec image vers image seul, c'est difficile — au-delà de 0,4, la composition bouge. Deux réponses partielles existent avant d'aborder les grands moyens.

D'une part, garder la force basse (0,3 maximum) et travailler la consigne. D'autre part, utiliser une graine fixe et un planificateur déterministe, ce qui verrouille la part aléatoire de la trajectoire.

Mais si la contrainte est stricte — même pose, même contour, même profondeur — la vraie réponse est ControlNet (module 6). L'image vers image travaille sur la statistique globale du latent ; ControlNet injecte une structure explicite à chaque étape.

Grille de variantes systématique

Pour choisir vos réglages, générez une grille 3 sur 3 : trois graines en lignes, trois forces en colonnes (0,3 / 0,5 / 0,7). En quelques minutes, vous voyez à la fois quelle intensité correspond à ce que vous cherchez et si votre consigne se comporte bien à cette intensité. C'est le geste de méthode le plus rentable du cours.

En résumé

  • Le mode image vers image encode une image de départ dans le latent, la bruite partiellement, et laisse le modèle terminer le débruitage sous une nouvelle consigne.
  • La force de débruitage est le seul paramètre spécifique : basse pour un rafraîchissement, moyenne pour des variantes, haute pour une réinterprétation.
  • Le nombre d'étapes effectif vaut num_inference_steps * strength ; il faut prévoir plus d'étapes de départ lorsque la force est basse.
  • Le chaînage texte vers image puis image vers image (avec une seconde passe à force basse) est la façon standard d'affiner un rendu, exactement ce que fait le raffineur de SDXL.

Module suivant : la retouche par masque et l'extension de cadre, deux modes spécialisés pour modifier une partie de l'image sans en refaire l'ensemble.