ControlNet 是由 lllyasviel 開發的一個革命性神經網路架構,用於通過添加額外條件來控制擴散模型。這個項目是論文《Adding Conditional Control to Text-to-Image Diffusion Models》的官方實現,為文本到圖像生成領域帶來了前所未有的精確控制能力。
ControlNet 通過將神經網路塊的權重複製到"鎖定"副本和"可訓練"副本中來工作。這種設計的核心思想是:
ControlNet 在傳統的文本提示基礎上添加了一個額外的條件控制維度,使得用戶可以通過多種方式來指導圖像生成過程,包括:
項目支持多種預訓練的控制模型:
# 支持的控制類型示例
control_types = [
"canny", # 邊緣檢測
"depth", # 深度估計
"hed", # 軟邊緣檢測
"mlsd", # 線條檢測
"normal", # 法向量
"openpose", # 姿態檢測
"scribble", # 塗鴉控制
"seg", # 語義分割
]
ControlNet 的學習過程是端到端的,即使在訓練數據集很小(<50k)的情況下,學習過程也很穩健。訓練 ControlNet 的速度與微調擴散模型一樣快,甚至可以在個人設備上進行訓練。
ControlNet 的革命性之處在於它解決了空間一致性問題,為 AI 圖像生成帶來了前所未有的控制水平。
項目的主要組成部分包括:
ControlNet/
├── models/ # 模型定義
├── annotator/ # 各種條件檢測器
├── tutorials/ # 教程和示例
├── gradio_*.py # Gradio 界面文件
└── train.py # 訓練腳本
# 基本使用示例
from transformers import pipeline
# 加載 ControlNet 管道
pipe = pipeline("text-to-image", model="lllyasviel/sd-controlnet-canny")
# 生成圖像
result = pipe(
prompt="a beautiful landscape",
image=control_image, # 控制條件圖像
num_inference_steps=50
)
相比傳統的文本到圖像模型,ControlNet 提供了像素級的精確控制能力。
支持多種控制條件的組合使用,可以實現複雜的圖像生成需求。
項目代碼已經連接到 🤗 Hub,可以輕鬆集成到現有的工作流程中。
項目完全開源,擁有活躍的社區支持和持續的更新。
提供了夜間版本和改進的模型文件,包含更好的性能和額外的功能。
# 基本依賴
pip install torch torchvision
pip install transformers diffusers
pip install controlnet-aux # 輔助工具包
# 使用 Hugging Face Diffusers 庫
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import torch
# 加載 ControlNet 模型
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny")
# 創建管道
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16
)
ControlNet 代表了文本到圖像生成技術的重大突破,它不僅解決了傳統方法缺乏精確控制的問題,還為創意工作者和開發者提供了強大的工具。通過其創新的架構設計和豐富的控制條件,ControlNet 正在重新定義 AI 輔助創作的可能性。