Diffusers documentation

UniPCMultistepScheduler

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

UniPCMultistepScheduler

UniPCMultistepScheduler es un marco de trabajo sin entrenamiento diseñado para la muestreo rápido de modelos de difusión. Fue introducido en UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models por Wenliang Zhao, Lujia Bai, Yongming Rao, Jie Zhou, Jiwen Lu.

Está compuesto por un corrector (UniC) y un predictor (UniP) que comparten una forma analítica unificada y admiten órdenes arbitrarios. UniPC es agnóstico al modelo por diseño, y admite DPMs en espacio de píxeles/espacio latente para muestreo incondicional/condicional. También puede aplicarse a modelos de predicción de ruido y de predicción de datos. El corrector UniC también puede aplicarse después de cualquier solver comercial para aumentar el orden de precisión.

El resumen del artículo es:

Los modelos de difusión probabilística (DPM) han demostrado una capacidad muy prometedora en la síntesis de imágenes de alta resolución. Sin embargo, muestrear desde un DPM preentrenado es un proceso que consume mucho tiempo debido a las múltiples evaluaciones de la red de eliminación de ruido, lo que hace cada vez más importante acelerar el muestreo de los DPM. A pesar de los avances recientes en el diseño de muestreadores rápidos, los métodos existentes aún no pueden generar imágenes satisfactorias en muchas aplicaciones donde se prefieren menos pasos (p. ej., <10). En este artículo, desarrollamos un corrector unificado (UniC) que puede aplicarse después de cualquier muestreador DPM existente para aumentar el orden de precisión sin evaluaciones adicionales del modelo, y derivamos un predictor unificado (UniP) que soporta un orden arbitrario como subproducto. Combinando UniP y UniC, proponemos un marco de predictor-corrector unificado llamado UniPC para el muestreo rápido de DPM, que tiene una forma analítica unificada para cualquier orden y puede mejorar significativamente la calidad del muestreo en comparación con los métodos anteriores, especialmente en un número extremadamente bajo de pasos. Evaluamos nuestros métodos a través de experimentos extensos que incluyen tanto muestreo incondicional como condicional utilizando DPM en el espacio de píxeles y en el espacio latente. Nuestro UniPC puede lograr un FID de 3.87 en CIFAR10 (incondicional) y un FID de 7.51 en ImageNet 256×256 (condicional) con solo 10 evaluaciones de función. El código está disponible en esta URL de https.

Consejos

Se recomienda establecer solver_order en 2 para la muestreo con guía, y solver_order=3 para el muestreo incondicional.

El umbral dinámico de Imagen es compatible, y para los modelos de difusión en el espacio de píxeles, puede establecer tanto predict_x0=True como thresholding=True para usar el umbral dinámico. Este método de umbral no es adecuado para los modelos de difusión en el espacio latente, como Stable Diffusion.

UniPCMultistepScheduler

clase diffusers.UniPCMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list = []solver_p: SchedulerMixin = Noneuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )

Parámetros

  • num_train_timesteps (int, por defecto 1000) — El número de pasos de difusión para entrenar el modelo.
  • beta_start (float, por defecto 0.0001) — El valor inicial de beta para la inferencia.
  • beta_end (float, valor predeterminado 0.02) — El valor final de beta.
  • beta_schedule ("linear", "scaled_linear" o "squaredcos_cap_v2", por defecto "linear") — El plan de betas, un mapeo desde un rango de betas a una secuencia de betas para dar pasos al modelo. Elija entre linear, scaled_linear o squaredcos_cap_v2.
  • trained_betas (np.ndarray, opcional) — Pase un array de betas directamente al constructor para omitir beta_start y beta_end.
  • solver_order (int, por defecto 2) — El orden de UniPC, que puede ser cualquier entero positivo. El orden de precisión efectivo es solver_order + 1 debido a UniC. Se recomienda usar solver_order=2 para muestreo guiado y solver_order=3 para muestreo incondicional.
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon", optional) — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.
  • thresholding (bool, por defecto False) — Si se debe utilizar el método de “umbral dinámico”. No es adecuado para modelos de difusión en el espacio latente, como Stable Diffusion.
  • dynamic_thresholding_ratio (float, valor predeterminado 0.995) — La proporción para el método de umbral dinámico. Solo es válido cuando thresholding=True.
  • sample_max_value (float, por defecto 1.0) — El valor umbral para el umbral dinámico. Solo es válido cuando thresholding=True y predict_x0=True.
  • predict_x0 (bool, por defecto True) — Si se debe utilizar el algoritmo de actualización en el x0 predicho.
  • solver_type ("bh1" o "bh2", por defecto "bh2") — Tipo de solver para UniPC. Se recomienda usar bh1 para muestreo incondicional cuando steps < 10, y bh2 en caso contrario.
  • lower_order_final (bool, por defecto True) — Si se deben usar solutores de orden inferior en los pasos finales. Solo es válido para < 15 pasos de inferencia. Esto puede estabilizar el muestreo de DPMSolver para pasos < 15, especialmente para pasos <= 10.
  • disable_corrector (list, valor predeterminado []) — Determina en qué paso desactivar el corrector para mitigar el desalineamiento entre epsilon_theta(x_t, c) y epsilon_theta(x_t^c, c), lo cual puede influir en la convergencia para una escala de guía grande. El corrector suele desactivarse durante los primeros pasos.
  • solver_p (SchedulerMixin, valor predeterminado None) — Cualquier otro programador que, si se especifica, hace que el algoritmo sea solver_p + UniC.
  • use_karras_sigmas (bool, opcional, valor predeterminado False) — Si se deben usar sigmas de Karras para los tamaños de paso en el plan de ruido durante el proceso de muestreo. Si es True, los sigmas se determinan según una secuencia de niveles de ruido {σi}.
  • use_exponential_sigmas (bool, opcional, valor predeterminado False) — Si se deben usar sigmas exponenciales para los tamaños de paso en el plan de ruido durante el proceso de muestreo.
  • use_beta_sigmas (bool, opcional, valor predeterminado False) — Si se deben usar beta sigmas para los tamaños de paso en el programa de ruido durante el proceso de muestreo. Consulte Beta Sampling is All You Need para obtener más información.
  • use_flow_sigmas (bool, opcional, valor predeterminado False) — Si se deben usar sigmas de flujo para los tamaños de paso en la programación de ruido durante el proceso de muestreo.
  • timestep_spacing ("linspace", "leading" o "trailing", por defecto "linspace") — La forma en que deben escalarse los timesteps. Consulte la tabla 2 de Common Diffusion Noise Schedules and Sample Steps are Flawed para obtener más información.
  • steps_offset (int, valor predeterminado 0) — Un desplazamiento que se suma a los pasos de inferencia, tal como lo requieren algunas familias de modelos.
  • final_sigmas_type ("zero" o "sigma_min", por defecto "zero") — El valor final de sigma para el plan de ruido durante el proceso de muestreo. Si es "sigma_min", el sigma final es el mismo que el último sigma del plan de entrenamiento. Si es zero, el sigma final se establece en 0.
  • rescale_betas_zero_snr (bool, por defecto False) — Si se deben reescalar los betas para tener un SNR terminal cero. Esto permite al modelo generar muestras muy brillantes y oscuras en lugar de limitarse a muestras con un brillo medio. Relacionado de forma laxa con --offset_noise.

UniPCMultistepScheduler es un marco de trabajo sin entrenamiento diseñado para la muestreo rápido de modelos de difusión.

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.

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

Parámetros

  • original_samples (torch.Tensor) — Las muestras originales sin ruido.
  • noise (torch.Tensor) — El ruido que se añadirá a las muestras.
  • timesteps (torch.IntTensor) — Los pasos de tiempo en los que se debe añadir ruido a las muestras.

Devuelve

torch.Tensor

Las muestras ruidosas.

Añade ruido a las muestras originales según el programa de ruido en los pasos de tiempo especificados.

convert_model_output

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Parámetros

  • model_output (torch.Tensor) — La salida directa del modelo de difusión aprendido.
  • timestep (int) — El paso de tiempo discreto actual en la cadena de difusión.
  • sample (torch.Tensor) — Una instancia actual de una muestra creada por el proceso de difusión.

Devuelve

torch.Tensor

La salida del modelo convertido.

Convierta la salida del modelo al tipo correspondiente que necesita el algoritmo UniPC.

index_for_timestep

< >

( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

Parámetros

  • timestep (int o torch.Tensor) — El timestep para el que se debe encontrar el índice.
  • schedule_timesteps (torch.Tensor, opcional) — El calendario de pasos de tiempo en el que buscar. Si es None, usa self.timesteps.

Devuelve

int

El índice del paso de tiempo en la programación.

Encuentra el índice para un paso de tiempo dado en la programación.

multistep_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

Parámetros

  • this_model_output (torch.Tensor) — Las salidas del modelo en x_t.
  • this_timestep (int) — El paso de tiempo actual t.
  • last_sample (torch.Tensor) — La muestra generada antes del último predictor x_{t-1}.
  • this_sample (torch.Tensor) — La muestra generada después del último predictor x_{t}.
  • order (int) — La p de UniC-p en este paso. El orden de precisión efectivo debe ser order + 1.

Devuelve

torch.Tensor

El tensor de muestra corregido en el paso de tiempo actual.

Un paso para la versión UniC (B(h)).

multistep_uni_p_bh_update

< >

( model_output: Tensor*argssample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

Parámetros

  • model_output (torch.Tensor) — La salida directa del modelo de difusión aprendido en el paso de tiempo actual.
  • prev_timestep (int) — El paso de tiempo discreto anterior en la cadena de difusión.
  • sample (torch.Tensor) — Una instancia actual de una muestra creada por el proceso de difusión.
  • order (int) — El orden de UniP en este paso de tiempo (corresponde a la p en UniPC-p).

Devuelve

torch.Tensor

El tensor de muestra en el paso de tiempo anterior.

Un paso para UniP (versión B(h)). Alternativamente, se utiliza self.solver_p si se especifica.

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

Parámetros

  • sample (torch.Tensor) — La muestra de entrada.

Devuelve

torch.Tensor

Una muestra de entrada escalada.

Garantiza la interoperabilidad con los programadores que necesitan escalar la entrada del modelo de desruido en función del paso temporal actual.

set_begin_index

< >

( begin_index: int = 0 )

Parámetros

  • begin_index (int, por defecto 0) — El índice inicial del programador.

Establece el índice inicial para el programador. Esta función debe ejecutarse desde la tubería antes de la inferencia.

set_timesteps

< >

( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: list[float] | None = Nonemu: bool | None = 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 timesteps. Si es None, los timesteps no se mueven.
  • sigmas (List[float], opcional) — Valores personalizados para sigmas que se usarán en cada paso de difusión. Si es None, los sigmas se calculan automáticamente.
  • mu (float, opcional) — Parámetro mu opcional para el desplazamiento dinámico al usar el tipo de desplazamiento temporal exponencial.

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: Tensorreturn_dict: bool = True ) → SchedulerOutput or tuple

Parámetros

  • model_output (torch.Tensor) — La salida directa del modelo de difusión aprendido.
  • timestep (int o torch.Tensor) — El paso de tiempo discreto actual en la cadena de difusión.
  • sample (torch.Tensor) — Una instancia actual de una muestra creada por el proceso de difusión.
  • return_dict (bool, por defecto True) — Si se devuelve un SchedulerOutput o una tuple.

Devuelve

SchedulerOutput o tuple

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

Predice la muestra del paso de tiempo anterior invirtiendo la EDE. Esta función propaga la muestra con el UniPC de múltiples pasos.

stretch_shift_to_terminal

< >

( t: Tensor ) → torch.Tensor

Parámetros

  • t (torch.Tensor) — Un tensor de pasos de tiempo que se estirará y desplazará.

Devuelve

torch.Tensor

Un tensor de pasos de tiempo ajustados de modo que el valor final sea igual a self.config.shift_terminal.

Estira y desplaza la programación de pasos de tiempo para garantizar que termine en el valor de configuración shift_terminal configurado.

Referencia: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

Parámetros

  • mu (float) — El parámetro mu para el desplazamiento en el tiempo.
  • sigma (float) — El parámetro sigma para el desplazamiento del tiempo.
  • t (torch.Tensor) — Los pasos de tiempo de entrada.

Devuelve

torch.Tensor

Los pasos de tiempo desplazados.

Aplicar el desplazamiento temporal a los sigmas.

SchedulerOutput

clase diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

Parámetros

  • prev_sample (torch.Tensor de forma (batch_size, num_channels, height, width) para imágenes) — Muestra calculada (x_{t-1}) del paso de tiempo anterior. prev_sample debe usarse como entrada del modelo en el bucle de desruido.

Clase base para la salida de la función step de un programador.

Update on GitHub