许可证: openrail
基础模型: runwayml/stable-diffusion-v1-5
标签:
- 艺术
- 控制网
- 稳定扩散
- controlnet-v1-1
- 图像到图像
复制来源: ControlNet-1-1-preview/control_v11p_sd15_canny
Controlnet - v1.1 - Canny边缘版本
Controlnet v1.1 是 Controlnet v1.0 的继任模型,由 Lvmin Zhang 在 lllyasviel/ControlNet-v1-1 发布。
此检查点是 原始检查点 转换为 diffusers
格式的版本。它可以与 Stable Diffusion 结合使用,例如 runwayml/stable-diffusion-v1-5。
更多详情,请参阅 🧨 Diffusers 文档。
ControlNet 是一种通过添加额外条件来控制扩散模型的神经网络结构。

此检查点对应于基于 Canny边缘 条件的 ControlNet。
模型详情
简介
Controlnet 由 Lvmin Zhang 和 Maneesh Agrawala 在 Adding Conditional Control to Text-to-Image Diffusion Models 中提出。
摘要如下:
我们提出了一种神经网络结构 ControlNet,用于控制预训练的大型扩散模型以支持额外的输入条件。ControlNet 以端到端的方式学习任务特定条件,即使训练数据集较小(< 5万)也能稳健学习。此外,训练 ControlNet 与微调扩散模型一样快速,并且可以在个人设备上进行训练。如果有强大的计算集群可用,模型可以扩展到大量(数百万到数十亿)数据。我们报告称,像 Stable Diffusion 这样的大型扩散模型可以通过 ControlNet 增强,以支持边缘图、分割图、关键点等条件输入。这可能会丰富控制大型扩散模型的方法,并进一步促进相关应用。
示例
建议将此检查点与 Stable Diffusion v1-5 结合使用,因为检查点已在其上训练。实验上,该检查点也可与其他扩散模型(如 dreamboothed stable diffusion)一起使用。
注意:如果要处理图像以创建辅助条件,需要以下外部依赖:
- 安装 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')



其他发布的检查点 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 博客文章 并查看 官方文档。