# DDPM

[Denoising Diffusion Probabilistic Models](https://huggingface.co/papers/2006.11239) (DDPM), de Jonathan Ho, Ajay Jain y Pieter Abbeel, propone un modelo de difusión con el mismo nombre. En la biblioteca 🤗 Diffusers, DDPM se refiere tanto al *discrete denoising scheduler* del artículo como al pipeline.

El resumen del artículo es:

*Presentamos resultados de alta calidad en la síntesis de imágenes utilizando modelos probabilísticos de difusión, una clase de modelos de variables latentes inspirados en consideraciones de la termodinámica de no equilibrio. Nuestros mejores resultados se obtienen entrenando sobre un límite variacional ponderado diseñado según una conexión novedosa entre los modelos probabilísticos de difusión y el denoising score matching con dinámica de Langevin, y nuestros modelos admiten de forma natural un esquema de descompresión progresiva con pérdida que puede interpretarse como una generalización de la decodificación autoregresiva. En el conjunto de datos no condicionado CIFAR10, obtenemos una puntuación Inception de 9,46 y una puntuación FID del estado del arte de 3,17. En LSUN 256x256, obtenemos una calidad de muestra similar a la de ProgressiveGAN.*

El código original se puede encontrar en [hohonathanho/diffusion](https://github.com/hojonathanho/diffusion).

> [!TIP]
> Asegúrate de consultar la [guía de Schedulers](../../using-diffusers/schedulers) para aprender a explorar el equilibrio entre la velocidad y la calidad del scheduler, y consulta la sección [reutilizar componentes entre pipelines](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) para aprender a cargar eficientemente los mismos componentes en múltiples pipelines.

# DDPMPipeline[[diffusers.DDPMPipeline]]

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

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

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

**Parámetros:**

unet ([UNet2DModel](/docs/diffusers/v0.43.0/es/api/models/unet2d#diffusers.UNet2DModel)) : Un `UNet2DModel` para desruidar los latentes de imagen codificados.

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/es/api/schedulers/overview#diffusers.SchedulerMixin)) : Un scheduler para usar en combinación con `unet` para desruidar la imagen codificada. Puede ser uno de [DDPMScheduler](/docs/diffusers/v0.43.0/es/api/schedulers/ddpm#diffusers.DDPMScheduler) o [DDIMScheduler](/docs/diffusers/v0.43.0/es/api/schedulers/ddim#diffusers.DDIMScheduler).

Pipeline para la generación de imágenes.

Este modelo hereda de [DiffusionPipeline](/docs/diffusers/v0.43.0/es/api/pipelines/overview#diffusers.DiffusionPipeline). Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, etc.).

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

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

**Parámetros:**

batch_size (`int`, *opcional*, valor predeterminado 1) : El número de imágenes a generar.

generator (`torch.Generator`, *opcional*) : Un [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) para hacer que la generación sea determinista.

num_inference_steps (`int`, *opcional*, valor predeterminado 1000) : El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.

output_type (`str`, *opcional*, por defecto `"pil"`) : El formato de salida de la imagen generada. Elija entre `"pil"` (`PIL.Image`), `"np"` (`np.array`) o `"pt"` (`torch.Tensor`).

return_dict (`bool`, *opcional*, por defecto `True`) : Si se debe devolver un [ImagePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) en lugar de una tupla simple.

**Devuelve:** [ImagePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) o `tuple`

Si `return_dict` es `True`, se devuelve [ImagePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput); en caso contrario, se devuelve una `tuple` cuyo primer elemento es una lista con las imágenes generadas

La función de llamada para el pipeline de generación.

Ejemplo:

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

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

**Parámetros:**

images (`List[PIL.Image.Image]` o `np.ndarray`) : Lista de imágenes PIL desruidas de longitud `batch_size` o matriz NumPy de forma `(batch_size, height, width, num_channels)`.

Clase de salida para pipelines de imágenes.

