🚀 Controlnet - v1.1 - Canny版本
Controlnet v1.1是一款强大的图像生成控制模型,它通过添加额外条件来控制扩散模型,能与Stable Diffusion结合,实现如边缘图、分割图等条件输入,为图像生成带来更多可能性。
🚀 快速开始
Controlnet v1.1是Controlnet v1.0的后续模型,由Lvmin Zhang在lllyasviel/ControlNet-v1-1中发布。此检查点是将原始检查点转换为diffusers
格式,可与Stable Diffusion(如runwayml/stable-diffusion-v1-5)结合使用。
更多详情请查看🧨 Diffusers文档。
ControlNet是一种神经网络结构,通过添加额外条件来控制扩散模型。

此检查点对应基于Canny边缘的ControlNet。
✨ 主要特性
- 灵活控制:能控制预训练的大型扩散模型,支持额外输入条件,如边缘图、分割图、关键点等。
- 高效训练:学习特定任务条件时端到端,即使训练数据集小(< 50k)也很稳健,训练速度快,可在个人设备上进行。
- 可扩展性强:若有强大计算集群,可处理大量(数百万到数十亿)数据。
📦 安装指南
若要处理图像以创建辅助条件,需要安装以下外部依赖:
- 安装opencv:
$ pip install opencv-contrib-python
- 安装
diffusers
及相关包:
$ pip install diffusers transformers accelerate
💻 使用示例
基础用法
import torch
import os
from huggingface_hub import HfApi
from pathlib import Path
from diffusers.utils import load_image
import numpy as np
import cv2
from PIL import Image
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_canny"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_canny/resolve/main/images/input.png"
)
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
control_image = Image.fromarray(image)
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(33)
image = pipe("a blue paradise bird in the jungle", num_inference_steps=20, generator=generator, image=control_image).images[0]
image.save('images/image_out.png')
高级用法
建议将此检查点与Stable Diffusion v1-5配合使用,因为该检查点是基于此训练的。实验表明,此检查点也可与其他扩散模型(如经过微调的Stable Diffusion)结合使用。



📚 详细文档
模型详情
模型介绍
Controlnet由Lvmin Zhang和Maneesh Agrawala在Adding Conditional Control to Text-to-Image Diffusion Models中提出。
摘要如下:
我们提出了一种神经网络结构ControlNet,用于控制预训练的大型扩散模型,以支持额外输入条件。ControlNet以端到端的方式学习特定任务条件,即使训练数据集小(< 50k),学习过程也很稳健。此外,训练ControlNet的速度与微调扩散模型相当,且可在个人设备上进行训练。或者,若有强大的计算集群,模型可处理大量(数百万到数十亿)数据。我们发现,像Stable Diffusion这样的大型扩散模型可以与ControlNets结合,实现如边缘图、分割图、关键点等条件输入。这可能会丰富控制大型扩散模型的方法,并进一步推动相关应用的发展。
其他发布的检查点v1 - 1
作者发布了14种不同的检查点,每种都基于Stable Diffusion v1 - 5在不同类型的条件下进行训练:
Canny 1.1的改进
- 数据集优化:之前的cnet 1.0训练数据集存在一些问题,包括(1)一小部分灰度人体图像被重复了数千次,导致之前的模型有些容易生成灰度人体图像;(2)一些图像质量低、非常模糊或有明显的JPEG伪影;(3)一小部分图像由于数据处理脚本的错误而存在错误的配对提示。新模型解决了训练数据集的所有问题,在很多情况下应该更加合理。
- 强大训练资源:由于Canny模型是最重要(可能是最常用)的ControlNet之一,我们投入资金在一台配备8个Nvidia A100 80G的机器上以批量大小8×32 = 256训练了3天,花费了72×30 = 2160美元(8个A100 80G,每小时30美元)。该模型是在Canny 1.0的基础上继续训练的。
- 数据增强:在训练中应用了一些合理的数据增强方法,如随机左右翻转。
- 性能提升:虽然很难评估一个ControlNet,但我们发现Canny 1.1比Canny 1.0更稳健,视觉质量也略高。
更多信息
更多信息请查看Diffusers ControlNet博客文章和官方文档。
📄 许可证
本项目采用CreativeML OpenRAIL M许可证。