# DDIM

[Denoising Diffusion Implicit Models](https://huggingface.co/papers/2010.02502) (DDIM) de Jiaming Song, Chenlin Meng y Stefano Ermon.

El resumen del artículo es:

*Los modelos probabilísticos de difusión de desruido (DDPM) han logrado una generación de imágenes de alta calidad sin entrenamiento adversarial, pero requieren simular una cadena de Markov durante muchos pasos para producir una muestra. Para acelerar el muestreo, presentamos los modelos implícitos de difusión de desruido (DDIM), una clase más eficiente de modelos probabilísticos iterativos implícitos con el mismo procedimiento de entrenamiento que los DDPM. En los DDPM, el proceso generativo se define como la inversa de un proceso de difusión markoviano. Construimos una clase de procesos de difusión no markovianos que conducen al mismo objetivo de entrenamiento, pero cuyo proceso inverso permite un muestreo mucho más rápido. Demostramos empíricamente que los DDIM pueden producir muestras de alta calidad de 10 a 50 veces más rápido en términos de tiempo real en comparación con los DDPM, nos permiten intercambiar cómputo por calidad de muestra y pueden realizar interpolaciones de imágenes con significado semántico directamente en el espacio latente.*

El código original se puede encontrar en [ermongroup/ddim](https://github.com/ermongroup/ddim).

## DDIMPipeline[[diffusers.DDIMPipeline]]

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

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

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

**Parámetros:**

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

scheduler ([SchedulerMixin](/docs/diffusers/main/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/main/es/api/schedulers/ddpm#diffusers.DDPMScheduler) o [DDIMScheduler](/docs/diffusers/main/es/api/schedulers/ddim#diffusers.DDIMScheduler).

Pipeline para la generación de imágenes.

Este modelo hereda de [DiffusionPipeline](/docs/diffusers/main/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.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)
```

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

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

eta (`float`, *opcional*, valor predeterminado 0.0) : Corresponde al parámetro eta (η) del artículo [DDIM](https://huggingface.co/papers/2010.02502). Solo se aplica al [DDIMScheduler](/docs/diffusers/main/es/api/schedulers/ddim#diffusers.DDIMScheduler) y se ignora en otros programadores. Un valor de `0` corresponde a DDIM y `1` corresponde a DDPM.

num_inference_steps (`int`, *opcional*, valor predeterminado 50) : 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.

use_clipped_model_output (`bool`, *opcional*, valor predeterminado `None`) : Si es `True` o `False`, consulte la documentación de [DDIMScheduler.step()](/docs/diffusers/main/es/api/schedulers/ddim#diffusers.DDIMScheduler.step). Si es `None`, no se transmite nada al programador (use `None` para programadores que no admiten este argumento).

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/main/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) en lugar de una tupla simple.

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

Si `return_dict` es `True`, se devuelve [ImagePipelineOutput](/docs/diffusers/main/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 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)
```

[Fuente](https://github.com/huggingface/diffusers/blob/main/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.

