SDXL包括专门用于对低噪声阶段图像进行去噪,使之可以从基本模型生成更高质量图像的优化器模型。有两种方法可以使用优化程序:
1. 将基础模型和优化器模型一起使用以生成优化的图像
2. 使用基本模型生成图像,然后使用优化器模型为图像添加更多细节(这就是SDXL最初的训练方式)
下面分别介绍一下这两种方式的实现。
1. 基础+优化器模型
当同时使用基本模型和优化器模型来生成图像时,这被称为专家去噪器的集合。与将基本模型的输出传递给优化器模型相比(第二种方式),专家去噪器集合方法需要更少的总体去噪步骤,因此运行速度应该更快。但是,您将无法检查基础模型的输出,因为它仍然包含大量噪声。
作为专家去噪器的集合,基本模型在高噪声扩散阶段充当专家,细化器模型在低噪声扩散阶段用作专家。以下为加载基本模型和优化器模型的代码实现:
# 以下代码为程序运行进行设置
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
rom diffusers import DiffusionPipeline
import torch
# 加载基础模型
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")
# 加载优化器模型
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
torch_dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")
prompt = "A majestic lion jumping from a big stone at night"
image = base(
prompt=prompt,
num_inference_steps=40,
denoising_end=0.8,
output_type="latent",
).images # 这步的图像输出还不能直接查看
image = refiner(
prompt=prompt,
num_inference_steps=40,
denoising_start=0.8,
image=image,
).images[0]
image.show()
以下为输出结果