# DDPM

[Denoising Diffusion Probabilistic Models](https://huggingface.co/papers/2006.11239) (DDPM) của Jonathan Ho, Ajay Jain và Pieter Abbeel đề xuất một mô hình dựa trên diffusion cùng tên. Trong thư viện 🤗 Diffusers, DDPM dùng để chỉ *discrete denoising scheduler* trong bài báo cũng như pipeline.

Tóm tắt từ bài báo là:

*Chúng tôi trình bày các kết quả tổng hợp hình ảnh chất lượng cao sử dụng mô hình xác suất khuếch tán, một lớp mô hình biến ẩn được lấy cảm hứng từ các cân nhắc về nhiệt động lực học phi cân bằng. Kết quả tốt nhất của chúng tôi đạt được bằng cách huấn luyện trên một cận biến phân có trọng số được thiết kế theo một kết nối mới giữa mô hình xác suất khuếch tán và khớp điểm số khử nhiễu với động lực học Langevin, và các mô hình của chúng tôi tự nhiên chấp nhận một lược đồ giải nén mất mát tiến trình có thể được diễn giải như một tổng quát hóa của giải mã tự hồi quy. Trên tập dữ liệu CIFAR10 không điều kiện, chúng tôi đạt được điểm Inception là 9.46 và điểm FID tiên tiến nhất là 3.17. Trên LSUN 256x256, chúng tôi đạt được chất lượng mẫu tương tự như ProgressiveGAN.*

Mã nguồn gốc có thể được tìm thấy tại [hohonathanho/diffusion](https://github.com/hojonathanho/diffusion).

> [!TIP]
> Hãy chắc chắn xem qua [hướng dẫn](../../using-diffusers/schedulers) về Schedulers để tìm hiểu cách khám phá sự đánh đổi giữa tốc độ và chất lượng của scheduler, và xem phần [tái sử dụng các thành phần giữa các pipeline](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) để tìm hiểu cách nạp các thành phần giống nhau vào nhiều pipeline một cách hiệu quả.

# DDPMPipeline[[diffusers.DDPMPipeline]]

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

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

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

**Tham số:**

unet ([UNet2DModel](/docs/diffusers/v0.43.0/vi/api/models/unet2d#diffusers.UNet2DModel)) : Một `UNet2DModel` để khử nhiễu các latents ảnh đã mã hóa.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/vi/api/schedulers/overview#diffusers.SchedulerMixin)) : Một scheduler được sử dụng kết hợp với `unet` để khử nhiễu ảnh đã mã hóa. Có thể là một trong [DDPMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddpm#diffusers.DDPMScheduler), hoặc [DDIMScheduler](/docs/diffusers/v0.43.0/vi/api/schedulers/ddim#diffusers.DDIMScheduler).

Pipeline để tạo hình ảnh.

Mô hình này kế thừa từ [DiffusionPipeline](/docs/diffusers/v0.43.0/vi/api/pipelines/overview#diffusers.DiffusionPipeline). Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

#### __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)
```

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

**Tham số:**

batch_size (`int`, *tuỳ chọn*, mặc định là 1) : Số lượng hình ảnh cần tạo.

generator (`torch.Generator`, *tùy chọn*) : Một [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) để đảm bảo quá trình sinh là tất định.

num_inference_steps (`int`, *optional*, mặc định là 1000) : Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, đổi lại là suy luận chậm hơn.

output_type (`str`, *tùy chọn*, mặc định là `"pil"`) : Định dạng đầu ra của hình ảnh được tạo ra. Chọn giữa `"pil"` (`PIL.Image`), `"np"` (`np.array`) hoặc `"pt"` (`torch.Tensor`).

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một [ImagePipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) thay vì một tuple thông thường hay không.

**Trả về:** [ImagePipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) hoặc `tuple`

Nếu `return_dict` là `True`, [ImagePipelineOutput](/docs/diffusers/v0.43.0/vi/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) sẽ được trả về, ngược lại một `tuple` sẽ được trả về trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh đã được tạo

Hàm gọi call của pipeline để tạo nội dung.

Ví dụ:

```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)
```

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

**Tham số:**

images (`List[PIL.Image.Image]` hoặc `np.ndarray`) : Danh sách các hình ảnh PIL đã khử nhiễu có độ dài `batch_size` hoặc mảng NumPy có hình dạng `(batch_size, height, width, num_channels)`.

Lớp đầu ra cho các pipeline hình ảnh.

