# DDIM

[Denoising Diffusion Implicit Models](https://huggingface.co/papers/2010.02502) (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](https://github.com/ermongroup/ddim).

## DDIMPipeline[[diffusers.DDIMPipeline]]

#### diffusers.DDIMPipeline[[diffusers.DDIMPipeline]]

```python
diffusers.DDIMPipeline(unet: UNet2DModel, scheduler: DDIMScheduler)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ddim/pipeline_ddim.py#L37)

**Parameter:**

unet ([UNet2DModel](/docs/diffusers/v0.43.0/id/api/models/unet2d#diffusers.UNet2DModel)) : Sebuah `UNet2DModel` untuk menghilangkan noise dari latens gambar yang telah dikodekan.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/id/api/schedulers/overview#diffusers.SchedulerMixin)) : Penjadwal yang digunakan bersama `unet` untuk menghilangkan noise dari gambar yang telah dikodekan. Bisa berupa [DDPMScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/ddpm#diffusers.DDPMScheduler) atau [DDIMScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/ddim#diffusers.DDIMScheduler).

Pipeline untuk generasi gambar.

Model ini mewarisi dari [DiffusionPipeline](/docs/diffusers/v0.43.0/id/api/pipelines/overview#diffusers.DiffusionPipeline). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).

#### __call__[[diffusers.DDIMPipeline.__call__]]

```python
__call__(batch_size: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, eta: float = 0.0, num_inference_steps: int = 50, use_clipped_model_output: bool | None = None, output_type: str | None = 'pil', return_dict: bool = True)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ddim/pipeline_ddim.py#L62)

**Parameter:**

batch_size (`int`, *opsional*, default 1) : Jumlah gambar yang akan dihasilkan.

generator (`torch.Generator`, *opsional*) : Sebuah [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) untuk membuat generasi menjadi deterministik.

eta (`float`, *opsional*, default 0.0) : Bersesuaian dengan parameter eta (η) dari paper [DDIM](https://huggingface.co/papers/2010.02502). Hanya berlaku untuk [DDIMScheduler](/docs/diffusers/v0.43.0/id/api/schedulers/ddim#diffusers.DDIMScheduler), dan diabaikan pada scheduler lain. Nilai `0` bersesuaian dengan DDIM dan `1` bersesuaian dengan DDPM.

num_inference_steps (`int`, *opsional*, defaultnya 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*, defaultnya `None`) : Jika `True` atau `False`, lihat dokumentasi untuk [DDIMScheduler.step()](/docs/diffusers/v0.43.0/id/api/schedulers/ddim#diffusers.DDIMScheduler.step). Jika `None`, tidak ada yang diteruskan ke scheduler (gunakan `None` untuk 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*, defaultnya `True`) : Apakah akan mengembalikan [ImagePipelineOutput](/docs/diffusers/v0.43.0/id/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) alih-alih tuple biasa.

**Mengembalikan:** [ImagePipelineOutput](/docs/diffusers/v0.43.0/id/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) atau `tuple`

Jika `return_dict` adalah `True`, [ImagePipelineOutput](/docs/diffusers/v0.43.0/id/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) dikembalikan, selain itu sebuah `tuple` dikembalikan di mana elemen pertama adalah daftar dengan gambar yang dihasilkan

Fungsi panggilan untuk pipeline pada generasi.

Contoh:

```py
>>> 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]]

#### diffusers.ImagePipelineOutput[[diffusers.ImagePipelineOutput]]

```python
diffusers.ImagePipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/pipeline_utils.py#L135)

**Parameter:**

images (`List[PIL.Image.Image]` atau `np.ndarray`) : Daftar gambar PIL yang telah didenoise dengan panjang `batch_size` atau array NumPy dengan bentuk `(batch_size, height, width, num_channels)`.

Kelas output untuk pipeline gambar.

