Diffusers documentation
VQDiffusionScheduler
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
< source >( 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 defecto100) — El número de pasos de difusión para entrenar el modelo. - alpha_cum_start (
float, por defecto0.99999) — El valor inicial de alpha acumulada. - alpha_cum_end (
float, por defecto0.000009) — El valor final de alpha acumulada. - gamma_cum_start (
float, por defecto0.000009) — El valor inicial de gamma acumulada. - gamma_cum_end (
float, por defecto0.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
< source >( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Parámetros
- q (
torch.Tensorde forma(batch size, num classes - 1, num latent pixels)) — Las probabilidades logarítmicas sobre las clases de píxeles latentes no enmascarados. - t (
intotorch.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
< source >( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor
Parámetros
- t (
intotorch.Tensor) — El paso de tiempo que determina qué matriz de transición se utiliza. - x_t (
torch.LongTensorde forma(batch size, num latent pixels)) — Las clases de cada píxel latente en el tiempot. - log_onehot_x_t (
torch.Tensorde forma(batch size, num classes, num latent pixels)) — Los vectores log one-hot dex_t. - cumulative (
bool) — Si cumulative esFalse, se utiliza la matriz de transición de un solo pasot-1->t. Si cumulative esTrue, se utiliza la matriz de transición acumulada0->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_nes la distribución de probabilidad del proceso hacia adelante del píxel latente de lanª 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):
resultado acumulado (omitiendo los logaritmos):
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
< source >( 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.Tensorde 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.LongTensorde forma(batch size, num latent pixels)) — Las clases de cada píxel latente en el tiempot. - t (
intotorch.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.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
Establece los pasos discretos utilizados para la cadena de difusión (para ejecutarse antes de la inferencia).
paso
< source >( 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.Tensorde 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 (
intotorch.Tensor) — El paso de tiempo que determina qué matrices de transición se utilizan. - sample (
torch.LongTensorde 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 ap(x_{t-1} | x_t)antes de que se muestree de él. - return_dict (
bool, por defectoTrue) — Si se devuelve un VQDiffusionSchedulerOutput o untuple.
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
< source >( prev_sample: LongTensor )
Clase de salida para la función de paso del programador.