Diffusers 文件

使模型適應新任務

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

使模型適應新任務

許多擴散系統共享相同的元件,允許您將一個預訓練模型適應於完全不同的任務。

本指南將向您展示如何透過初始化和修改預訓練的 UNet2DConditionModel 架構,將預訓練的文字到影像模型適應於影像修復。

配置 UNet2DConditionModel 引數

UNet2DConditionModel 預設接受輸入樣本中的 4 個通道(input sample)。例如,載入一個預訓練的文字到影像模型,如 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 AutoModel

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
unet = AutoModel.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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.