ControlNet

Eine Technik zur Steuerung von Diffusionsmodellen durch zusätzliche Eingaben wie Skizzen, Posen oder Tiefenkarten – für kontrollierbare Bildgenerierung.

Fortgeschritten2 Min Lesezeit

Erklärung starten

Auf einen Blick

3 Punkte

  1. Ermöglicht strukturelle Kontrolle über generierte Bilder
  2. Eingaben: Canny Edges, Pose, Depth Map, Scribbles, Segmentation
  3. Funktioniert mit kompatiblen Diffusionsmodellen und passenden ControlNet-Gewichten

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:

TypEingabeNutzen
CannyKantenbildLinien und Formen erhalten
OpenPosePose-SkeletonMenschliche Posen vorgeben
DepthTiefenkarte3D-Struktur definieren
ScribbleGrobe SkizzeAus Kritzeleien Bilder
SegmentationFarbige BereicheWo ist was im Bild?
LineartSaubere LinienManga/Anime-Stil
Normal MapOberflächenstrukturDetaillierte 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

ParameterBeschreibungEinordnung
controlnet_conditioning_scaleStärke des ControlNetabhängig von Motiv und Modell
control_guidance_startAb welchem Step aktivje nach gewünschter Kontrolle testen
control_guidance_endBis welchem Step aktivje nach gewünschter Freiheit testen

Tipps:

  • Niedrigere Scale = mehr kreative Freiheit
  • Höhere Scale = striktere Befolgung
  • Start/End anpassen für subtilere Kontrolle

01Einsatzbereiche

Wann ist ControlNet sinnvoll?

Geeignet für

  • Pose-basierte GenerierungCharaktere in exakt vorgegebenen Posen generieren
  • Architektur-VisualisierungAus Skizzen fotorealistische Gebäude erstellen
  • Produkt-DesignKonzeptskizzen in fertige Produktbilder verwandeln
  • Konsistente CharaktereGleichen Charakter in verschiedenen Szenen

↑ Inhalt

02Werkzeuge

Womit ControlNet umgesetzt wird

↑ Inhalt

Merksatz

ControlNet ist wie ein Malbuch für KI

Du gibst die Umrisse vor (Skizze, Pose, Kanten), und die KI malt sie kreativ aus – du behältst die Kontrolle über die Struktur, die KI übernimmt die Details.

  1. Ermöglicht strukturelle Kontrolle über generierte Bilder
  2. Eingaben: Canny Edges, Pose, Depth Map, Scribbles, Segmentation
  3. Funktioniert mit kompatiblen Diffusionsmodellen und passenden ControlNet-Gewichten

04Redaktion

Herkunft und Stand

Redaktion und Aktualität

Ebenex RedaktionRedaktion

Veröffentlicht
Aktualisiert

Dieses Feld entwickelt sich schnell. Oben stehen Veröffentlichung und letzte Änderung; ein Prüfdatum kommt dazu, sobald die Erklärung nach ihrer letzten Änderung geprüft wurde.

↑ Inhalt

05FAQ

Häufige Fragen zu ControlNet

Was ist der Unterschied zu img2img?

img2img nutzt ein Bild als Startpunkt und variiert es. ControlNet extrahiert strukturelle Information (Kanten, Pose) und nutzt nur diese – mehr Kontrolle, mehr kreative Freiheit.

Welches ControlNet-Modell für welchen Zweck?

Canny: Kanten/Linien. OpenPose: Menschliche Posen. Depth: 3D-Struktur. Scribble: Grobe Skizzen. Segmentation: Bereiche definieren. Oft kombiniert man mehrere.

Kann ich ControlNet mit jedem Diffusionsmodell nutzen?

ControlNet-Gewichte müssen zum Basismodell und zur Architektur passen. Sie sind daher nicht beliebig zwischen Modellfamilien oder Versionen austauschbar.

Wie kombiniere ich mehrere ControlNets?

Mehrere ControlNets können kombiniert werden, etwa Pose und Tiefe. Die Gewichtung sollte pro Kontrollsignal getestet werden, weil zu starke Vorgaben Kreativität und Bildqualität beeinträchtigen können.

↑ Inhalt

06Weiterlernen

Was möchtest du als Nächstes verstehen?

  • Grundlage nachholen

    Image Segmentation

    Jeder Pixel wird einer Klasse zugeordnet – präziser als Bounding Boxes.

  • Technisch vertiefen

    Stable Diffusion

    Ein Modell, das aus Texten fotorealistische Bilder mithilfe von Diffusion erzeugt.

↑ Inhalt