Diffusers documentation
UniPCMultistepScheduler
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
< source >( 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 debetapara la inferencia. - beta_end (
float, valor predeterminado 0.02) — El valor final debeta. - 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 entrelinear,scaled_linearosquaredcos_cap_v2. - trained_betas (
np.ndarray, opcional) — Pase un array de betas directamente al constructor para omitirbeta_startybeta_end. - solver_order (
int, por defecto2) — El orden de UniPC, que puede ser cualquier entero positivo. El orden de precisión efectivo essolver_order + 1debido a UniC. Se recomienda usarsolver_order=2para muestreo guiado ysolver_order=3para muestreo incondicional. - prediction_type (
"epsilon","sample","v_prediction", or"flow_prediction", defaults to"epsilon", optional) — Prediction type of the scheduler function; can beepsilon(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 defectoFalse) — 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 cuandothresholding=True. - sample_max_value (
float, por defecto 1.0) — El valor umbral para el umbral dinámico. Solo es válido cuandothresholding=Trueypredict_x0=True. - predict_x0 (
bool, por defectoTrue) — 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 usarbh1para muestreo incondicional cuando steps < 10, ybh2en caso contrario. - lower_order_final (
bool, por defectoTrue) — 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 entreepsilon_theta(x_t, c)yepsilon_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 predeterminadoNone) — Cualquier otro programador que, si se especifica, hace que el algoritmo seasolver_p + UniC. - use_karras_sigmas (
bool, opcional, valor predeterminadoFalse) — Si se deben usar sigmas de Karras para los tamaños de paso en el plan de ruido durante el proceso de muestreo. Si esTrue, los sigmas se determinan según una secuencia de niveles de ruido {σi}. - use_exponential_sigmas (
bool, opcional, valor predeterminadoFalse) — 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 predeterminadoFalse) — 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 predeterminadoFalse) — 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 desigmapara 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 eszero, el sigma final se establece en 0. - rescale_betas_zero_snr (
bool, por defectoFalse) — 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
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Añade ruido a las muestras originales según el programa de ruido en los pasos de tiempo especificados.
convert_model_output
< source >( 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
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Encuentra el índice para un paso de tiempo dado en la programación.
multistep_uni_c_bh_update
< source >( 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 enx_t. - this_timestep (
int) — El paso de tiempo actualt. - last_sample (
torch.Tensor) — La muestra generada antes del último predictorx_{t-1}. - this_sample (
torch.Tensor) — La muestra generada después del último predictorx_{t}. - order (
int) — Lapde UniC-p en este paso. El orden de precisión efectivo debe serorder + 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
< source >( 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
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
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
< source >( begin_index: int = 0 )
Establece el índice inicial para el programador. Esta función debe ejecutarse desde la tubería antes de la inferencia.
set_timesteps
< source >( 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 (
strotorch.device, opcional) — El dispositivo al que deben moverse los timesteps. Si esNone, los timesteps no se mueven. - sigmas (
List[float], opcional) — Valores personalizados para sigmas que se usarán en cada paso de difusión. Si esNone, 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
< source >( 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 (
intotorch.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 defectoTrue) — Si se devuelve un SchedulerOutput o unatuple.
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
< source >( t: Tensor ) → torch.Tensor
Estira y desplaza la programación de pasos de tiempo para garantizar que termine en el valor de configuración shift_terminal configurado.
time_shift
< source >( mu: floatsigma: floatt: Tensor ) → torch.Tensor
Aplicar el desplazamiento temporal a los sigmas.
SchedulerOutput
clase diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Clase base para la salida de la función step de un programador.