模型简介
模型特点
模型能力
使用案例
🚀 Controlnet - 人体姿态版本
ControlNet 是一种神经网络结构,通过添加额外条件来控制扩散模型。此检查点对应于基于人体姿态估计的 ControlNet,可与 Stable Diffusion 结合使用。
🚀 快速开始
本模型可与 Stable Diffusion v1 - 5 结合使用。实验表明,该检查点也可与其他扩散模型(如经过微调的 Stable Diffusion)配合使用。
若要处理图像以创建辅助条件,需要安装外部依赖,步骤如下:
- 安装 https://github.com/patrickvonplaten/controlnet_aux
$ pip install controlnet_aux
- 安装
diffusers
及相关包:
$ pip install diffusers transformers accelerate
- 运行代码:
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
from controlnet_aux import OpenposeDetector
from diffusers.utils import load_image
openpose = OpenposeDetector.from_pretrained('lllyasviel/ControlNet')
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-openpose/resolve/main/images/pose.png")
image = openpose(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-openpose", torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", controlnet=controlnet, safety_checker=None, torch_dtype=torch.float16
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
# Remove if you do not have xformers installed
# see https://huggingface.co/docs/diffusers/v0.13.0/en/optimization/xformers#installing-xformers
# for installation instructions
pipe.enable_xformers_memory_efficient_attention()
pipe.enable_model_cpu_offload()
image = pipe("chef in the kitchen", image, num_inference_steps=20).images[0]
image.save('images/chef_pose_out.png')
✨ 主要特性
ControlNet 能够控制预训练的大型扩散模型,以支持额外的输入条件。它可以端到端地学习特定任务的条件,即使在训练数据集较小(< 50k)的情况下,学习过程也很稳健。训练 ControlNet 的速度与微调扩散模型相当,并且可以在个人设备上进行训练。如果有强大的计算集群,该模型也可以扩展到处理大量(数百万到数十亿)的数据。
📦 安装指南
- 安装 https://github.com/patrickvonplaten/controlnet_aux
$ pip install controlnet_aux
- 安装
diffusers
及相关包:
$ pip install diffusers transformers accelerate
💻 使用示例
基础用法
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
from controlnet_aux import OpenposeDetector
from diffusers.utils import load_image
openpose = OpenposeDetector.from_pretrained('lllyasviel/ControlNet')
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-openpose/resolve/main/images/pose.png")
image = openpose(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-openpose", torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", controlnet=controlnet, safety_checker=None, torch_dtype=torch.float16
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
# Remove if you do not have xformers installed
# see https://huggingface.co/docs/diffusers/v0.13.0/en/optimization/xformers#installing-xformers
# for installation instructions
pipe.enable_xformers_memory_efficient_attention()
pipe.enable_model_cpu_offload()
image = pipe("chef in the kitchen", image, num_inference_steps=20).images[0]
image.save('images/chef_pose_out.png')
📚 详细文档
模型详情
属性 | 详情 |
---|---|
开发者 | Lvmin Zhang, Maneesh Agrawala |
模型类型 | 基于扩散的文本到图像生成模型 |
语言 | 英语 |
许可证 | CreativeML OpenRAIL M 许可证 是一种 Open RAIL M 许可证,改编自 BigScience 和 RAIL Initiative 在负责任的人工智能许可领域的联合工作。另见 关于 BLOOM Open RAIL 许可证的文章,本许可证基于该文章。 |
更多信息资源 | GitHub 仓库,论文 |
引用格式 | @misc{zhang2023adding, |
简介
Controlnet 由 Lvmin Zhang 和 Maneesh Agrawala 在 Adding Conditional Control to Text-to-Image Diffusion Models 中提出。
论文摘要如下:
我们提出了一种神经网络结构 ControlNet,用于控制预训练的大型扩散模型,以支持额外的输入条件。ControlNet 可以端到端地学习特定任务的条件,即使训练数据集较小(< 50k),学习过程也很稳健。此外,训练 ControlNet 的速度与微调扩散模型相当,并且可以在个人设备上进行训练。或者,如果有强大的计算集群,该模型可以扩展到处理大量(数百万到数十亿)的数据。我们发现,像 Stable Diffusion 这样的大型扩散模型可以通过 ControlNets 进行增强,以支持边缘图、分割图、关键点等条件输入。这可能会丰富控制大型扩散模型的方法,并进一步推动相关应用的发展。
已发布的检查点
作者发布了 8 个不同的检查点,每个检查点都基于 Stable Diffusion v1 - 5 在不同类型的条件下进行训练:
模型名称 | 控制图像概述 | 控制图像示例 | 生成图像示例 |
---|---|---|---|
lllyasviel/sd - controlnet - canny 使用 Canny 边缘检测进行训练 |
黑色背景上带有白色边缘的单色图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet - depth 使用 Midas 深度估计进行训练 |
黑色代表深区域,白色代表浅区域的灰度图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet - hed 使用 HED 边缘检测(软边缘)进行训练 |
黑色背景上带有白色软边缘的单色图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet - mlsd 使用 M - LSD 线检测进行训练 |
黑色背景上仅由白色直线组成的单色图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet - normal 使用法线贴图进行训练 |
法线贴图 图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet_openpose 使用 OpenPose 骨骼图像进行训练 |
[OpenPose 骨骼](https://github.com/CMU - Perceptual - Computing - Lab/openpose) 图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet_scribble 使用人类涂鸦进行训练 |
黑色背景上带有白色轮廓的手绘单色图像。 | ![]() |
![]() |
lllyasviel/sd - controlnet_seg 使用语义分割进行训练 |
ADE20K 的分割协议图像。 | ![]() |
![]() |
训练
Openpose 模型在 200k 个姿态图像 - 字幕对上进行训练。姿态估计图像使用 Openpose 生成。该模型以 Stable Diffusion 1.5 为基础模型,使用 Nvidia A100 80G 进行了 300 GPU 小时的训练。
博客文章
如需更多信息,请查看 ControlNet 官方博客文章。
🔧 技术细节
Openpose 模型在 200k 个姿态图像 - 字幕对上进行训练。姿态估计图像使用 Openpose 生成。该模型以 Stable Diffusion 1.5 为基础模型,使用 Nvidia A100 80G 进行了 300 GPU 小时的训练。
📄 许可证
本模型使用 CreativeML OpenRAIL M 许可证,这是一种 Open RAIL M 许可证,改编自 BigScience 和 RAIL Initiative 在负责任的人工智能许可领域的联合工作。另见 关于 BLOOM Open RAIL 许可证的文章,本许可证基于该文章。
⚠️ 重要提示
如果要处理图像以创建辅助条件,需要安装外部依赖。
💡 使用建议
建议将此检查点与 Stable Diffusion v1 - 5 结合使用,因为该检查点是基于此模型进行训练的。

