# DDPM

[Denoising Diffusion Probabilistic Models](https://huggingface.co/papers/2006.11239) (DDPM) oleh Jonathan Ho, Ajay Jain, dan Pieter Abbeel mengusulkan model berbasis difusi dengan nama yang sama. Dalam pustaka 🤗 Diffusers, DDPM merujuk pada *discrete denoising scheduler* dari makalah tersebut serta pipeline-nya.

Abstrak dari makalah tersebut adalah:

*Kami menyajikan hasil sintesis gambar berkualitas tinggi menggunakan model probabilistik difusi, sebuah kelas model variabel laten yang terinspirasi oleh pertimbangan dari termodinamika non-kesetimbangan. Hasil terbaik kami diperoleh dengan melatih pada batas variational berbobot yang dirancang berdasarkan koneksi baru antara model probabilistik difusi dan pencocokan skor denoising dengan dinamika Langevin, dan model kami secara alami menerima skema dekompresi progresif yang lossy yang dapat diinterpretasikan sebagai generalisasi dari decoding autoregressive. Pada dataset CIFAR10 unconditional, kami memperoleh skor Inception sebesar 9.46 dan skor FID state-of-the-art sebesar 3.17. Pada LSUN 256x256, kami memperoleh kualitas sampel yang serupa dengan ProgressiveGAN.*

Kodebase asli dapat ditemukan di [hohonathanho/diffusion](https://github.com/hojonathanho/diffusion).

> [!TIP]
> Pastikan untuk melihat [panduan](../../using-diffusers/schedulers) Schedulers untuk mempelajari cara mengeksplorasi tradeoff antara kecepatan dan kualitas scheduler, serta lihat bagian [reuse components across pipelines](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) untuk mempelajari cara memuat komponen yang sama secara efisien ke dalam beberapa pipeline.

# DDPMPipeline[[diffusers.DDPMPipeline]]

#### diffusers.DDPMPipeline[[diffusers.DDPMPipeline]]

```python
diffusers.DDPMPipeline(unet: UNet2DModel, scheduler: DDPMScheduler)
```

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

**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.DDPMPipeline.__call__]]

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

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

**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.

num_inference_steps (`int`, *opsional*, default 1000) : Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.

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 DDPMPipeline

>>> # load model and scheduler
>>> pipe = DDPMPipeline.from_pretrained("google/ddpm-cat-256")

>>> # run pipeline in inference (sample random noise and denoise)
>>> image = pipe().images[0]

>>> # save image
>>> image.save("ddpm_generated_image.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.

