Diffusers 文件
使模型適應新任務
加入 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=True
和 low_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
)是隨機初始化的。對影像修復模型進行微調很重要,否則模型會返回噪聲。