🚀 Controlnet - Canny版本
ControlNet是一种神经网络结构,可通过添加额外条件来控制扩散模型。此检查点对应于基于Canny边缘的ControlNet,可与Stable Diffusion结合使用。
🚀 快速开始
本项目的ControlNet模型可与Stable Diffusion结合使用,以下是使用该模型生成图像的快速开始步骤:
- 安装必要的依赖库,如
opencv
、diffusers
等。
- 运行示例代码,即可根据输入的图像和提示词生成图像。
✨ 主要特性
- 条件控制:ControlNet能够为预训练的大型扩散模型添加额外的输入条件,如边缘图、分割图、关键点等,从而实现对图像生成过程的精细控制。
- 高效训练:训练ControlNet的速度与微调扩散模型相当,即使在小数据集(少于50k)上也能实现稳健学习,并且可以在个人设备上进行训练。
- 多模型适配:该模型可以与多种扩散模型结合使用,如Stable Diffusion,具有良好的通用性和扩展性。
📦 安装指南
若要使用本模型,需要安装一些外部依赖库:
- 安装
opencv
:
$ pip install opencv-contrib-python
- 安装
diffusers
及相关包:
$ pip install diffusers transformers accelerate
💻 使用示例
基础用法
import cv2
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
import numpy as np
from diffusers.utils import load_image
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-hed/resolve/main/images/bird.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)
image = Image.fromarray(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-canny", 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)
pipe.enable_xformers_memory_efficient_attention()
pipe.enable_model_cpu_offload()
image = pipe("bird", image, num_inference_steps=20).images[0]
image.save('images/bird_canny_out.png')
高级用法
示例代码展示了如何使用Canny边缘检测生成图像,你可以根据需要调整输入图像、提示词和模型参数,以实现不同的图像生成效果。
📚 详细文档
模型详情
@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进行增强,以支持边缘图、分割图、关键点等条件输入。这可能会丰富控制大型扩散模型的方法,并进一步推动相关应用的发展。
发布的检查点
作者发布了8种不同的检查点,每种检查点都基于 Stable Diffusion v1-5 在不同类型的条件下进行训练:
训练信息
Canny边缘模型在300万个边缘图像-标题对的数据集上进行训练。该模型以Stable Diffusion 1.5为基础模型,使用Nvidia A100 80G GPU进行了600小时的训练。
博客文章
如需了解更多信息,请查看 ControlNet官方博客文章。
🔧 技术细节
本项目的Canny边缘模型基于Stable Diffusion 1.5进行训练,通过添加额外的ControlNet结构,实现对图像生成过程的条件控制。模型在训练过程中使用了大量的边缘图像-标题对数据,以学习不同边缘特征与图像生成之间的关系。在推理阶段,模型可以根据输入的图像和提示词,生成具有特定边缘特征的图像。
📄 许可证
本项目使用 The CreativeML OpenRAIL M license 许可证,有关许可证的详细信息,请参阅 关于BLOOM Open RAIL许可证的文章。