Diffusers documentation
DDIM
DDIM
Denoising Diffusion Implicit Models (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.
DDIMPipeline
classe diffusers.DDIMPipeline
< source >( unet: UNet2DModelscheduler: DDIMScheduler )
Paramètres
- unet (UNet2DModel) —
Un
UNet2DModelpour débruyer les latents d'image encodés. - scheduler (SchedulerMixin) —
Un scheduler à utiliser en combinaison avec
unetpour débruyer l'image encodée. Peut être l'un des DDPMScheduler ou DDIMScheduler.
Pipeline pour la génération d'images.
Ce modèle hérite de 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.).
__call__
< source >( batch_size: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneeta: float = 0.0num_inference_steps: int = 50use_clipped_model_output: bool | None = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
Paramètres
- batch_size (
int, facultatif, valeur par défaut 1) — Le nombre d'images à générer. - generator (
torch.Generator, facultatif) — Untorch.Generatorpour 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. Ne s'applique qu'au DDIMScheduler et est ignoré par les autres planificateurs. Une valeur de0correspond à DDIM et1correspond à 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, par défautNone) — SiTrueouFalse, consultez la documentation de DDIMScheduler.step(). SiNone, rien n’est transmis en aval au planificateur (utilisezNonepour 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éfautTrue) — Indique s'il faut retourner un ImagePipelineOutput plutôt qu'un simple tuple.
Retourne
ImagePipelineOutput ou tuple
Si return_dict est True, 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 :
>>> 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
classe diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Classe de sortie pour les pipelines d’images.