项目介绍:sd-controlnet-mlsd
背景简介
sd-controlnet-mlsd 是一个基于 ControlNet 的创新项目,目的是在图像生成中增加条件控制。ControlNet 是一种神经网络结构,通过引入附加条件,能够更加精准地控制扩散模型。这个项目的特别之处在于它借助 M-LSD 直线检测 技术对稳定扩散模型(Stable Diffusion)进行条件控制,能够更好地在文本输入与图像生成之间进行桥接。
模型详情
- 开发者:Lvmin Zhang 和 Maneesh Agrawala
- 模型类型:基于扩散的文本生成图像模型
- 使用语言:英语
- 许可证:CreativeML OpenRAIL M license,这是一个由 BigScience 和 RAIL Initiative 联合开发的负责任 AI 许可协议。
- 更多信息:可以查看项目的 GitHub 仓库,以及相关的 学术论文。
项目特点
ControlNet 是在 Adding Conditional Control to Text-to-Image Diffusion Models (为文本到图像扩散模型添加条件控制)一文中提出的一种方法。该方法可以在现有大规模扩散模型的基础上,引入额外的输入条件。它的学习过程非常高效,即使数据集很小(少于 5 万),在个人设备上也可以快速完成训练,当然也支持在大型计算集群上进行大规模数据训练。这种机制使得如稳定扩散模型(Stable Diffusion)这样的大型扩散模型能够接受条件输入,如边缘图、分割图、关键点等,这为图像生成带来了更多控制的可能。
发布的检查点
开发者发布了多个经过不同条件训练的检查点,其中以 M-LSD 检测为例:
- lllyasviel/sd-controlnet-mlsd 是通过 M-LSD 直线检测训练的模型,旨在从文本描述生成全新图像。
每个检查点都经过稳定扩散 v1-5 的训练,支持不同的控制方式,具体训练条件包括边缘检测、深度估计、骨骼图、以及其他图像特征。
使用指南
用户可以将这个检查点和稳定扩散 v1-5 结合使用,实验结果表明与其他扩散模型(如定制的稳定扩散模型)组合效果良好。同样,用户还需要安装一些外部依赖库来处理图像并创建辅助条件,这包括 controlnet_aux
和 diffusers
等库。
示例代码
项目中给出了一个简单的 Python 示例,展示了如何通过 M-LSD 直线检测控制生成图像:
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
from controlnet_aux import MLSDdetector
from diffusers.utils import load_image
mlsd = MLSDdetector.from_pretrained('lllyasviel/ControlNet')
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-mlsd/resolve/main/images/room.png")
image = mlsd(image)
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-mlsd", 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("room", image, num_inference_steps=20).images[0]
image.save('images/room_mlsd_out.png')
通过这段代码,用户可以看到输入的房间图像经过 M-LSD 处理后,再经过模型生成的输出效果。
训练细节
这个模型是在600,000对边缘图像和描述的基础上进行训练的,训练数据来自 Places2 数据集,并使用 BLIP 生成文本描述,深度哈夫变换生成边缘图像。整个训练过程使用了 Nvidia A100 80G GPU 持续约160小时。
更多阅读
关于项目的更多详细信息,大家可以参考 ControlNet 官方博客文章,进一步了解其开发背景及技术细节。