前言
官方教程:Diffusers
博客地址:小yi不困
本文主要内容:
- 认识 Diffusers 库;
- 基于 Hugging Face 的 Diffusers 库创建自己的扩散模型。
认识 Diffusers 库
介绍
Diffusers 是一种预训练扩散模型库,可用于生成图像、音频甚至是分子的3D结构。
Diffusers 库有三个主要组件:
- diffusion pipelines :用于运行模型进行推理,diffusion pipline 是使用预训练的扩散系统进行推理的最简单方法,开箱即用(注意:pipelines 不能用于训练)。
- noise schedulers :用于控制训练时如何添加噪声以及在推理过程中如何生成去噪图像的算法,平衡生成速度和质量。
- 预训练的模型:可用作构建块,与 schedulers 结合,创建自己的端到端扩散系统。
使用方法
推荐在Colab上学习:https://colab.research.google.com/
安装必要的库。
!pip install --upgrade diffusers accelerate transformers
加载模型,创建一个 DiffusionPipeline 实例,并指定要下载的管道检查点。
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)
DiffusionPipeline 会下载并缓存所有建模、标记化和调度组件。
查看 pipeline,会发现 Stable Diffusion 管道由 UNet2DConditionModel 和 PNDMShceduler 等组成。
在”修改“里的”笔记本设置“选择 GPU 硬件加速器,连接后试着修改提示来生成想要的图像吧。
# 在GPU上运行管道
pipeline.to("cuda")
# 将文本提示传递给pipeline以生成图像,然后访问去噪图像
image = pipeline("An image of a dog in Picasso style").images[0]
image
# 保存图像
image.save("dm_dog.png")
这是我的毕加索风格小狗~
不同的调度器具有不同的去噪速度和质量权衡,可以切换不同的调度器来找到最适合的。
# 将默认的PNDMScheduler替换为EulerDiscreteScheduler
from diffusers import EulerDiscreteScheduler
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)
# 使用from_config()方法加载
pipeline.shceuler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)
pipeline.to("cuda")
image = pipeline("An image of a dog in Picasso style").images[0]
image
新的小狗画像出现了。
根据官方教程来试试其它扩散模型吧。
动手创建扩散模型
在“使用方法”的实例中,实际只使用了四行代码(加载模型,创建管道实例,定义文本提示,保存生成的图像)就实现了图像生成。管道包含一个 UNet2DConditionModel 模型和一个 PNDMShceduler 调度器。
我们可以更换Unet模型和调度器来实现自己的扩散模型。
分解一个基本管道
基本知识
以 DDPM (Denoising Diffusion Probabilistic Models)为例,该模型主要为前向加噪扩散 (data