Diffusers documentation

FlowMapEulerDiscreteScheduler

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

FlowMapEulerDiscreteScheduler

FlowMapEulerDiscreteScheduler es un muestreador de estilo Euler diseñado para modelos de difusión destilados con flow-map. Los modelos de flow-map aprenden transiciones de intervalo arbitrario zt→zr\mathbf{z}_t \to \mathbf{z}_r en lugar de la zt→z0\mathbf{z}_t \to \mathbf{z}_0 correspondencia fija de los modelos de consistencia. Ambos extremos del paso son proporcionados por el llamador, lo que permite el muestreo en cualquier número de pasos: un único checkpoint destilado puede evaluarse con 1, 2, 4, 8, 16… NFE sin necesidad de volver a entrenar.

El programador se introdujo en AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation y se incluye con las integraciones AnyFlowPipeline y AnyFlowFARPipeline, pero no es específico de AnyFlow: cualquier punto de control destilado mediante flow-map puede utilizarlo.

FlowMapEulerDiscreteScheduler

clase diffusers.FlowMapEulerDiscreteScheduler

< >

( num_train_timesteps: int = 1000shift: float = 1.0 )

Parámetros

  • num_train_timesteps (int, por defecto 1000) — El número de pasos de difusión utilizados para entrenar el modelo de flujo subyacente.
  • shift (float, valor predeterminado 1.0) — Desplazamiento multiplicativo del paso de tiempo aplicado al programa de inferencia. shift=1.0 es la identidad; los valores mayores que 1.0 desplazan el programa hacia más desruido en los pasos posteriores (p. ej., shift=5 coincide con el valor predeterminado de Wan2.1).

Muestreador de estilo Euler para modelos de difusión destilados con mapa de flujo.

Los modelos Flow-map aprenden transiciones de intervalos arbitrarioszt→zrz_t \to z_r en lugar del mapeo fijozt→z0z_t \to z_0 de los modelos de consistencia, por lo que un único punto de control destilado puede evaluarse con 1, 2, 4, 8, … NFE sin necesidad de volver a entrenar. El paso método avanza la muestra desde paso de tiempo hasta r_paso de tiempo a lo largo de la velocidad predicha.

Introducido en AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation por Yuchao Gu, Guian Fang et al.

Este programador hereda de [SchedulerMixin] y [ConfigMixin]. Consulta la documentación de la clase superior para los métodos genéricos implementados para todos los programadores (carga, guardado, etc.).

apply_shift

< >

( sigmas: Tensor )

Aplicar la transformación de desplazamiento configurada a un tensor sigma.

index_for_timestep

< >

( timestep: typing.Union[float, torch.FloatTensor] )

Devuelve el índice de timestep en la programación actual, o None si no está en la programación.

La búsqueda se realiza contra self.timesteps con una pequeña tolerancia de punto flotante. Se utiliza para recuperar el sigma correspondiente sin asumir la relación lineal timesteps = sigmas * num_train_timesteps; de esta manera, un programa personalizado (p. ej., un desplazamiento no lineal, timesteps establecidos manualmente) se resuelve correctamente.

scale_model_input

< >

( sample: Tensor*args**kwargs )

Escalar de identidad sin operación. Se proporciona para compatibilidad de API con otros programadores de Diffusers.

scale_noise

< >

( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )

Interpola linealmente sample hacia noise según el timestep normalizado.

set_begin_index

< >

( begin_index: int = 0 )

Establece el índice inicial del programador. Las tuberías que comienzan a mitad del programa (p. ej., imagen-a-imagen) llaman a esto entre set_timesteps y el primer step para anclar el despliegue.

set_timesteps

< >

( num_inference_steps: typing.Optional[int] = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = None )

Parámetros

  • num_inference_steps (int, opcional) — Número de pasos de inferencia. Si es None, debe pasar sigmas o timesteps.
  • device (str o torch.device, opcional) — Dispositivo de destino para self.sigmas / self.timesteps.
  • sigmas (List[float], optional) — Custom sigma schedule of length num_inference_steps. The terminal 0 sigma is appended automatically. The configured shift is applied on top.
  • timesteps (List[float], opcional) — Programa de pasos de tiempo personalizado de longitud num_inference_steps, en las mismas unidades que self.timesteps (es decir, escalado por num_train_timesteps). Se convierte internamente a sigmas. Si se pasan tanto sigmas como timesteps, sus longitudes deben coincidir.

Construye el calendario de pasos de inferencia.

Internamente, rastrea self.sigmas de longitud num_inference_steps + 1 (el desplazamiento configurado aplicado a un linspace de 1.0 a 0.0 por defecto); self.timesteps expone los primeros num_inference_steps sigmas escalados por num_train_timesteps, es decir, un timestep por paso de inferencia, coincidiendo con FlowMatchEulerDiscreteScheduler. El sigma final (0) es el extremo r implícito del último paso y se añade automáticamente cuando sigmas / timesteps son proporcionados por el usuario.

paso

< >

( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorr_timestep: typing.Union[float, torch.FloatTensor, NoneType] = Nonereturn_dict: bool = True ) → [FlowMapEulerDiscreteSchedulerOutput] or tuple

Parámetros

  • model_output (torch.Tensor) — Salida directa del modelo flow-map (velocidad media predicha).
  • timestep (float o torch.Tensor) — Paso de tiempo de origen t en las mismas unidades que self.timesteps.
  • sample (torch.Tensor) — Current sample{@html "ztz_tzt​"}.
  • r_timestep (float o torch.Tensor, opcional) — Paso temporal objetivo r. Por defecto, es el siguiente paso temporal en la programación cuando es None; pase un valor explícito para muestreo de cualquier paso. r_timestep == timestep no tiene efecto.
  • return_dict (bool, por defecto True) — Si se devuelve un [FlowMapEulerDiscreteSchedulerOutput] (el valor predeterminado) o una tupla simple.

Devuelve

[FlowMapEulerDiscreteSchedulerOutput] o tuple

Cuando return_dict=True, devuelve un [FlowMapEulerDiscreteSchedulerOutput] cuyo prev_sample es{@html "zrz_rzr​"}. En caso contrario, devuelve una 1-tupla (prev_sample,).

Avance sample desde timestep hasta r_timestep usando la velocidad predicha por el modelo.

A diferencia de un planificador Euler estándar, ambos extremos del intervalo pueden ser proporcionados por el llamador, lo que permite una muestreo de cualquier paso: una única llamada al modelo puede avanzar desde t hasta cualquier objetivo r elegido (incluido r=0 para una generación de un solo paso). Cuando se omite r_timestep, su valor predeterminado es el siguiente paso temporal en el planificador (coincidiendo con la semántica de FlowMatchEulerDiscreteScheduler).

Internamente, las sigmas de origen y destino se recuperan indexando self.sigmas mediante index_for_timestep en lugar de dividir los timesteps de entrada por num_train_timesteps, por lo que cualquier programa cuya relación timestep / sigma sea no lineal (por ejemplo, un shift personalizado) se mantiene correcto. Para un r_timestep fuera del programa, el scheduler recurre a r_timestep / num_train_timesteps para que la muestreo en cualquier paso fuera del programa siga siendo compatible.

Update on GitHub