加载不同的稳定扩散格式
译者:片刻小哥哥
项目地址:https://huggingface.apachecn.org/docs/diffusers/using-diffusers/other-formats
原始地址:https://huggingface.co/docs/diffusers/using-diffusers/other-formats
稳定扩散模型有不同的格式,具体取决于它们训练和保存的框架以及下载它们的位置。转换这些格式以在 🤗 Diffusers 中使用可以让您使用该库支持的所有功能,例如 [使用不同的调度程序](调度程序) 为了推断, 构建自定义管道 以及各种技术和方法 优化推理速度 。
我们强烈建议使用
.safetensors
格式,因为它比传统的 pickled 文件更安全,传统的 pickled 文件很容易受到攻击,并且可以被利用来在您的计算机上执行任何代码(了解更多信息
加载安全张量
指导)。
本指南将向您展示如何转换其他稳定扩散格式以与🤗扩散器兼容。
PyTorch.ckpt
检查站 - 或
.ckpt
- 格式通常用于存储和保存模型。这
.ckpt
文件包含整个模型,大小通常为几 GB。虽然您可以加载和使用
.ckpt
直接使用文件
来自_single_file()
方法,通常最好将
.ckpt
文件到 🤗 Diffusers,因此两种格式都可用。
有两种转换选项
.ckpt
文件:使用空格来转换检查点或转换
.ckpt
带有脚本的文件。
用空格转换
最简单、最方便的转换方法
.ckpt
文件是使用
SD 到扩散器
空间。您可以按照空间上的说明进行转换
.ckpt
文件。
这种方法对于基本模型效果很好,但对于更定制的模型可能会遇到困难。如果它返回空的拉取请求或错误,您就会知道空间失败。在这种情况下,您可以尝试转换
.ckpt
带有脚本的文件。
用脚本转换
🤗 扩散器提供了
转换脚本
用于转换
.ckpt
文件。这种方法比上面的Space更可靠。
在开始之前,请确保您有 🤗 Diffusers 的本地克隆来运行脚本并登录到您的 Hugging Face 帐户,以便您可以打开拉取请求并将转换后的模型推送到 Hub。
huggingface-cli login
要使用该脚本:
- Git 克隆包含以下内容的存储库
.ckpt
您要转换的文件。对于这个例子,我们将其转换为 TemporalNet.ckpt
文件:
git lfs install
git clone https://huggingface.co/CiaraRowles/TemporalNet
- 在要从中转换检查点的存储库上打开拉取请求:
cd TemporalNet && git fetch origin refs/pr/13:pr/13
git checkout pr/13
-
转换脚本中有几个需要配置的输入参数,但最重要的是:
-
检查点路径
: 的路径.ckpt
要转换的文件。 原始配置文件
:定义原始架构配置的 YAML 文件。如果找不到此文件,请尝试在您找到该文件的 GitHub 存储库中搜索 YAML 文件.ckpt
文件。转储路径
:转换后模型的路径。
例如,您可以采取
cldm_v15.yaml
文件来自
ControlNet
因为 TemporalNet 模型是稳定扩散 v1.5 和 ControlNet 模型。
4. 现在您可以运行脚本来转换
.ckpt
文件:
python ../diffusers/scripts/convert_original_stable_diffusion_to_diffusers.py --checkpoint_path temporalnetv3.ckpt --original_config_file cldm_v15.yaml --dump_path ./ --controlnet
- 转换完成后,上传转换后的模型并测试结果 拉取请求 !
git push origin pr/13:refs/pr/13
Keras.pb 或.h5
🧪 这是一个实验性功能。目前 Convert KerasCV Space 仅支持稳定扩散 v1 检查点。
KerasCV 支持培训 稳定扩散 v1 和 v2。然而,它为试验稳定扩散模型进行推理和部署提供了有限的支持,而 🤗 Diffusers 为此目的提供了一套更完整的功能,例如不同的功能 噪声调度程序 , 闪光关注 , 和 其他 优化技术 。
这
转换 KerasCV
空间转换
.pb
或者
.h5
文件到 PyTorch,然后将它们包装在
StableDiffusionPipeline
所以它已经准备好进行推理了。转换后的检查点存储在 Hugging Face Hub 上的存储库中。
对于这个例子,我们将
sayakpaul/textual-inversion-kerasio
使用文本反转训练的检查点。它使用特殊的令牌
<我的有趣的猫>
个性化与猫的图像。
转换 KerasCV Space 允许您输入以下内容:
- 你的拥抱标志。
- 下载 UNet 和文本编码器权重的路径。根据模型的训练方式,您不一定需要提供 UNet 和文本编码器的路径。例如,文本反转仅需要文本编码器的嵌入,而文本到图像模型仅需要 UNet 权重。
- 占位符标记仅适用于文本反转模型。
- 这
output_repo_prefix
是存储转换后的模型的存储库的名称。
点击 提交 按钮自动转换 KerasCV 检查点!检查点成功转换后,您将看到包含转换后的检查点的新存储库的链接。点击新存储库的链接,您将看到 Convert KerasCV Space 生成了一个带有推理小部件的模型卡,用于尝试转换后的模型。
如果您更喜欢使用代码运行推理,请单击 用于扩散器 模型卡右上角的按钮可复制并粘贴代码片段:
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"sayakpaul/textual-inversion-cat-kerascv\_sd\_diffusers\_pipeline", use_safetensors=True
)
然后,您可以生成如下图像:
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"sayakpaul/textual-inversion-cat-kerascv\_sd\_diffusers\_pipeline", use_safetensors=True
)
pipeline.to("cuda")
placeholder_token = "<my-funny-cat-token>"
prompt = f"two {placeholder\_token} getting married, photorealistic, high quality"
image = pipeline(prompt, num_inference_steps=50).images[0]
A1111 LoRA 文件
Automatic1111 (A1111) 是一种流行的稳定扩散 Web UI,支持模型共享平台,例如 奇维泰 。使用低秩适应 (LoRA) 技术训练的模型特别受欢迎,因为它们训练速度快,并且文件大小比完全微调的模型小得多。 🤗 Diffusers 支持加载 A1111 LoRA 检查点 load_lora_weights() :
from diffusers import StableDiffusionXLPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"Lykon/dreamshaper-xl-1-0", torch_dtype=torch.float16, variant="fp16"
).to("cuda")
从 Civitai 下载 LoRA 检查点;这个例子使用了 Blueprintify SD XL 1.0 检查点,但请随意尝试任何 LoRA 检查点!
# uncomment to download the safetensor weights
#!wget https://civitai.com/api/download/models/168776 -O blueprintify.safetensors
使用以下命令将 LoRA 检查点加载到管道中 load_lora_weights() 方法:
pipeline.load_lora_weights(".", weight_name="blueprintify.safetensors")
现在您可以使用管道来生成图像:
prompt = "bl3uprint, a highly detailed blueprint of the empire state building, explaining how to build all parts, many txt, blueprint grid backdrop"
negative_prompt = "lowres, cropped, worst quality, low quality, normal quality, artifacts, signature, watermark, username, blurry, more than one bridge, bad architecture"
image = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
generator=torch.manual_seed(0),
).images[0]
image