Sofortantwort
ControlNet einfach erklärt
Zusätzliche Kontrolle über Bildgenerierung durch Skizzen, Posen, Kanten.
- Kurz gesagt
- Ermöglicht strukturelle Kontrolle über generierte Bilder
- Typischer Einsatz
- Pose-basierte Generierung, Architektur-Visualisierung, Produkt-Design
- Wichtig zu wissen
- Funktioniert mit kompatiblen Diffusionsmodellen und passenden ControlNet-Gewichten
ControlNet im Überblick
ControlNet gibt dir Kontrolle über die Struktur von KI-generierten Bildern. Statt nur Text zu beschreiben, kannst du Skizzen, Posen oder Kanten vorgeben – die KI füllt den Rest kreativ aus.
Ohne ControlNet:
Prompt: "Person steht vor Gebäude"
→ KI entscheidet Pose, Perspektive, Komposition
→ Wenig Kontrolle
Mit ControlNet:
Prompt: "Person steht vor Gebäude"
+ Pose-Skeleton: [Arme ausgestreckt, Blick nach rechts]
+ Depth Map: [Gebäude im Hintergrund]
→ KI orientiert sich stärker an deinen Vorgaben
→ Mehr strukturelle Kontrolle
ControlNet-Typen:
| Typ | Eingabe | Nutzen |
|---|---|---|
| Canny | Kantenbild | Linien und Formen erhalten |
| OpenPose | Pose-Skeleton | Menschliche Posen vorgeben |
| Depth | Tiefenkarte | 3D-Struktur definieren |
| Scribble | Grobe Skizze | Aus Kritzeleien Bilder |
| Segmentation | Farbige Bereiche | Wo ist was im Bild? |
| Lineart | Saubere Linien | Manga/Anime-Stil |
| Normal Map | Oberflächenstruktur | Detaillierte 3D-Infos |
Technisch betrachtet
Wie ControlNet funktioniert
┌─────────────────┐ ┌─────────────────┐
│ Text Prompt │ │ Control Image │
│ "A woman..." │ │ (Pose/Edges) │
└────────┬────────┘ └────────┬────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Text Encoder │ │ ControlNet │
│ (CLIP) │ │ Encoder │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
▼
┌─────────────────────┐
│ U-Net (Diffusion) │
│ + ControlNet │
│ Conditioning │
└──────────┬──────────┘
▼
Generated Image
Kernidee:
- ControlNet ist eine trainierbare Kopie des U-Net Encoders
- Wird parallel zum Haupt-U-Net ausgeführt
- Injiziert strukturelle Information in den Diffusionsprozess
Preprocessing
Canny Edge Detection:
import cv2
image = cv2.imread("input.jpg")
edges = cv2.Canny(image, low_threshold, high_threshold)
# → Schwarz-weiß Kantenbild
OpenPose:
from controlnet_aux import OpenposeDetector
pose_detector = OpenposeDetector.from_pretrained("pose-detector-model")
pose = pose_detector(image)
# → Skeleton mit Keypoints
Depth Estimation:
from controlnet_aux import MidasDetector
depth_detector = MidasDetector.from_pretrained("depth-detector-model")
depth = depth_detector(image)
# → Grayscale Tiefenkarte
Verwendung mit Diffusers
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import torch
# ControlNet laden
controlnet = ControlNetModel.from_pretrained(
"controlnet-canny-model",
torch_dtype=model_dtype
)
# Pipeline erstellen
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"compatible-diffusion-model",
controlnet=controlnet,
torch_dtype=model_dtype
)
# Generieren
image = pipe(
prompt="A beautiful landscape, photorealistic",
image=canny_image, # Preprocessed control image
num_inference_steps=inference_steps,
controlnet_conditioning_scale=conditioning_scale
).images[0]
Multi-ControlNet
from diffusers import ControlNetModel, StableDiffusionControlNetPipeline
# Mehrere ControlNets laden
controlnets = [
ControlNetModel.from_pretrained("controlnet-pose-model"),
ControlNetModel.from_pretrained("controlnet-depth-model"),
]
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"compatible-diffusion-model",
controlnet=controlnets,
)
# Mit beiden Control Images
image = pipe(
prompt="A dancer in a forest",
image=[pose_image, depth_image],
controlnet_conditioning_scale=[pose_scale, depth_scale],
).images[0]
Parameter
| Parameter | Beschreibung | Einordnung |
|---|---|---|
controlnet_conditioning_scale | Stärke des ControlNet | abhängig von Motiv und Modell |
control_guidance_start | Ab welchem Step aktiv | je nach gewünschter Kontrolle testen |
control_guidance_end | Bis welchem Step aktiv | je nach gewünschter Freiheit testen |
Tipps:
- Niedrigere Scale = mehr kreative Freiheit
- Höhere Scale = striktere Befolgung
- Start/End anpassen für subtilere Kontrolle