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 辅助创作的可能性。