Diffusers 文档

将模型适配到新任务

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

将模型适配到新任务

许多扩散系统共享相同的组件,这允许您将为一个任务预训练的模型适配到完全不同的任务。

本指南将向您展示如何通过初始化和修改预训练的 UNet2DConditionModel 的架构,将预训练的文本到图像模型适配到图像修复。

配置 UNet2DConditionModel 参数

默认情况下,UNet2DConditionModel 接受 输入样本 中的 4 个通道。例如,加载一个预训练的文本到图像模型,如 stable-diffusion-v1-5/stable-diffusion-v1-5,并查看 in_channels 的数量

from diffusers import StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", use_safetensors=True)
pipeline.unet.config["in_channels"]
4

图像修复需要在输入样本中使用 9 个通道。您可以在预训练的图像修复模型(如 runwayml/stable-diffusion-inpainting)中查看此值

from diffusers import StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-inpainting", use_safetensors=True)
pipeline.unet.config["in_channels"]
9

要将您的文本到图像模型适配到图像修复,您需要将 in_channels 的数量从 4 更改为 9。

初始化一个 UNet2DConditionModel,使用预训练的文本到图像模型权重,并将 in_channels 更改为 9。更改 in_channels 的数量意味着您需要设置 ignore_mismatched_sizes=Truelow_cpu_mem_usage=False,以避免尺寸不匹配错误,因为形状现在不同了。

from diffusers import UNet2DConditionModel

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
unet = UNet2DConditionModel.from_pretrained(
    model_id,
    subfolder="unet",
    in_channels=9,
    low_cpu_mem_usage=False,
    ignore_mismatched_sizes=True,
    use_safetensors=True,
)

文本到图像模型中其他组件的预训练权重从它们的检查点初始化,但 unet 的输入通道权重 (conv_in.weight) 是随机初始化的。微调模型以进行图像修复非常重要,否则模型将返回噪声。

< > 在 GitHub 上更新