ControlNet
ControlNet est une architecture de réseau de neurones qui ajoute des contrôles de conditionnement spatial (contours, pose humaine, carte de profondeur, segmentation, etc.) aux modèles de diffusion texte-vers-image comme Stable Diffusion, sans détruire les capacités du modèle pré-entraîné.
- Catégorie
- Contrôle de la génération d’images IA / conditionnement spatial
- Auteurs
- Lvmin Zhang, Anyi Rao, Maneesh Agrawala
- Publication
- Février 2023 (arXiv: 2302.05543), publié à ICCV 2023
- Innovation clé
- « Zero convolutions » : convolutions 1×1 initialisées à zéro, qui grandissent progressivement pendant l’entraînement
- Compatible
- Stable Diffusion 1.5, SDXL, SD3.x et dérivés
- Conditionnements
- Canny edges, profondeur (Midas), pose humaine (OpenPose), segmentation, HED, scribble, lignes droites (M-LSD), carte normale
- Licence
- Open source (Apache 2.0)
- Composable
- Oui (plusieurs ControlNets combinables simultanément)
Le problème que ControlNet résout
Avant ControlNet, contrôler la composition spatiale d’une image générée par Stable Diffusion était un casse-tête. Le prompt textuel influence le contenu sémantique (« un chat sur un canapé »), mais il est notoirement mauvais pour spécifier la disposition spatiale précise des éléments : où exactement le chat est posé, quel angle de vue, quelle posture exactement. Les utilisateurs devaient générer des dizaines de variations et espérer tomber sur la bonne composition. Il n’existait pas de moyen efficace pour dire au modèle « garde cette structure spatiale, mais change le style ».
ControlNet résout ce problème de manière élégante. Il permet de fournir une image de contrôle (une carte de contours, une carte de profondeur, un squelette de pose humaine, etc.) qui guide la génération spatiale, en complément du prompt textuel. Le modèle respecte alors la structure spatiale de l’image de contrôle tout en suivant les instructions sémantiques du texte. C’est un changement fondamental qui a fait de ControlNet l’un des outils les plus adoptés de l’écosystème Stable Diffusion.
Architecture : l’élégance des zero convolutions
L’architecture de ControlNet repose sur un principe ingénieux. Le modèle de diffusion pré-entraîné (par exemple, le U-Net de Stable Diffusion) est verrouillé : ses poids ne sont jamais modifiés. À côté, une copie entraînable du même réseau est créée. Cette copie apprend le conditionnement spatial, tandis que l’original préserve intactes ses capacités de génération acquises sur des milliards d’images.
Les deux copies sont connectées par des zero convolutions : des couches de convolution 1×1 dont les poids et biais sont initialisés à zéro. Avant tout entraînement, ces convolutions produisent des sorties nulles, ce qui signifie que ControlNet n’introduit aucune distorsion dans le modèle original. Pendant l’entraînement, les paramètres croissent progressivement à partir de zéro, et le réseau apprend à injecter le signal de contrôle de manière douce et stable. C’est cette propriété qui rend l’entraînement robuste, même avec des datasets de petite taille (moins de 50 000 paires d’images).
Concrètement, l’image de conditionnement (512×512 pixels) est encodée par un petit réseau CNN (4 couches de convolution avec des noyaux 4×4 et des strides 2×2) pour produire un vecteur de conditionnement de 64×64, qui correspond à l’espace latent de Stable Diffusion. La structure est répétée 14 fois (une par bloc de l’encodeur et du bloc intermédiaire du U-Net), ce qui permet au ControlNet de réutiliser l’encodeur de Stable Diffusion comme un backbone profond, robuste et pré-entraîné pour apprendre le conditionnement.
Les modèles de conditionnement
ControlNet propose plusieurs types de conditionnement spatial, chacun adapté à des cas d’usage différents. Le choix du conditionnement détermine le type de contrôle que vous exercez sur l’image générée.
Canny Edge détecte les contours d’une image source et les utilise comme guide. C’est le modèle le plus fidèle à la composition d’origine : chaque contour est reproduit, y compris les détails du fond. Idéal pour transformer une photo en illustration tout en préservant exactement la structure. Les seuils du détecteur Canny sont ajustables pour plus ou moins de détail.
OpenPose extrait le squelette de la pose humaine (positions de la tête, des mains, des jambes, des épaules). Seule la pose corporelle est transmise au modèle, pas les détails de l’apparence. Vous pouvez ainsi imposer une posture précise tout en changeant complètement le personnage, le style vestimentaire et l’arrière-plan.
Depth (Midas) estime la carte de profondeur de l’image. Le modèle préserve les relations de distance (premier plan / arrière-plan) sans se soucier des détails de contour. C’est excellent pour maintenir la composition 3D d’une scène tout en laissant une grande liberté créative.
HED (Holistically-Nested Edge Detection) produit des contours plus doux et plus riches en détails que Canny. Les contours « soft » préservent davantage de nuances, ce qui rend ce modèle adapté à la recolorisation et à la stylisation d’images existantes.
Segmentation utilise une carte de segmentation sémantique (chaque pixel est classifié par catégorie : ciel, bâtiment, personne, arbre, etc.) pour contrôler la génération. Particulièrement utile pour les paysages urbains, architecturaux et les scènes complexes.
Scribble transforme un dessin à main levée grossier en image finalisée professionnelle. C’est le modèle le plus « magique » pour les non-artistes : un gribouillage approximatif suffit pour obtenir une image structurée et réaliste.
M-LSD (lignes droites) détecte les lignes droites de l’image, adapté aux scènes architecturales et aux environnements intérieurs. Normal Map encode les orientations de surface pour un contrôle fin de l’éclairage 3D.
Composabilité : combiner plusieurs conditionnements
L’un des aspects les plus puissants de ControlNet est sa composabilité. Plusieurs ControlNets peuvent être utilisés simultanément, leurs sorties s’additionnant pour créer un conditionnement combiné. Par exemple, vous pouvez combiner une carte de profondeur (pour la composition 3D) avec OpenPose (pour la pose du personnage) et Canny (pour les détails de contour du décor). Chaque ControlNet contrôle un aspect différent de l’image finale.
Cette composabilité fonctionne parce que tous les ControlNets contrôlent le même modèle Stable Diffusion : la « frontière » entre différents modèles de contrôle n’existe pas. En pratique, cette fonctionnalité est accessible via des interfaces comme Automatic1111 (plugin Mikubill) ou ComfyUI, qui permettent de configurer visuellement la combinaison de conditionnements.
Utilisation pratique
Avec Automatic1111 / ComfyUI
La manière la plus courante d’utiliser ControlNet est via l’extension Mikubill pour Automatic1111 WebUI ou via ComfyUI. Vous installez l’extension, téléchargez les modèles ControlNet depuis Hugging Face, et les placez dans le dossier approprié. L’interface permet de sélectionner le préprocesseur (Canny, OpenPose, Depth, etc.), d’uploader l’image source, d’ajuster les paramètres, et de lancer la génération. L’image de contrôle est automatiquement extraite de l’image source par le préprocesseur sélectionné.
Avec Diffusers (Python)
La bibliothèque Diffusers de Hugging Face intègre nativement ControlNet via le StableDiffusionControlNetPipeline. L’utilisation programmatique permet un contrôle fin et l’automatisation de workflows de génération. L’offloading CPU intelligent (enable_model_cpu_offload) permet de réduire la consommation mémoire GPU, un point important car ControlNet ajoute environ 700 millions de paramètres au pipeline standard.
Entraîner votre propre ControlNet
L’un des avantages majeurs de l’architecture est la facilité d’entraînement. Un dataset de paires (image de conditionnement, image cible) suffit. L’entraînement est robuste même avec des datasets de petite taille (moins de 50 000 paires), et peut se faire sur du matériel personnel grâce au verrouillage du modèle original. Vous pouvez ainsi créer des ControlNets personnalisés pour des types de conditionnement qui n’existent pas encore (par exemple, guidage par carte de chaleur, par flux optique, par n’importe quelle représentation spatiale de votre choix).
Impact et écosystème
ControlNet a eu un impact considérable sur l’écosystème de la génération d’images IA. Il a résolu le problème fondamental du manque de contrôle spatial, transformant Stable Diffusion d’un outil de génération aléatoire guidée par texte en un véritable outil de création dirigée. Des milliers de modèles ControlNet entraînés par la communauté sont disponibles sur Hugging Face, couvrant des cas d’usage allant du design d’intérieur au design de mode, en passant par l’animation, l’architecture et le game design.
L’architecture a inspiré des travaux dérivés : T2I-Adapter (un modèle beaucoup plus petit pour le même type de contrôle), ControlLoRA (implémentation de ControlNet via LoRA, plus légère en paramètres), et des adaptations pour SDXL, SD3 et d’autres modèles de diffusion. Le concept de « copie verrouillée + copie entraînable + zero convolutions » a aussi été réutilisé dans d’autres domaines que la génération d’images.
ControlNet est compatible avec les LoRA : vous pouvez combiner un modèle Stable Diffusion fine-tuné avec un LoRA stylistique et un ou plusieurs ControlNets pour un contrôle simultané du style et de la composition spatiale. Cette combinaison LoRA + ControlNet est devenue le workflow standard pour la production d’images IA de qualité professionnelle.
Guess Mode : génération sans prompt
ControlNet propose un mode expérimental appelé Guess Mode (ou « mode sans prompt »). Dans ce mode, vous fournissez uniquement l’image de conditionnement (contours, profondeur, pose) sans aucun prompt textuel. Le modèle « devine » ce que l’image représente et génère un résultat cohérent à partir de la seule information spatiale. C’est un mode fascinant qui révèle la profondeur de compréhension du modèle : à partir d’une simple carte de contours, Stable Diffusion peut inférer le sujet, les couleurs et le contexte.
En combinant le Guess Mode avec un script de génération automatique de légendes (par exemple BLIP), vous obtenez un pipeline entièrement automatique : image source → extraction de conditionnement → génération d’image → génération de légende → utilisation de la légende comme prompt pour une seconde diffusion. Ce pipeline itératif peut produire des résultats de qualité remarquable sans aucune intervention humaine sur le texte du prompt.
Limites
ControlNet ajoute un coût mémoire significatif (environ 700M paramètres supplémentaires par modèle de conditionnement). La combinaison de plusieurs ControlNets multiplie cette charge. La qualité du résultat dépend fortement de la qualité du préprocesseur : une carte de profondeur imprécise produira des résultats incohérents. Certains conditionnements (segmentation, normal map) exigent des images source de bonne qualité pour être efficaces. Enfin, les modèles ControlNet sont spécifiques à une version de Stable Diffusion : un ControlNet entraîné pour SD 1.5 ne fonctionne pas avec SDXL, et inversement.
Questions fréquentes
ControlNet est-il gratuit ?
Oui. ControlNet est entièrement open source (licence Apache 2.0). Les modèles, le code et les poids sont disponibles gratuitement sur GitHub et Hugging Face. Vous pouvez l’utiliser via Automatic1111, ComfyUI ou la bibliothèque Diffusers sans aucun coût. Le seul prérequis est un GPU avec suffisamment de VRAM (8 Go minimum recommandés pour un ControlNet avec SD 1.5).
Quelle est la différence entre ControlNet et un LoRA ?
ControlNet et LoRA sont complémentaires mais servent des objectifs différents. ControlNet ajoute un conditionnement spatial (pose, contours, profondeur) qui contrôle la structure et la composition de l’image. LoRA modifie le style ou le sujet du modèle (un personnage spécifique, un style artistique, un concept). Vous pouvez utiliser les deux simultanément : LoRA pour le style, ControlNet pour la composition.
Peut-on utiliser plusieurs ControlNets en même temps ?
Oui. Les ControlNets sont composables : leurs sorties s’additionnent pour créer un conditionnement combiné. Vous pouvez par exemple combiner OpenPose (pose humaine) avec Depth (profondeur) et Canny (contours). En pratique, cette fonctionnalité est disponible dans Automatic1111 via le plugin Mikubill et dans ComfyUI nativement. Attention : chaque ControlNet supplémentaire augmente la consommation mémoire GPU.
ControlNet fonctionne-t-il avec SDXL ?
Oui. Des checkpoints ControlNet spécifiques à SDXL existent sur Hugging Face. La bibliothèque Diffusers fournit un StableDiffusionXLControlNetPipeline dédié. Les modèles SDXL ControlNet sont encore en développement actif, avec une qualité variable selon le type de conditionnement. Un ControlNet entraîné pour SD 1.5 n’est pas compatible avec SDXL : il faut utiliser des checkpoints spécifiques à chaque version.
Quels cas d’usage concrets pour ControlNet ?
Les cas d’usage les plus courants sont : la transformation d’une photo en illustration tout en gardant la composition exacte (Canny), le repositionnement d’un personnage dans une pose précise (OpenPose), la création d’un concept art architectural à partir d’un plan 3D (Depth), la conversion d’un croquis approximatif en rendu professionnel (Scribble), et la recolorisation ou restylisation d’images existantes (HED). En production, ControlNet est utilisé dans le design de mode, l’architecture, l’animation, le storyboarding de films et la création de game art.