Diffusers documentation
DDIM
DDIM
Denoising Diffusion Implicit Models (DDIM) oleh Jiaming Song, Chenlin Meng, dan Stefano Ermon.
Abstrak dari makalah tersebut adalah:
Model probabilistik difusi denoising (DDPM) telah mencapai kualitas generasi gambar yang tinggi tanpa pelatihan adversarial, namun mereka mensimulasikan rantai Markov selama banyak langkah untuk menghasilkan sampel. Untuk mempercepat pengambilan sampel, kami memperkenalkan model implisit difusi denoising (DDIM), kelas model probabilistik iteratif implisit yang lebih efisien dengan prosedur pelatihan yang sama seperti DDPM. Pada DDPM, proses generatif didefinisikan sebagai kebalikan dari proses difusi Markovian. Kami membangun kelas proses difusi non-Markovian yang mengarah ke tujuan pelatihan yang sama, tetapi proses kebalikannya dapat disampelkan jauh lebih cepat. Kami mendemonstrasikan secara empiris bahwa DDIM dapat menghasilkan sampel berkualitas tinggi 10× hingga 50× lebih cepat dalam hal waktu nyata dibandingkan DDPM, memungkinkan kami untuk menukar komputasi dengan kualitas sampel, dan dapat melakukan interpolasi gambar yang bermakna secara semantik langsung di ruang laten.
Kodebase asli dapat ditemukan di ermongroup/ddim.
DDIMPipeline
kelas diffusers.DDIMPipeline
< source >( unet: UNet2DModelscheduler: DDIMScheduler )
Parameter
- unet (UNet2DModel) —
UNet2DModeluntuk menghilangkan noise pada latens gambar yang telah dienkod. - scheduler (SchedulerMixin) —
Scheduler yang digunakan bersama
unetuntuk menghilangkan noise dari gambar yang telah dienkod. Bisa berupa DDPMScheduler atau DDIMScheduler.
Pipeline untuk generasi gambar.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
__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
Parameter
- batch_size (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan. - generator (
torch.Generator, opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - eta (
float, opsional, default 0.0) — Bersesuaian dengan parameter eta (η) dari paper DDIM. Hanya berlaku untuk DDIMScheduler, dan diabaikan pada scheduler lain. Nilai0bersesuaian dengan DDIM dan1bersesuaian dengan DDPM. - num_inference_steps (
int, opsional, default 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - use_clipped_model_output (
bool, opsional, defaultnyaNone) — JikaTrueatauFalse, lihat dokumentasi untuk DDIMScheduler.step(). JikaNone, tidak ada yang diteruskan ke scheduler di hilir (gunakanNoneuntuk scheduler yang tidak mendukung argumen ini). - output_type (
str, opsional, defaultnya"pil") — Format output dari gambar yang dihasilkan. Pilih antara"pil"(PIL.Image),"np"(np.array) atau"pt"(torch.Tensor). - return_dict (
bool, opsional, defaultnyaTrue) — Apakah akan mengembalikan ImagePipelineOutput alih-alih tuple biasa.
Mengembalikan
ImagePipelineOutput atau tuple
Jika return_dict adalah True, ImagePipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan gambar yang dihasilkan
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> 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
kelas diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Kelas output untuk pipeline gambar.