项目介绍:sd-controlnet-depth
项目背景
sd-controlnet-depth是一个基于ControlNet的项目,结合了稳定扩散模型(Stable Diffusion)与深度估计条件输入。ControlNet是由Lvmin Zhang和Maneesh Agrawala提出的一种神经网络结构,用于向扩散模型添加额外的条件控制。
功能与特点
该项目的目的是实现一种能够自主学习特定任务条件的神经网络,即使在数据集较小的情况下(不超过5万),依然能进行有效的学习。以深度估计为条件输入的ControlNet,能够利用像深度图、边缘图、分割图等各种类型的数据来丰富大型扩散模型的控制方法,从而增强图像生成的功能。
模型详细信息
- 开发者:Lvmin Zhang, Maneesh Agrawala
- 模型类型:基于文本生成图像的扩散模型
- 使用语言:英文
- 许可证:CreativeML OpenRAIL M许可证
- 更多信息:可以通过GitHub Repository和相关学术论文进一步了解。
sd-controlnet-depth模型
sd-controlnet-depth是专门针对深度估计进行训练的ControlNet版本。深度估计通过Midas算法实现,输出的是灰度图像,黑色表示深度较深的区域,白色表示较浅的区域。
应用实例
-
安装环境:首先需要安装
diffusers
和相关包。$ pip install diffusers transformers accelerate
-
运行代码:以下是一个基本的示例,展示了如何使用sd-controlnet-depth生成包含深度信息的图像。
from transformers import pipeline from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler from PIL import Image import numpy as np import torch from diffusers.utils import load_image depth_estimator = pipeline('depth-estimation') image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-depth/resolve/main/images/stormtrooper.png") image = depth_estimator(image)['depth'] image = np.array(image) image = image[:, :, None] image = np.concatenate([image, image, image], axis=2) image = Image.fromarray(image) controlnet = ControlNetModel.from_pretrained( "lllyasviel/sd-controlnet-depth", 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("Stormtrooper's lecture", image, num_inference_steps=20).images[0] image.save('./images/stormtrooper_depth_out.png')
模型训练
深度模型通过3百万对深度图像和描述进行训练,深度图像由Midas生成。使用Nvidia A100 80G GPU进行训练大约耗时500小时,基础模型为Stable Diffusion 1.5。
额外信息
更多详细信息和使用教程可以参考ControlNet的官方博客文章。