Diffusers documentation

VQDiffusionScheduler

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

VQDiffusionScheduler

VQDiffusionScheduler convierte la salida del modelo transformer en una muestra para la imagen sin ruido en el paso de difusión anterior. Fue introducido en Vector Quantized Diffusion Model for Text-to-Image Synthesis por Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.

El resumen del artículo es:

Presentamos el modelo de difusión cuantizada vectorial (VQ-Diffusion) para la generación de imágenes a partir de texto. Este método se basa en un autoencoder variacional cuantizado vectorial (VQ-VAE) cuyo espacio latente se modela mediante una variante condicional del recientemente desarrollado Modelo Probabilístico de Difusión de Desruido (DDPM). Encontramos que este método de espacio latente es adecuado para tareas de generación de imágenes a partir de texto porque no solo elimina el sesgo unidireccional de los métodos existentes, sino que también nos permite incorporar una estrategia de difusión de enmascarar y reemplazar para evitar la acumulación de errores, un problema grave en los métodos existentes. Nuestros experimentos muestran que VQ-Diffusion produce resultados significativamente mejores en la generación de imágenes a partir de texto en comparación con los modelos autoregresivos (AR) convencionales con un número similar de parámetros. En comparación con los métodos anteriores de generación de imágenes a partir de texto basados en GAN, nuestro VQ-Diffusion puede manejar escenas más complejas y mejorar la calidad de la imagen sintetizada en gran medida. Finalmente, demostramos que el cálculo de generación de imágenes en nuestro método puede hacerse altamente eficiente mediante la reparametrización. Con los métodos AR tradicionales, el tiempo de generación de imágenes a partir de texto aumenta linealmente con la resolución de la imagen de salida y, por lo tanto, es bastante costoso en tiempo incluso para imágenes de tamaño normal. VQ-Diffusion nos permite lograr un mejor equilibrio entre calidad y velocidad. Nuestros experimentos indican que el modelo VQ-Diffusion con reparametrización es quince veces más rápido que los métodos AR tradicionales, al tiempo que logra una mejor calidad de imagen.

VQDiffusionScheduler

clase diffusers.VQDiffusionScheduler

< >

( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )

Parámetros

  • num_vec_classes (int) — El número de clases de las incrustaciones vectoriales de los píxeles latentes. Incluye la clase del píxel latente enmascarado.
  • num_train_timesteps (int, por defecto 100) — El número de pasos de difusión para entrenar el modelo.
  • alpha_cum_start (float, por defecto 0.99999) — El valor inicial de alpha acumulada.
  • alpha_cum_end (float, por defecto 0.000009) — El valor final de alpha acumulada.
  • gamma_cum_start (float, por defecto 0.000009) — El valor inicial de gamma acumulada.
  • gamma_cum_end (float, por defecto 0.99999) — El valor final de gamma acumulada.

Un programador para difusión cuantizada vectorial.

Este modelo hereda de SchedulerMixin y ConfigMixin. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los programadores, como la carga y el guardado.

apply_cumulative_transitions

< >

( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Parámetros

  • q (torch.Tensor de forma (batch size, num classes - 1, num latent pixels)) — Las probabilidades logarítmicas sobre las clases de píxeles latentes no enmascarados.
  • t (int o torch.Tensor) — El paso de tiempo que determina qué matriz de transición acumulada se utiliza.

Devuelve

torch.Tensor de forma (batch size, num classes, num latent pixels)

Las probabilidades de registro transicionadas con las probabilidades de clase de la máscara añadidas.

Aplicar la matriz de transición acumulada en un paso de tiempo a las probabilidades logarítmicas sobre las clases no enmascaradas.

log_Q_t_transitioning_to_known_class

< >

( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor

Parámetros

  • t (int o torch.Tensor) — El paso de tiempo que determina qué matriz de transición se utiliza.
  • x_t (torch.LongTensor de forma (batch size, num latent pixels)) — Las clases de cada píxel latente en el tiempo t.
  • log_onehot_x_t (torch.Tensor de forma (batch size, num classes, num latent pixels)) — Los vectores log one-hot de x_t.
  • cumulative (bool) — Si cumulative es False, se utiliza la matriz de transición de un solo paso t-1->t. Si cumulative es True, se utiliza la matriz de transición acumulada 0->t.

Devuelve

torch.Tensor

Cada columna de la matriz devuelta es una fila de probabilidades logarítmicas de la matriz de transición de probabilidad completa. El tensor tiene forma (batch size, num classes - 1, num latent pixels) cuando cumulative es True y forma (batch size, num classes, num latent pixels) en caso contrario.

Cuando es acumulativo, el tensor tiene una fila menos porque el píxel latente inicial no puede enmascararse.

Donde:

  • q_n es la distribución de probabilidad del proceso hacia adelante del píxel latente de la nª posición.
  • C_0 es una clase de un incrustado latente de píxeles
  • C_k es la clase del píxel latente enmascarado

resultado no acumulativo (omitiendo los logaritmos):

q_0(x_t | x_{t-1\} = C_0) ... q_n(x_t | x_{t-1\} = C_0) . . . . . . . . . q_0(x_t | x_{t-1\} = C_k) ... q_n(x_t | x_{t-1\} = C_k)`} lang="" wrap={false} />

resultado acumulado (omitiendo los logaritmos):

q_0_cumulative(x_t | x_0 = C_0) ... q_n_cumulative(x_t | x_0 = C_0) . . . . . . . . . q_0_cumulative(x_t | x_0 = C_{k-1\}) ... q_n_cumulative(x_t | x_0 = C_{k-1\})`} lang="" wrap={false} />

Calcula las probabilidades logarítmicas de las filas de la matriz de transición (acumulativa o no acumulativa) para cada píxel latente en x_t.

q_posterior

< >

( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Parámetros

  • log_p_x_0 (torch.Tensor de forma (batch size, num classes - 1, num latent pixels)) — Las probabilidades logarítmicas de las clases predichas para los píxeles latentes iniciales. No incluye una predicción para la clase enmascarada, ya que la imagen inicial sin ruido no puede enmascararse.
  • x_t (torch.LongTensor de forma (batch size, num latent pixels)) — Las clases de cada píxel latente en el tiempo t.
  • t (int o torch.Tensor) — El paso de tiempo que determina qué matriz de transición se utiliza.

Devuelve

torch.Tensor de forma (batch size, num classes, num latent pixels)

Las probabilidades de registro para las clases predichas de la imagen en el paso de tiempo t-1.

Calcula las probabilidades logarítmicas para las clases predichas de la imagen en el paso de tiempo t-1:

p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )

set_timesteps

< >

( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )

Parámetros

  • num_inference_steps (int) — El número de pasos de difusión utilizados al generar muestras con un modelo preentrenado.
  • device (str o torch.device, opcional) — El dispositivo al que deben moverse los pasos de tiempo y los parámetros del proceso de difusión (alpha, beta, gamma).

Establece los pasos discretos utilizados para la cadena de difusión (para ejecutarse antes de la inferencia).

paso

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]

Parámetros

  • model_output (torch.Tensor de forma (batch size, num classes - 1, num latent pixels)) — Las probabilidades logarítmicas de las clases predichas para los píxeles latentes iniciales. No incluye una predicción para la clase enmascarada, ya que la imagen inicial sin ruido no puede enmascararse.
  • timestep (int o torch.Tensor) — El paso de tiempo que determina qué matrices de transición se utilizan.
  • sample (torch.LongTensor de forma (batch size, num latent pixels)) — Las clases de cada píxel latente en el paso de tiempo actual.
  • generator (torch.Generator, opcional) — Un generador de números aleatorios para el ruido aplicado a p(x_{t-1} | x_t) antes de que se muestree de él.
  • return_dict (bool, por defecto True) — Si se devuelve un VQDiffusionSchedulerOutput o un tuple.

Devuelve

VQDiffusionSchedulerOutput o tuple[torch.LongTensor]

If return_dict is True, VQDiffusionSchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

Predice la muestra del paso de tiempo anterior mediante la distribución de transición inversa. Consulta q_posterior() para más detalles sobre cómo se calcula la distribución.

VQDiffusionSchedulerOutput

clase diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

Parámetros

  • prev_sample (torch.LongTensor de forma (batch size, num latent pixels)) — La muestra calculada en el paso de tiempo anterior. prev_sample debe usarse como la siguiente entrada del modelo en el bucle de desruido.

Clase de salida para la función de paso del programador.

Update on GitHub