DDIM
Denoising Diffusion Implicit Models (DDIM) by Jiaming Song, Chenlin Meng and Stefano Ermon.
The abstract from the paper is
去噪扩散概率模型(DDPM)在没有对抗训练的情况下就实现了高质量图像生成,但它们需要模拟马尔可夫链以生成样本,需要很多步骤。为了加速采样,我们提出了去噪扩散隐式模型(DDIM),这是一种更高效的迭代隐式概率模型类别,其训练过程与 DDPM 相同。在 DDPM 中,生成过程被定义为马尔可夫扩散过程的逆过程。我们构建了一类非马尔可夫扩散过程,它们导致相同的训练目标,但其逆过程的采样速度要快得多。我们通过实验证明,与 DDPM 相比,DDIM 可以以快 10 倍到 50 倍的速度生成高质量样本,使我们能够在计算量和样本质量之间进行权衡,并且能够在潜在空间中直接执行语义上有意义的图像插值。
The original codebase can be found at ermongroup/ddim.
DDIMPipeline
class diffusers.DDIMPipeline
< source >( unet scheduler )
Parameters
- unet (UNet2DModel) — 用于对编码的图像潜在表示进行去噪的
UNet2DModel
。 - scheduler (SchedulerMixin) — 与
unet
一起使用的调度器,用于对编码的图像进行去噪。可以是 DDPMScheduler 或 DDIMScheduler 之一。
用于图像生成的管道。
此模型继承自 DiffusionPipeline。查看超类文档以获取为所有管道实现的通用方法(下载、保存、在特定设备上运行等)。
__call__
< source >( batch_size: int = 1 generator: Union = None eta: float = 0.0 num_inference_steps: int = 50 use_clipped_model_output: Optional = None output_type: Optional = 'pil' return_dict: bool = True ) → ImagePipelineOutput or tuple
Parameters
- batch_size (
int
, optional, defaults to 1) — 要生成的图像数量。 - generator (
torch.Generator
, optional) — 一个torch.Generator
,用于使生成确定性。 - eta (
float
, optional, defaults to 0.0) — 对应于 num_inference_steps (int
, 可选, 默认值 50) — 降噪步骤数。更多降噪步骤通常会导致更高质量的图像,但会牺牲推理速度。 - use_clipped_model_output (
bool
, 可选, 默认值None
) — 如果为True
或False
,请参见 DDIMScheduler.step() 的文档。如果为None
,则不会将任何内容传递到下游调度器(对于不支持此参数的调度器,请使用None
)。 - output_type (
str
, 可选, 默认值"pil"
) — 生成的图像的输出格式。在PIL.Image
或np.array
之间选择。 - return_dict (
bool
, 可选, 默认值True
) — 是否返回 ImagePipelineOutput 而不是普通元组。
返回值
ImagePipelineOutput 或 元组
如果 return_dict
为 True
,则返回 ImagePipelineOutput,否则返回一个 元组
,其中第一个元素是包含生成图像的列表。
管道用于生成的调用函数。
示例
>>> 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
class diffusers.ImagePipelineOutput
< 源代码 >( images: Union )
图像管道的输出类。