🚀 Controlnet - v1.1 - 软边缘版本
Controlnet v1.1 是一款基于扩散模型的图像生成控制网络,它可以为预训练的大型扩散模型添加额外的条件控制,支持边缘图、分割图、关键点等多种条件输入,从而丰富了控制大型扩散模型的方法,进一步推动了相关应用的发展。
🚀 快速开始
Controlnet v1.1 是 Controlnet v1.0 的后续模型,由 Lvmin Zhang 在 lllyasviel/ControlNet-v1-1 中发布。
此检查点是将 原始检查点 转换为 diffusers
格式后的版本,可与 Stable Diffusion 结合使用,例如 runwayml/stable-diffusion-v1-5。
更多详细信息,请查看 🧨 Diffusers 文档。
ControlNet 是一种神经网络结构,通过添加额外条件来控制扩散模型。

此检查点对应于基于 软边缘 条件的 ControlNet。
✨ 主要特性
- 支持额外输入条件:ControlNet 可以控制预训练的大型扩散模型,支持边缘图、分割图、关键点等额外输入条件。
- 端到端学习:ControlNet 以端到端的方式学习特定任务的条件,即使训练数据集较小(< 50k),学习过程也很稳健。
- 训练速度快:训练 ControlNet 的速度与微调扩散模型相当,并且可以在个人设备上进行训练。如果有强大的计算集群,模型也可以扩展到大量(数百万到数十亿)的数据。
📦 安装指南
安装外部依赖
如果你想处理图像以创建辅助条件,需要安装以下外部依赖:
$ pip install controlnet_aux==0.3.0
安装 diffusers
及相关包
$ pip install diffusers transformers accelerate
💻 使用示例
基础用法
建议将此检查点与 Stable Diffusion v1-5 一起使用,因为该检查点是在其上进行训练的。实验表明,该检查点也可以与其他扩散模型(如经过微调的 Stable Diffusion)一起使用。
import torch
import os
from huggingface_hub import HfApi
from pathlib import Path
from diffusers.utils import load_image
from PIL import Image
import numpy as np
from controlnet_aux import PidiNetDetector, HEDdetector
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_softedge"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_softedge/resolve/main/images/input.png"
)
prompt = "royal chamber with fancy bed"
processor = HEDdetector.from_pretrained('lllyasviel/Annotators')
processor = PidiNetDetector.from_pretrained('lllyasviel/Annotators')
control_image = processor(image, safe=True)
control_image.save("./images/control.png")
controlnet = ControlNetModel.from_pretrained(checkpoint, torch_dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()
generator = torch.manual_seed(0)
image = pipe(prompt, num_inference_steps=30, generator=generator, image=control_image).images[0]
image.save('images/image_out.png')

📚 详细文档
模型详情
模型介绍
Controlnet 由 Lvmin Zhang 和 Maneesh Agrawala 在 Adding Conditional Control to Text-to-Image Diffusion Models 中提出。
论文摘要如下:
我们提出了一种神经网络结构 ControlNet,用于控制预训练的大型扩散模型,以支持额外的输入条件。ControlNet 以端到端的方式学习特定任务的条件,即使训练数据集较小(< 50k),学习过程也很稳健。此外,训练 ControlNet 的速度与微调扩散模型相当,并且可以在个人设备上进行训练。或者,如果有强大的计算集群,模型可以扩展到大量(数百万到数十亿)的数据。我们报告称,像 Stable Diffusion 这样的大型扩散模型可以通过 ControlNet 进行增强,以支持边缘图、分割图、关键点等条件输入。这可能会丰富控制大型扩散模型的方法,并进一步推动相关应用的发展。
其他已发布的 v1-1 检查点
作者发布了 14 种不同的检查点,每种检查点都在 Stable Diffusion v1-5 上针对不同类型的条件进行了训练:
软边缘 1.1 的改进
- 软边缘 1.1 在之前的 ControlNet 中被称为 HED 1.0。
- 之前的 cnet 1.0 训练数据集存在几个问题,包括:(1)一小部分灰度人体图像被重复了数千次(!!),导致之前的模型有些容易生成灰度人体图像;(2)一些图像质量较低,非常模糊,或有明显的 JPEG 伪影;(3)一小部分图像由于数据处理脚本中的错误而存在错误的配对提示。新模型解决了训练数据集中的所有问题,在许多情况下应该更加合理。
- 软边缘 1.1 在几乎 100% 的情况下明显优于 HED 1.0。这主要是因为 HED 或 PIDI 估计器倾向于在软边缘图中隐藏原始图像的损坏灰度版本,而之前的模型 HED 1.0 过拟合于恢复那个隐藏的损坏图像,而不是执行边界感知扩散。软边缘 1.1 的训练使用了 75% 的“安全”过滤,以去除控制图中隐藏的损坏灰度图像。这使得软边缘 1.1 非常稳健。在我们的测试中,软边缘 1.1 的可用性与深度模型相当,并且有潜力更频繁地使用。
更多信息
更多信息,请查看 Diffusers ControlNet 博客文章 和 官方文档。
📄 许可证
本项目采用 CreativeML OpenRAIL M 许可证。