Diffusers documentation

Latent Diffusion

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Latent Diffusion

Latent Diffusion은 Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, Björn Ommer가 High-Resolution Image Synthesis with Latent Diffusion Models에서 제안했습니다.

해당 논문의 초록은 다음과 같습니다:

이미지 형성 과정을 노이즈 제거 오토인코더의 순차적 적용으로 분해함으로써, 확산 모델(DM)은 이미지 데이터 및 그 이상의 영역에서 최첨단 합성 결과를 달성합니다. 또한, 이러한 모델의 수식적 구성은 재학습 없이 이미지 생성 과정을 제어하는 유도 메커니즘을 가능하게 합니다. 그러나 이러한 모델은 일반적으로 픽셀 공간에서 직접 작동하므로, 강력한 DM의 최적화는 수백 개의 GPU 데이를 소모하고, 순차적 평가로 인해 추론 비용이 높습니다. 제한된 계산 자원에서도 DM의 품질과 유연성을 유지하면서 학습을 가능하게 하기 위해, 우리는 강력한 사전 학습된 오토인코더의 잠재 공간에 이를 적용합니다. 이전 연구와 달리, 이러한 표현 위에서 확산 모델을 학습하면 복잡도 감소와 세부 정보 보존 사이의 거의 최적의 지점에 도달할 수 있게 되며, 이는 시각적 충실도를 크게 향상시킵니다. 모델 아키텍처에 크로스 어텐션 레이어를 도입함으로써, 우리는 텍스트나 바운딩 박스 및 같은 일반적인 조건 입력에 대해 강력하고 유연한 생성기로 확산 모델을 전환시켰으며, 합성 방식의 고해상도 합성이 가능해졌습니다. 우리의 잠재 확산 모델(LDM)은 이미지 인페인팅에서 새로운 최첨단 성능을 달성하고, 무조건 이미지 생성, 의미론적 장면 합성, 초해상도 등 다양한 작업에서 매우 경쟁력 있는 성능을 보여주며, 픽셀 기반 DM과 비교할 때 계산 요구 사항을 크게 줄입니다.

원본 코드베이스는 CompVis/latent-diffusion에서 찾을 수 있습니다.

Scheduler의 가이드를 확인하여 스케줄러의 속도와 품질 사이의 트레이드오프를 탐색하는 방법을 배우고, 파이프라인 간 구성 요소 재사용 섹션을 확인하여 동일한 구성 요소를 여러 파이프라인에 효율적으로 로드하는 방법을 배워보세요.

LDMTextToImagePipeline

클래스 diffusers.LDMTextToImagePipeline

< >

( vqvae: diffusers.models.autoencoders.vq_model.VQModel | diffusers.models.autoencoders.autoencoder_kl.AutoencoderKLbert: PreTrainedModeltokenizer: PythonBackendunet: diffusers.models.unets.unet_2d.UNet2DModel | diffusers.models.unets.unet_2d_condition.UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler )

매개변수

  • vqvae (VQModel) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 벡터 양자화(VQ) 모델.
  • bert (LDMBertModel) — BERT 기반의 텍스트 인코더 모델.
  • tokenizer (BertTokenizer) — 텍스트를 토큰화하기 위한 BertTokenizer.
  • unet (UNet2DConditionModel) — 인코딩된 이미지 latents의 노이즈를 제거하기 위한 UNet2DConditionModel.
  • scheduler (SchedulerMixin) — 인코딩된 이미지 잠재를 디노이즈하기 위해 unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다.

Latent diffusion를 활용한 텍스트-이미지 생성을 위한 파이프라인입니다.

이 모델은 DiffusionPipeline에서 상속됩니다. 모든 파이프라인에 대해 구현된 일반적 메서드(다운로드, 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.

__call__

< >

( prompt: str | list[str]height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int | None = 50guidance_scale: float | None = 1.0eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = True**kwargs ) → ImagePipelineOutput or tuple

매개변수

  • prompt (str 또는 list[str]) — 이미지 생성을 안내하는 프롬프트 또는 프롬프트 목록입니다.
  • height (int, 선택 사항, 기본값 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 높이입니다.
  • width (int, 선택 사항, 기본값 self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 너비입니다.
  • num_inference_steps (int, 선택 사항, 기본값 50) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다.
  • guidance_scale (float, 선택 사항, 기본값 1.0) — guidance scale 값이 높을수록 모델은 이미지 품질이 낮아지는 대신 텍스트 prompt와 밀접하게 연결된 이미지를 생성하도록 유도됩니다. guidance_scale > 1일 때 guidance scale이 활성화됩니다.
  • eta (float, 선택 사항, 기본값 0.0) — DDIM 논문에서 정의된 파라미터 eta (η)에 해당합니다. DDIMScheduler에만 적용되며, 다른 스케줄러에서는 무시됩니다.
  • generator (torch.Generator, 선택 사항) — 생성을 결정적으로 만들기 위한 torch.Generator입니다.
  • latents (torch.Tensor, 선택 사항) — 가우시안 분포에서 샘플링된 사전 생성된 노이즈 latents로, 이미지 생성의 입력으로 사용됩니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤 generator를 사용하여 샘플링하여 latents 텐서를 생성합니다.
  • output_type (str, 선택 사항, 기본값 "pil") — 생성된 이미지의 출력 형식입니다. "pil" (PIL.Image), "np" (np.array) 또는 "pt" (torch.Tensor) 중 하나를 선택합니다.
  • return_dict (bool, 선택 사항, 기본값 True) — 일반 튜플 대신 ImagePipelineOutput을 반환할지 여부.

반환값

ImagePipelineOutput 또는 tuple

return_dict가 True인 경우 ImagePipelineOutput가 반환되고, 그렇지 않으면 첫 번째 요소가 생성된 이미지의 목록인 tuple이 반환됩니다.

생성을 위한 pipeline의 호출 함수.

예:

>>> from diffusers import DiffusionPipeline

>>> # load model and scheduler
>>> ldm = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")

>>> # run pipeline in inference (sample random noise and denoise)
>>> prompt = "A painting of a squirrel eating a burger"
>>> images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6).images

>>> # save images
>>> for idx, image in enumerate(images):
...     image.save(f"squirrel-{idx}.png")

LDMSuperResolutionPipeline

클래스 diffusers.LDMSuperResolutionPipeline

< >

( vqvae: VQModelunet: UNet2DModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler | diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler | diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler )

매개변수

latent diffusion를 사용한 이미지 초해상도 파이프라인

이 모델은 DiffusionPipeline에서 상속됩니다. 모든 파이프라인에 대해 구현된 일반적 메서드(다운로드, 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.

__call__

< >

( image: typing.Union[torch.Tensor, PIL.Image.Image] = Nonebatch_size: int | None = 1num_inference_steps: int | None = 100eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple

매개변수

  • image (torch.Tensor 또는 PIL.Image.Image) — Image 또는 프로세스의 시작점으로 사용될 이미지 배치의 텐서.
  • batch_size (int, 선택 사항, 기본값 1) — 생성할 이미지의 수.
  • num_inference_steps (int, 선택 사항, 기본값 100) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다.
  • eta (float, 선택 사항, 기본값 0.0) — DDIM 논문에서 정의된 파라미터 eta (η)에 해당합니다. DDIMScheduler에만 적용되며, 다른 스케줄러에서는 무시됩니다.
  • generator (torch.Generator 또는 list[torch.Generator], 선택 사항) — 생성을 결정적으로 만들기 위한 torch.Generator.
  • output_type (str, 선택 사항, 기본값 "pil") — 생성된 이미지의 출력 형식입니다. "pil" (PIL.Image), "np" (np.array) 또는 "pt" (torch.Tensor) 중 하나를 선택합니다.
  • return_dict (bool, 선택 사항, 기본값 True) — 일반 튜플 대신 ImagePipelineOutput을 반환할지 여부.

반환값

ImagePipelineOutput 또는 tuple

return_dict가 True인 경우 ImagePipelineOutput가 반환되고, 그렇지 않으면 첫 번째 요소가 생성된 이미지의 목록인 tuple이 반환됩니다.

생성을 위한 pipeline의 호출 함수.

예:

>>> import requests
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import LDMSuperResolutionPipeline
>>> import torch

>>> # load model and scheduler
>>> pipeline = LDMSuperResolutionPipeline.from_pretrained("CompVis/ldm-super-resolution-4x-openimages")
>>> pipeline = pipeline.to("cuda")

>>> # let's download an  image
>>> url = (
...     "https://user-images.githubusercontent.com/38061659/199705896-b48e17b8-b231-47cd-a270-4ffa5a93fa3e.png"
... )
>>> response = requests.get(url)
>>> low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
>>> low_res_img = low_res_img.resize((128, 128))

>>> # run pipeline in inference (sample random noise and denoise)
>>> upscaled_image = pipeline(low_res_img, num_inference_steps=100, eta=1).images[0]
>>> # save image
>>> upscaled_image.save("ldm_generated_image.png")

ImagePipelineOutput

클래스 diffusers.ImagePipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

매개변수

  • images (List[PIL.Image.Image] 또는 np.ndarray) — batch_size 길이의 노이즈 제거된 PIL 이미지 목록 또는 (batch_size, height, width, num_channels) 형태의 NumPy 배열.

이미지 파이프라인의 출력 클래스입니다.

Update on GitHub