跳转至

使模型适应新任务

译者:片刻小哥哥

项目地址:https://huggingface.apachecn.org/docs/diffusers/training/adapt_a_model

原始地址:https://huggingface.co/docs/diffusers/training/adapt_a_model

许多扩散系统共享相同的组件,允许您将一项任务的预训练模型调整为完全不同的任务。

本指南将向您展示如何通过初始化和修改预训练的体系结构来调整预训练的文本到图像模型以进行修复 UNet2DConditionModel

配置 UNet2DConditionModel 参数

A UNet2DConditionModel 默认情况下接受 4 个通道 输入示例 。例如,加载预训练的文本到图像模型,例如 runwayml/stable-diffusion-v1-5 看看有多少 in_channels :

from diffusers import StableDiffusionPipeline

pipeline = StableDiffusionPipeline.from_pretrained("runwayml/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 = "runwayml/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,
)

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


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组