控制图像质量
扩散模型的组件,如 UNet 和调度器,可以进行优化以提高生成的图像质量,从而获得更精细的细节。如果您没有足够的资源来简单地使用更大的模型进行推理,这些技术尤其有用。您可以在推理过程中启用这些技术,而无需进行任何额外的训练。
本指南将向您展示如何在您的管道中启用这些技术以及如何配置它们以提高生成图像的质量。
细节
FreeU 通过重新平衡 UNet 的主干和跳跃连接权重来改善图像细节。跳跃连接会导致模型忽略主干语义中的某些内容,这可能导致生成的图像中出现不自然的图像细节。此技术不需要任何额外的训练,并且可以在推理期间动态应用于图像到图像和文本到视频等任务。
在您的管道上使用 enable_freeu() 方法,并为主干 (b1
和 b2
) 和跳跃连接 (s1
和 s2
) 配置缩放因子。每个缩放因子后面的数字对应于应用因子的 UNet 中的阶段。查看 FreeU 存储库以了解不同模型的参考超参数。
Stable Diffusion v1-5
Stable Diffusion v2-1
Stable Diffusion XL
Zeroscope
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16, safety_checker=None
).to("cuda")
pipeline.enable_freeu(s1=0.9, s2=0.2, b1=1.5, b2=1.6)
generator = torch.Generator(device="cpu").manual_seed(33)
prompt = ""
image = pipeline(prompt, generator=generator).images[0]
image
调用 pipelines.StableDiffusionMixin.disable_freeu() 方法以禁用 FreeU。
pipeline.disable_freeu()