Diffusers documentation

Modelos de consistencia

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Modelos de consistencia

Los Consistency Models fueron propuestos en Consistency Models por Yang Song, Prafulla Dhariwal, Mark Chen e Ilya Sutskever.

El resumen del artículo es:

Los modelos de difusión han avanzado significativamente en los campos de generación de imágenes, audio y vídeo, pero dependen de un proceso de muestreo iterativo que provoca una generación lenta. Para superar esta limitación, proponemos los modelos de consistencia, una nueva familia de modelos que generan muestras de alta calidad mapeando directamente el ruido a los datos. Por diseño, admiten una generación rápida en un solo paso, al tiempo que permiten el muestreo multipaso para intercambiar cómputo por calidad de muestra. También admiten la edición de datos sin ejemplos (zero-shot), como el relleno de imágenes (inpainting), la colorización y la superresolución, sin necesidad de entrenamiento explícito en estas tareas. Los modelos de consistencia se pueden entrenar ya sea destilando modelos de difusión preentrenados, o como modelos generativos independientes. A través de experimentos extensos, demostramos que superan a las técnicas de destilación existentes para modelos de difusión en el muestreo de uno y pocos pasos, logrando el nuevo estado del arte en FID de 3.55 en CIFAR-10 y 6.20 en ImageNet 64x64 para la generación en un solo paso. Cuando se entrenan de forma aislada, los modelos de consistencia se convierten en una nueva familia de modelos generativos que pueden superar a los modelos generativos existentes de un solo paso y no adversariales en benchmarks estándar como CIFAR-10, ImageNet 64x64 y LSUN 256x256.

El código original se puede encontrar en openai/consistency_models, y hay puntos de control adicionales disponibles en openai.

El pipeline fue aportado por dg845 y ayushtues. ❤️

Consejos

Para una aceleración adicional, use torch.compile para generar varias imágenes en <1 segundo:

  import torch
  from diffusers import ConsistencyModelPipeline

  device = "cuda"  # or "mps", "xpu", "cpu"
  # Load the cd_bedroom256_lpips checkpoint.
  model_id_or_path = "openai/diffusers-cd_bedroom256_lpips"
  pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, dtype=torch.float16)
  pipe.to(device)

+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)

  # Multistep sampling
  # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
  # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L83
  for _ in range(10):
      image = pipe(timesteps=[17, 0]).images[0]
      image.show()

ConsistencyModelPipeline

clase diffusers.ConsistencyModelPipeline

< >

( unet: UNet2DModelscheduler: CMStochasticIterativeScheduler )

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 los latentes de la imagen codificada. Actualmente solo compatible con CMStochasticIterativeScheduler.

Pipeline para la generación de imágenes incondicional o condicional por clase.

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 = 1class_labels: typing.Union[torch.Tensor, list[int], int, NoneType] = Nonenum_inference_steps: int = 1timesteps: list = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1 ) → ImagePipelineOutput or tuple

Parámetros

  • batch_size (int, opcional, valor predeterminado 1) — El número de imágenes a generar.
  • class_labels (torch.Tensor o list[int] o int, opcional) — Etiquetas de clase opcionales para condicionar modelos de consistencia condicionales por clase. No se utilizan si el modelo no es condicional por clase.
  • num_inference_steps (int, opcional, valor predeterminado 1) — 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.
  • timesteps (list[int], opcional) — Pasos de tiempo personalizados para usar en el proceso de desruido. Si no se definen, se utilizan num_inference_steps pasos de tiempo equiespaciados. Deben estar en orden descendente.
  • generator (torch.Generator, opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
  • output_type (str, opcional, por defecto "pil") — El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un ImagePipelineOutput en lugar de una tupla simple.
  • callback (Callable, opcional) — Una función que se llama cada callback_steps pasos durante la inferencia. La función se llama con los siguientes argumentos: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int, opcional, valor predeterminado 1) — La frecuencia con la que se llama a la función callback. Si no se especifica, la callback se llama en cada paso.

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.

Ejemplos:

>>> import torch

>>> from diffusers import ConsistencyModelPipeline

>>> device = "cuda"
>>> # Load the cd_imagenet64_l2 checkpoint.
>>> model_id_or_path = "openai/diffusers-cd_imagenet64_l2"
>>> pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
>>> pipe.to(device)

>>> # Onestep Sampling
>>> image = pipe(num_inference_steps=1).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample.png")

>>> # Onestep sampling, class-conditional image generation
>>> # ImageNet-64 class label 145 corresponds to king penguins
>>> image = pipe(num_inference_steps=1, class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample_penguin.png")

>>> # Multistep sampling, class-conditional image generation
>>> # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
>>> # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77
>>> image = pipe(num_inference_steps=None, timesteps=[22, 0], class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_multistep_sample_penguin.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