From 9288fb1df86578df2ff83005fccf5e4a41bad533 Mon Sep 17 00:00:00 2001 From: Kashif Rasul Date: Wed, 7 Sep 2022 14:43:29 +0200 Subject: [PATCH] [Pipeline Docs] ddpm docs for sprint (#382) * initial ddpm for issue #293 * initial ddpm pipeline doc * added docstrings * Update docs/source/api/pipelines/ddpm.mdx Co-authored-by: Patrick von Platen * make style * fix docs * make style * fix doc strings Co-authored-by: Patrick von Platen --- docs/source/api/pipelines/ddpm.mdx | 26 ++++++++++++++++++- src/diffusers/pipelines/ddpm/pipeline_ddpm.py | 24 +++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/docs/source/api/pipelines/ddpm.mdx b/docs/source/api/pipelines/ddpm.mdx index 330b11f6..88ed3fbf 100644 --- a/docs/source/api/pipelines/ddpm.mdx +++ b/docs/source/api/pipelines/ddpm.mdx @@ -1 +1,25 @@ -# GLIDE MODEL \ No newline at end of file +# DDPM + +## Overview + +[Denoising Diffusion Probabilistic Models](https://arxiv.org/abs/2006.11239) + (DDPM) by Jonathan Ho, Ajay Jain and Pieter Abbeel proposes the diffusion based model of the same name, but in the context of the 🤗 Diffusers library, DDPM refers to the discrete denoising scheduler from the paper as well as the pipeline. + +The abstract of the paper is the following: + +We present high quality image synthesis results using diffusion probabilistic models, a class of latent variable models inspired by considerations from nonequilibrium thermodynamics. Our best results are obtained by training on a weighted variational bound designed according to a novel connection between diffusion probabilistic models and denoising score matching with Langevin dynamics, and our models naturally admit a progressive lossy decompression scheme that can be interpreted as a generalization of autoregressive decoding. On the unconditional CIFAR10 dataset, we obtain an Inception score of 9.46 and a state-of-the-art FID score of 3.17. On 256x256 LSUN, we obtain sample quality similar to ProgressiveGAN. + +The original codebase of this paper can be found [here](https://github.com/hojonathanho/diffusion). + + +## Available Pipelines: + +| Pipeline | Tasks | Colab +|---|---|:---:| +| [pipeline_ddpm.py](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/ddpm/pipeline_ddpm.py) | *Unconditional Image Generation* | - | + + +## API + +[[autodoc]] pipelines.ddpm.pipeline_ddpm.DDPMPipeline + - __call__ diff --git a/src/diffusers/pipelines/ddpm/pipeline_ddpm.py b/src/diffusers/pipelines/ddpm/pipeline_ddpm.py index 3d15ba58..b2af8a6c 100644 --- a/src/diffusers/pipelines/ddpm/pipeline_ddpm.py +++ b/src/diffusers/pipelines/ddpm/pipeline_ddpm.py @@ -23,6 +23,17 @@ from ...pipeline_utils import DiffusionPipeline, ImagePipelineOutput class DDPMPipeline(DiffusionPipeline): + r""" + This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods the + library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.) + + Parameters: + unet ([`UNet2DModel`]): U-Net architecture to denoise the encoded image. + scheduler ([`SchedulerMixin`]): + A scheduler to be used in combination with `unet` to denoise the encoded image. Can be one of + [`DDPMScheduler`], or [`DDIMScheduler`]. + """ + def __init__(self, unet, scheduler): super().__init__() scheduler = scheduler.set_format("pt") @@ -37,6 +48,19 @@ class DDPMPipeline(DiffusionPipeline): return_dict: bool = True, **kwargs, ) -> Union[ImagePipelineOutput, Tuple]: + r""" + Args: + batch_size (:obj:`int`, *optional*, defaults to 1): + The number of images to generate. + generator (:obj:`torch.Generator`, *optional*): + A [torch generator](https://pytorch.org/docs/stable/generated/torch.Generator.html) to make generation + deterministic. + output_type (:obj:`str`, *optional*, defaults to :obj:`"pil"`): + The output format of the generate image. Choose between + [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` or `nd.array`. + return_dict (:obj:`bool`, *optional*, defaults to :obj:`True`): + Whether or not to return a [`~pipeline_utils.ImagePipelineOutput`] instead of a plain tuple. + """ if "torch_device" in kwargs: device = kwargs.pop("torch_device") warnings.warn(