Diffusers documentation

DDIM

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DDIM

Denoising Diffusion Implicit Models (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.

DDIMPipeline

clase diffusers.DDIMPipeline

< >

( unet: UNet2DModelscheduler: DDIMScheduler )

Parámetros

  • unet (UNet2DModel) — Un UNet2DModel para desruidar los latentes de la imagen codificada.
  • scheduler (SchedulerMixin) — Un scheduler para usar en combinación con unet para desruidar la imagen codificada. Puede ser uno de DDPMScheduler o DDIMScheduler.

Pipeline para la generación de imágenes.

Este modelo hereda de 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__

< >

( 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

Parámetros

  • batch_size (int, opcional, valor predeterminado 1) — El número de imágenes a generar.
  • generator (torch.Generator, opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • eta (float, opcional, valor predeterminado 0.0) — Corresponde al parámetro eta (η) del artículo DDIM. Solo se aplica al 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(). Si es None, no se transmite nada al programador aguas abajo (use None para programadores que no admiten este argumento).
  • output_type (str, opcional, valor predeterminado "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, valor predeterminado True) — Indica si se debe devolver un ImagePipelineOutput en lugar de una tupla simple.

Devuelve

ImagePipelineOutput o tuple

Si return_dict es True, se devuelve 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:

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

clase diffusers.ImagePipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

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.

Update on GitHub