Diffusers documentation

새 작업에 모델을 적응

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

새 작업에 모델을 적응

많은 diffusion 시스템은 동일한 구성 요소를 공유하므로, 한 작업에 대해 사전 학습된 모델을 완전히 다른 작업에 맞게 조정할 수 있습니다.

이 가이드에서는 사전 학습된 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

Inpainting은 입력 샘플에 9개의 채널이 필요합니다. stable-diffusion-v1-5/stable-diffusion-inpainting과 같은 사전 학습된 inpainting 모델에서 이 값을 확인할 수 있습니다:

from diffusers import StableDiffusionPipeline

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

인페인팅을 위해 텍스트-이미지 모델을 조정하려면 in_channels의 수를 4에서 9로 변경해야 합니다.

in_channels를 9로 변경하여 사전 학습된 텍스트-이미지 모델 가중치로 UNet2DConditionModel을 초기화합니다. in_channels의 수를 변경하면 이제 shape이 달라졌기 때문에 size mismatch 오류를 피하려면 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)는 무작위로 초기화됩니다. 인페인팅을 위해 모델을 파인튜닝하는 것이 중요하며, 그렇지 않으면 모델이 노이즈를 반환합니다.

Update on GitHub