Diffusers documentation
DDIM
DDIM
Jiaming Song, Chenlin Meng, Stefano Ermon의 Denoising Diffusion Implicit Models(DDIM).
해당 논문의 초록은 다음과 같습니다:
디노이징 확산 확률 모델(DDPM)은 적대적 학습 없이 고품질 이미지 생성을 달성했지만, 샘플을 생성하려면 마르코프 체인을 여러 단계에 걸쳐 시뮬레이션해야 합니다. 샘플링을 가속화하기 위해, 우리는 DDPM과 동일한 학습 절차를 가지며 더 효율적인 반복적 암시적 확률 모델 클래스인 디노이징 확산 암시적 모델(DDIM)을 제시합니다. DDPM에서 생성 과정은 마르코프 확산 과정의 역과정으로 정의됩니다. 우리는 동일한 학습 목적 함수를 유도하지만, 그 역과정에서 샘플링 속도가 훨씬 더 빠를 수 있는 비마르코프 확산 과정 클래스를 구성합니다. 우리는 DDIM이 DDPM에 비해 실제 시간 기준 10배에서 50배 더 빠르게 고품질 샘플을 생성할 수 있음을 경험적으로 입증했으며, 이는 계산량과 샘플 품질 간의 트레이드오프를 허용하고, 잠재 공간에서 의미론적으로 의미 있는 이미지 보간을 직접 수행할 수 있음을 보여줍니다.
원본 코드베이스는 ermongroup/ddim에서 찾을 수 있습니다.
DDIMPipeline
클래스 diffusers.DDIMPipeline
< source >( unet: UNet2DModelscheduler: DDIMScheduler )
매개변수
- unet (UNet2DModel) —
인코딩된 이미지 latents의 노이즈를 제거하기 위한
UNet2DModel. - scheduler (SchedulerMixin) —
인코딩된 이미지를 디노이즈하기 위해
unet와 함께 사용할 스케줄러입니다. DDPMScheduler 또는 DDIMScheduler 중 하나를 사용할 수 있습니다.
이미지 생성을 위한 Pipeline.
이 모델은 DiffusionPipeline에서 상속됩니다. 모든 파이프라인에 대해 구현된 일반적 메서드(다운로드, 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
__call__
< source >( batch_size: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneeta: float = 0.0num_inference_steps: int = 50use_clipped_model_output: bool | None = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
매개변수
- batch_size (
int, 선택 사항, 기본값 1) — 생성할 이미지의 수입니다. - generator (
torch.Generator, 선택 사항) — 생성을 결정적으로 만들기 위한torch.Generator입니다. - eta (
float, 선택 사항, 기본값 0.0) — DDIM 논문에서 정의된 파라미터 eta (η)에 해당합니다. DDIMScheduler에만 적용되며, 다른 스케줄러에서는 무시됩니다.0값은 DDIM을,1값은 DDPM을 나타냅니다. - num_inference_steps (
int, 선택 사항, 기본값 50) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다. - use_clipped_model_output (
bool, 선택 사항, 기본값None) —True또는False인 경우, DDIMScheduler.step()의 문서를 참조하세요.None인 경우, 스케줄러에 아무것도 전달되지 않습니다(이 인수를 지원하지 않는 스케줄러에는None을 사용하세요). - 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 DDIMPipeline
>>> import PIL.Image
>>> import numpy as np
>>> # load model and scheduler
>>> pipe = DDIMPipeline.from_pretrained("fusing/ddim-lsun-bedroom")
>>> # run pipeline in inference (sample random noise and denoise)
>>> image = pipe(eta=0.0, num_inference_steps=50)
>>> # process image to PIL
>>> image_processed = image.cpu().permute(0, 2, 3, 1)
>>> image_processed = (image_processed + 1.0) * 127.5
>>> image_processed = image_processed.numpy().astype(np.uint8)
>>> image_pil = PIL.Image.fromarray(image_processed[0])
>>> # save image
>>> image_pil.save("test.png")ImagePipelineOutput
클래스 diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
이미지 파이프라인의 출력 클래스입니다.