描述
ControlNet 是一种新颖的神经网络架构,旨在为文本到图像的扩散模型提供精确的条件控制。它通过将扩散模型块的权重复制到一个锁定的原始副本和一个可训练的副本来实现这一点。可训练副本学习整合特定条件,例如边缘图、深度图或人物姿势,而锁定的副本则保留了原始、可生产的扩散模型的完整性。这种创新的方法可以在微调过程中防止预训练模型被破坏,即使使用小数据集,也使得在个人硬件上进行训练成为可能。
ControlNet 的核心机制涉及一个“零卷积”,即一个权重和偏置都初始化为零的 1x1 卷积。最初,这些零卷积输出零,确保 ControlNet 不会对扩散过程引入任何失真。随着训练的进行,这些层学会整合条件信息,而不会改变基础扩散模型的根本能力。这种方法计算效率高,与原始扩散模型相比,仅需要稍大的 GPU 内存占用。
ControlNet 支持多种条件输入,包括 Canny 边缘、M-LSD 线条、HED 边界、用户涂鸦、人物姿势、语义分割图和深度图。它还提供了一个“猜测模式”,允许模型即使在没有明确文本提示的情况下也能从控制图中推断内容,从而开辟了新的创意探索途径。ControlNet 的可组合性允许通过组合多个 ControlNet 实例来实现多条件控制。此外,ControlNet 可以与各种社区模型集成,为用户提供广泛的灵活性。
该项目提供了几个 Gradio 应用程序,方便用户轻松尝试不同的控制类型,展示了其在图像生成中的实际应用。它还包括用于注释数据和训练自定义 ControlNet 的脚本,使用户能够根据自己的特定需求调整技术。ControlNet 的开源性质,托管在 GitHub 上,促进了社区协作和进一步发展。
ControlNet 对于需要对图像合成进行更精细控制的艺术家、设计师、研究人员和生成式 AI 从业者尤其有价值。它能够利用现有的扩散模型同时添加精确的条件,使其成为创建高度特定和风格化视觉内容的强大工具。训练和集成方面的灵活性使其能够被广泛的用户群体所接受,从爱好者到高级 AI 从业者。
ControlNet亮点
为扩散模型添加条件控制
保留原始扩散模型权重
支持在小数据集上进行微调
支持多种条件输入(边缘、深度、姿势、涂鸦等)
具有用于无提示生成的“猜测模式”
可组合以实现多条件控制
兼容社区扩散模型
低 VRAM 模式,适用于资源受限环境
包含用于各种控制类型的 Gradio 应用程序
提供用于数据注释和训练的脚本
GitHub 上提供开源实现
支持 Stable Diffusion V1.5 和 V2
ControlNet入门
设置环境:使用提供的 environment.yaml 文件创建一个新的 conda 环境。
下载模型:从 Hugging Face 页面获取预训练的 ControlNet 模型和检测器模型。
组织文件:将 SD 模型放在 'ControlNet/models' 中,将检测器放在 'ControlNet/annotator/ckpts' 中。
运行 Gradio 应用程序:执行特定控制类型的 Python 脚本(例如,gradio_canny2image.py)。
通过 API 集成:在自定义扩散模型管道中使用 ControlNet 架构。
训练自定义模型:按照提供的步骤使用您自己的数据训练 ControlNet。
探索猜测模式:在 UI 中启用“猜测模式”以进行无提示图像生成。
组合 ControlNet:尝试组合多个 ControlNet 以实现多条件图像生成控制。
ControlNet的使用案例
- 条件图像生成
- 艺术风格迁移
- 图像编辑和操作
- 姿势引导图像合成
- 草图到图像生成
- 深度感知图像创建
- 语义分割控制
- 无提示图像生成





