Module 1 — Diffusion latente : autoencodeur, U-Net, planificateur
Le cours sur l'IA générative posait le principe des modèles de diffusion : partir d'une image de bruit pur et la débruiter par petits pas jusqu'à obtenir une image plausible. Stable Diffusion en est l'incarnation la plus répandue, et l'astuce qui a permis son déploiement sur du matériel grand public tient en un mot : latente. Le débruitage n'a pas lieu sur les pixels — trop coûteux — mais dans un espace compressé bien plus petit.
Trois composants, un pipeline
Un modèle de diffusion latente n'est pas un unique réseau. C'est un assemblage de trois pièces, plus un encodeur de texte, que l'on peut voir comme une chaîne de responsabilités :
Trois responsabilités distinctes, qu'il faut savoir séparer parce qu'elles sont remplaçables indépendamment. Le VAE (autoencodeur variationnel) compresse et décompresse ; il ne connaît rien du texte. Le U-Net est le débruiteur, seul entraîné à la diffusion. Le planificateur (le mot est un anglicisme utile : scheduler) n'a pas de poids appris — c'est un algorithme numérique qui dicte, à chaque itération, quelle quantité de bruit retirer et comment mélanger le pas courant au précédent.
Pourquoi latent, et le nombre à retenir
Une image SD 1.5 fait 512 pixels de côté sur trois canaux, soit 786 432 valeurs. Le VAE la ramène à un latent de 64 sur 64 sur 4 canaux, soit 16 384 valeurs : un facteur 48. Toute la boucle de débruitage — qui peut compter 30 étapes — se déroule sur ce petit tenseur. C'est cette compression, et rien d'autre, qui fait tenir le modèle sur une carte grand public.
Le prix à payer se lit dans les artefacts. Le VAE fait des choix de reconstruction : il rétablit un visage plausible plutôt que l'exact visage encodé. Sur des détails fins — texte gravé, motif régulier, mains — la reconstruction se dégrade visiblement, même si le débruiteur travaille correctement. Ce n'est pas une faute du U-Net ; c'est une limite du VAE qui l'entoure.
Ce que change SDXL
SDXL sort en 2023 et devient la ligne de base recommandée en 2024-2026. Trois différences structurent tout le reste du cours.
D'abord, la résolution native passe à 1024 sur 1024, avec un espace latent de 128 sur 128 sur 4. Ensuite, SDXL conditionne sur deux encodeurs de texte concaténés (OpenCLIP et un second modèle), ce qui améliore la compréhension des consignes plus longues. Enfin, un SDXL Refiner optionnel prend en charge les dernières étapes de débruitage sur les détails fins.
SD 1.5 reste utile sur les machines modestes (moins de 6 Go de mémoire graphique) et pour l'écosystème massif de LoRA et ControlNet construit autour de lui.
Première génération, avec diffusers
Le pipeline de la bibliothèque diffusers cache l'assemblage : trois lignes suffisent à faire tourner la chaîne complète.
import torch
from diffusers import StableDiffusionXLPipeline
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
torch_dtype=torch.float16,
variant="fp16",
).to("cuda")
image = pipeline(
prompt="une chaise scandinave en chene clair, atelier lumineux, photographie produit",
num_inference_steps=30,
guidance_scale=7.0,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save("chaise-01.png")
Que fait exactement chaque paramètre, quels sont les compromis entre eux, et comment reproduire une image identique d'une session à l'autre : c'est le sujet des modules 2 et 3. Pour l'instant, retenez qu'un pipeline diffusers encapsule VAE, U-Net, planificateur et encodeur de texte, et que chacun peut être inspecté ou remplacé.
ComfyUI expose chacun de ces composants sous forme d'un nœud à câbler dans un graphe : c'est très pédagogique pour voir le flux. Le cours écrit tous ses exemples en diffusers pour rester lisible dans un dépôt de code, mais chaque étape a un équivalent nœud à nœud dans ComfyUI — et un utilisateur avancé de l'un lit très vite l'autre.
En résumé
- Un modèle de diffusion latente combine quatre pièces : VAE, U-Net, planificateur, encodeur de texte, dont seuls le VAE et le U-Net sont entraînés en amont.
- La compression dans l'espace latent — un facteur de l'ordre de 48 pour
SD 1.5— est ce qui rend l'inférence tenable sur une carte grand public. SDXLporte la résolution native à 1024, ajoute un second encodeur de texte, et propose un raffineur optionnel pour les dernières étapes.- La bibliothèque
diffusersmasque l'assemblage derrière unpipeline, mais chaque composant reste accessible pour être inspecté ou remplacé.
Module suivant : la consigne — comment elle est comprise, comment la pondérer, et ce que la consigne négative corrige réellement.