🚀 Controlnet - v1.1 - 深度版本
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是一种通过添加额外条件来控制扩散模型的神经网络结构。

此检查点对应于基于深度图像的ControlNet。
✨ 主要特性
- 可结合Stable Diffusion:能与Stable Diffusion模型结合,如runwayml/stable-diffusion-v1-5,实现文本到图像的生成。
- 基于深度图像条件:该检查点基于深度图像进行条件控制,可生成与深度信息相关的图像。
- 解决训练数据问题:新版本的深度模型解决了之前训练数据集中存在的问题,如重复图像、低质量图像和错误配对提示等。
- 相对无偏模型:新的深度模型是一个相对无偏的模型,不依赖特定的深度估计方法,能更好地适应不同的深度估计和预处理分辨率。
- 数据增强:在训练过程中应用了合理的数据增强方法,如随机左右翻转。
- 兼容性好:该模型在深度1.0表现良好的所有情况下都能正常工作,并且在深度1.0失败的许多情况下也能有较好的表现。
📦 安装指南
若要处理图像以创建辅助条件,需要安装以下外部依赖:
$ pip install diffusers transformers accelerate
💻 使用示例
基础用法
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 transformers import pipeline
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_depth"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_depth/resolve/main/images/input.png"
)
prompt = "Stormtrooper's lecture in beautiful lecture hall"
depth_estimator = pipeline('depth-estimation')
image = depth_estimator(image)['depth']
image = np.array(image)
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(0)
image = pipe(prompt, num_inference_steps=30, generator=generator, image=control_image).images[0]
image.save('images/image_out.png')
高级用法
在上述基础用法的基础上,可以尝试不同的提示词、推理步数、随机种子等参数,以获得不同风格和效果的图像。例如,可以修改prompt
和num_inference_steps
参数:
prompt = "A beautiful landscape with a waterfall"
num_inference_steps = 50
generator = torch.manual_seed(1)
image = pipe(prompt, num_inference_steps=num_inference_steps, generator=generator, image=control_image).images[0]
image.save('images/image_out_advanced.png')

📚 详细文档
模型详情
模型介绍
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上基于不同类型的条件进行训练:
深度1.1的改进
- 训练数据集问题修复:之前的cnet 1.0训练数据集存在一些问题,包括(1)一小部分灰度人体图像被重复数千次,导致之前的模型有些容易生成灰度人体图像;(2)一些图像质量低、非常模糊或有明显的JPEG伪影;(3)一小部分图像由于数据处理脚本的错误而存在错误配对的提示。新模型修复了训练数据集的所有问题,在许多情况下应该更加合理。
- 相对无偏模型:新的深度模型是一个相对无偏的模型。它不是通过某种特定的深度估计方法针对特定类型的深度进行训练的。它不会过度拟合于某一种预处理器。这意味着该模型在不同的深度估计、不同的预处理器分辨率甚至由3D引擎创建的真实深度情况下都能更好地工作。
- 数据增强:在训练中应用了一些合理的数据增强方法,如随机左右翻转。
- 兼容性和改进:该模型是在深度1.0的基础上继续训练的,在深度1.0表现良好的所有情况下都应该能正常工作。如果不能正常工作,请提供图像并提交一个问题,我们将查看具体情况。深度1.1在深度1.0失败的许多情况下都能有较好的表现。
- 性能对比:如果使用Midas深度(Web UI插件中的“深度”)和384的预处理器分辨率,深度1.0和1.1之间的差异应该很小。然而,如果尝试其他预处理器分辨率或其他预处理器(如leres和zoe),预计深度1.1会比1.0稍好一些。
更多信息
更多信息,请查看Diffusers ControlNet博客文章和官方文档。
📄 许可证
本模型使用CreativeML OpenRAIL M许可证。