# DDIM

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

L'abstract de l'article est :

*Les modèles de diffusion probabiliste de débruitage (DDPM) ont atteint une génération d’images de haute qualité sans entraînement adversarial, mais ils nécessitent de simuler une chaîne de Markov sur de nombreuses étapes pour produire un échantillon. Pour accélérer l’échantillonnage, nous présentons les modèles de diffusion implicite de débruitage (DDIM), une classe plus efficace de modèles probabilistes implicites itératifs partageant la même procédure d’entraînement que les DDPM. Dans les DDPM, le processus génératif est défini comme l’inverse d’un processus de diffusion markovien. Nous construisons une classe de processus de diffusion non markoviens qui mènent au même objectif d’entraînement, mais dont le processus inverse peut être beaucoup plus rapide à échantillonner. Nous démontrons empiriquement que les DDIM peuvent produire des échantillons de haute qualité 10 à 50 fois plus rapidement en temps réel par rapport aux DDPM, nous permettent de faire un compromis entre le calcul et la qualité des échantillons, et peuvent effectuer une interpolation d’images sémantiquement significative directement dans l’espace latent.*

Le code source original peut être trouvé sur [ermongroup/ddim](https://github.com/ermongroup/ddim).

## DDIMPipeline[[diffusers.DDIMPipeline]]

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

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

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

**Paramètres :**

unet ([UNet2DModel](/docs/diffusers/main/fr/api/models/unet2d#diffusers.UNet2DModel)) : Un `UNet2DModel` pour débruyer les latents d'image encodés.

scheduler ([SchedulerMixin](/docs/diffusers/main/fr/api/schedulers/overview#diffusers.SchedulerMixin)) : Un planificateur à utiliser en combinaison avec `unet` pour débruyer l'image encodée. Peut être soit [DDPMScheduler](/docs/diffusers/main/fr/api/schedulers/ddpm#diffusers.DDPMScheduler), soit [DDIMScheduler](/docs/diffusers/main/fr/api/schedulers/ddim#diffusers.DDIMScheduler).

Pipeline pour la génération d'images.

Ce modèle hérite de [DiffusionPipeline](/docs/diffusers/main/fr/api/pipelines/overview#diffusers.DiffusionPipeline). Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, etc.).

#### __appel__[[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)
```

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

**Paramètres :**

batch_size (`int`, *facultatif*, par défaut 1) : Le nombre d'images à générer.

generator (`torch.Generator`, *facultatif*) : Un [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) pour rendre la génération déterministe.

eta (`float`, *facultatif*, valeur par défaut 0.0) : Correspond au paramètre eta (η) de l'article [DDIM](https://huggingface.co/papers/2010.02502). S'applique uniquement au [DDIMScheduler](/docs/diffusers/main/fr/api/schedulers/ddim#diffusers.DDIMScheduler) et est ignoré par les autres planificateurs. Une valeur de `0` correspond à DDIM et `1` correspond à DDPM.

num_inference_steps (`int`, *facultatif*, valeur par défaut 50) : Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.

use_clipped_model_output (`bool`, *facultatif*, valeur par défaut `None`) : Si `True` ou `False`, consultez la documentation de [DDIMScheduler.step()](/docs/diffusers/main/fr/api/schedulers/ddim#diffusers.DDIMScheduler.step). Si `None`, rien n'est transmis en aval au planificateur (utilisez `None` pour les planificateurs qui ne prennent pas en charge cet argument).

output_type (`str`, *facultatif*, par défaut `"pil"`) : Le format de sortie de l'image générée. Choisissez entre `"pil"` (`PIL.Image`), `"np"` (`np.array`) ou `"pt"` (`torch.Tensor`).

return_dict (`bool`, *facultatif*, par défaut `True`) : Indique s'il faut retourner un [ImagePipelineOutput](/docs/diffusers/main/fr/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) plutôt qu'un simple tuple.

**Retourne :** [ImagePipelineOutput](/docs/diffusers/main/fr/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) ou `tuple`

Si `return_dict` est `True`, [ImagePipelineOutput](/docs/diffusers/main/fr/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) est retourné, sinon un `tuple` est retourné dont le premier élément est une liste contenant les images générées

La fonction d'appel du pipeline pour la génération.

Exemple :

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

[Source](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L135)

**Paramètres :**

images (`List[PIL.Image.Image]` ou `np.ndarray`) : Liste d'images PIL débruitées de longueur `batch_size` ou tableau NumPy de forme `(batch_size, height, width, num_channels)`.

Classe de sortie pour les pipelines d’images.

