模型简介
模型特点
模型能力
使用案例
🚀 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。
✨ 主要特性
- 支持额外输入条件:ControlNet可以控制预训练的大型扩散模型,支持边缘图、分割图、关键点等额外输入条件。
- 端到端学习:ControlNet能够以端到端的方式学习特定任务的条件,即使训练数据集较小(< 50k),学习过程也很稳健。
- 训练速度快:训练ControlNet的速度与微调扩散模型相当,甚至可以在个人设备上进行训练。
- 可扩展性强:如果有强大的计算集群,模型可以扩展到处理大量(数百万到数十亿)的数据。
📦 安装指南
若要处理图像以创建辅助条件,需要安装以下外部依赖:
- 安装opencv:
$ pip install opencv-contrib-python
- 安装
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
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')
📚 详细文档
模型详情
属性 | 详情 |
---|---|
开发者 | Lvmin Zhang, Maneesh Agrawala |
模型类型 | 基于扩散的文本到图像生成模型 |
语言 | 英文 |
许可证 | CreativeML OpenRAIL M许可证是一种Open RAIL M许可证,改编自BigScience和RAIL Initiative在负责任AI许可领域的联合工作。有关此许可证的更多信息,请参阅关于BLOOM Open RAIL许可证的文章。 |
更多信息资源 | GitHub仓库,论文 |
引用格式 | @misc{zhang2023adding, title={Adding Conditional Control to Text-to-Image Diffusion Models}, author={Lvmin Zhang and Maneesh Agrawala}, year={2023}, eprint={2302.05543}, archivePrefix={arXiv}, primaryClass={cs.CV} } |
模型介绍
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在不同类型的条件下进行训练:
模型名称 | 控制图像概述 | 条件图像 | 控制图像示例 | 生成图像示例 |
---|---|---|---|---|
lllyasviel/control_v11p_sd15_canny |
基于Canny边缘检测进行训练 | 黑色背景上带有白色边缘的单色图像。 | ![]() |
![]() |
lllyasviel/control_v11e_sd15_ip2p |
基于像素到像素指令进行训练 | 无条件。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_inpaint |
基于图像修复进行训练 | 无条件。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_mlsd |
基于多级线段检测进行训练 | 带有注释线段的图像。 | ![]() |
![]() |
lllyasviel/control_v11f1p_sd15_depth |
基于深度估计进行训练 | 带有深度信息的图像,通常表示为灰度图像。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_normalbae |
基于表面法线估计进行训练 | 带有表面法线信息的图像,通常表示为彩色编码图像。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_seg |
基于图像分割进行训练 | 带有分割区域的图像,通常表示为彩色编码图像。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_lineart |
基于线稿生成进行训练 | 带有线稿的图像,通常是白色背景上的黑色线条。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15s2_lineart_anime |
基于动漫线稿生成进行训练 | 带有动漫风格线稿的图像。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_openpose |
基于人体姿态估计进行训练 | 带有人体姿态的图像,通常表示为一组关键点或骨架。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_scribble |
基于涂鸦式图像生成进行训练 | 带有涂鸦的图像,通常是随机或用户绘制的笔触。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_softedge |
基于软边缘图像生成进行训练 | 带有软边缘的图像,通常用于创建更具绘画感或艺术感的效果。 | ![]() |
![]() |
lllyasviel/control_v11e_sd15_shuffle |
基于图像打乱进行训练 | 带有打乱补丁或区域的图像。 | ![]() |
![]() |
lllyasviel/control_v11f1e_sd15_tile |
基于图像拼接进行训练 | 模糊图像或图像的一部分。 | ![]() |
![]() |
Canny 1.1的改进
- 训练数据集优化:之前的cnet 1.0训练数据集存在一些问题,如少量灰度人体图像被重复数千次,导致模型容易生成灰度人体图像;部分图像质量低、模糊或有明显的JPEG伪影;少量图像因数据处理脚本错误导致提示配对错误。新模型解决了这些问题,在许多情况下表现更合理。
- 强化训练:由于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许可证。这是一种Open RAIL M许可证,改编自BigScience和RAIL Initiative在负责任AI许可领域的联合工作。有关此许可证的更多信息,请参阅关于BLOOM Open RAIL许可证的文章。

