模型简介
模型特点
模型能力
使用案例
🚀 Controlnet - v1.1 - MLSD版本
Controlnet v1.1是一个强大的图像生成模型,它是Controlnet v1.0的继任者。该模型能够与Stable Diffusion结合使用,通过额外的条件输入,如边缘图、分割图等,实现对图像生成过程的精细控制,为图像创作带来更多可能性。
🚀 快速开始
安装依赖
若要使用此检查点处理图像以创建辅助条件,需要安装以下外部依赖:
- 安装https://github.com/patrickvonplaten/controlnet_aux
$ pip install controlnet_aux==0.3.0
- 安装
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
from PIL import Image
import numpy as np
from controlnet_aux import MLSDdetector
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_mlsd"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_mlsd/resolve/main/images/input.png"
)
prompt = "royal chamber with fancy bed"
processor = MLSDdetector.from_pretrained('lllyasviel/ControlNet')
control_image = processor(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')
示例图片
✨ 主要特性
- 条件控制:ControlNet可以控制预训练的大型扩散模型,支持额外的输入条件,如边缘图、分割图、关键点等。
- 高效训练:训练ControlNet的速度与微调扩散模型相当,并且可以在个人设备上进行训练。
- 数据适应性强:即使训练数据集较小(< 50k),学习过程也很稳健;若有强大的计算集群,模型也能扩展到大量(数百万到数十亿)数据。
📦 安装指南
安装外部依赖
$ pip install controlnet_aux==0.3.0
安装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
from PIL import Image
import numpy as np
from controlnet_aux import MLSDdetector
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_mlsd"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_mlsd/resolve/main/images/input.png"
)
prompt = "royal chamber with fancy bed"
processor = MLSDdetector.from_pretrained('lllyasviel/ControlNet')
control_image = processor(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')
📚 详细文档
模型详情
属性 | 详情 |
---|---|
开发者 | 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 |
使用图像平铺进行训练 | 模糊图像或图像的一部分。 | ![]() |
![]() |
MLSD 1.1的改进
- 训练数据集优化:之前的cnet 1.0训练数据集存在几个问题,包括(1)一小部分灰度人体图像被重复数千次,导致之前的模型有些容易生成灰度人体图像;(2)一些图像质量低、非常模糊或有明显的JPEG伪影;(3)一小部分图像由于数据处理脚本中的错误而存在错误的配对提示。新模型修复了训练数据集的所有问题,在许多情况下应该更加合理。
- 数据集扩充:通过使用MLSD查找包含超过16条直线的图像,新增了300K张图像,扩大了训练数据集。
- 数据增强:在训练中应用了一些合理的数据增强方法,如随机左右翻转。
- 持续训练:从MLSD 1.0恢复训练,并使用A100 80G GPU进行了200小时的持续训练。
更多信息
如需更多信息,请查看Diffusers ControlNet博客文章和官方文档。
📄 许可证
本模型使用CreativeML OpenRAIL M许可证。该许可证是一种Open RAIL M许可证,改编自BigScience和RAIL Initiative在负责任的AI许可领域的共同工作。另见关于BLOOM Open RAIL许可证的文章,本许可证基于该文章。

