Diffusers documentation

FlowMapEulerDiscreteScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

FlowMapEulerDiscreteScheduler

FlowMapEulerDiscreteScheduler é um amostrador no estilo Euler projetado para modelos de difusão destilados por flow-map. Os modelos de flow-map aprendem transições de intervalo arbitrário zt→zr\mathbf{z}_t \to \mathbf{z}_r em vez do mapeamento fixo zt→z0\mathbf{z}_t \to \mathbf{z}_0 dos modelos de consistência. Ambos os extremos do passo são fornecidos pelo chamador, o que permite a amostragem em qualquer número de passos: um único checkpoint destilado pode ser avaliado com 1, 2, 4, 8, 16… NFE sem necessidade de re-treinamento.

O scheduler foi introduzido em AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation e é distribuído junto com as integrações AnyFlowPipeline e AnyFlowFARPipeline, mas não é específico do AnyFlow — qualquer checkpoint destilado por flow-map pode utilizá-lo.

FlowMapEulerDiscreteScheduler

classe diffusers.FlowMapEulerDiscreteScheduler

< >

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

Parâmetros

  • num_train_timesteps (int, padrão 1000) — O número de etapas de difusão usadas para treinar o modelo de flow-map subjacente.
  • shift (float, padrão 1.0) — Deslocamento multiplicativo do passo de tempo aplicado ao agendamento de inferência. shift=1.0 é a identidade; valores maiores que 1.0 deslocam o agendamento para mais desruidamento nas etapas posteriores (por exemplo, shift=5 corresponde ao padrão do Wan2.1).

Amostrador estilo Euler para modelos de difusão destilados por mapa de fluxo.

Modelos de Flow-map aprendem transições de intervalo arbitrário zt→zrz_t \to z_r em vez do mapeamento fixo zt→z0z_t \to z_0 dos modelos de consistência, permitindo que um único checkpoint destilado seja avaliado em 1, 2, 4, 8, … NFE sem re-treinamento. O step método avança a amostra do timestep para o r_timestep ao longo da velocidade prevista.

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

Este agendador herda de [SchedulerMixin] e [ConfigMixin]. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os agendadores (carregamento, salvamento, etc.).

apply_shift

< >

( sigmas: Tensor )

Aplica a transformação de deslocamento configurada a um tensor sigma.

index_for_timestep

< >

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

Retorna o índice de timestep no agendamento atual, ou None se estiver fora do agendamento.

A consulta é feita em relação a self.timesteps com uma pequena tolerância de ponto flutuante. É usado para recuperar o sigma correspondente sem assumir a relação linear timesteps = sigmas * num_train_timesteps — dessa forma, um agendamento personalizado (por exemplo, deslocamento não linear, timesteps definidos manualmente) ainda é resolvido corretamente.

scale_model_input

< >

( sample: Tensor*args**kwargs )

Escala de identidade sem operação. Fornecida para compatibilidade de API com outros agendadores do Diffusers.

scale_noise

< >

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

Interpole linearmente sample em direção a noise de acordo com o timestep normalizado.

set_begin_index

< >

( begin_index: int = 0 )

Defina o índice inicial para o agendador. Pipelines que começam no meio do agendamento (por exemplo, image-to-image) chamam isso entre set_timesteps e o primeiro step para ancorar o rollout.

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 etapas de inferência. Se None, é necessário passar sigmas ou timesteps.
  • device (str ou 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) — Agenda personalizada de comprimento num_inference_steps, nas mesmas unidades de self.timesteps (ou seja, escalada por num_train_timesteps). Convertida para sigmas internamente. Se tanto sigmas quanto timesteps forem passados, seus comprimentos devem corresponder.

Construa o cronograma de passos de inferência.

Internamente, rastreia self.sigmas de comprimento num_inference_steps + 1 (o shift configurado aplicado a um linspace de 1.0 a 0.0 por padrão); self.timesteps expõe os primeiros num_inference_steps sigmas escalados por num_train_timesteps — ou seja, um timestep por passo de inferência, correspondendo a FlowMatchEulerDiscreteScheduler. O sigma final (0) é o ponto final implícito do último passo e é adicionado automaticamente quando sigmas / timesteps são fornecidos pelo usuário.

etapa

< >

( 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) — Saída direta do modelo flow-map (velocidade média prevista).
  • timestep (float ou torch.Tensor) — Timestep de origem t nas mesmas unidades de self.timesteps.
  • sample (torch.Tensor) — Amostra atual ztz_t.
  • r_timestep (float ou torch.Tensor, opcional) — Timestep alvo r. O padrão é o próximo timestep na agenda quando None; passe um valor explícito para amostragem em qualquer passo. r_timestep == timestep é uma operação sem efeito.
  • return_dict (bool, padrão True) — Se deve retornar um [FlowMapEulerDiscreteSchedulerOutput] (o padrão) ou uma tupla simples.

Retorna

[FlowMapEulerDiscreteSchedulerOutput] ou tuple

Quando return_dict=True, retorna um [FlowMapEulerDiscreteSchedulerOutput] cujo prev_sample é zrz_r. Caso contrário, retorna uma 1-tupla (prev_sample,).

Avance sample de timestep para r_timestep usando a velocidade prevista pelo modelo.

Diferentemente de um agendador Euler padrão, ambas as extremidades do intervalo podem ser fornecidas pelo chamador, permitindo amostragem em qualquer passo: uma única chamada ao modelo pode avançar de t para qualquer alvo r escolhido (incluindo r=0 para uma geração em um único passo). Quando r_timestep é omitido, ele assume o próximo passo de tempo no agendamento (correspondendo à semântica de FlowMatchEulerDiscreteScheduler).

Internamente, os sigmas de origem e destino são recuperados indexando self.sigmas via index_for_timestep, em vez de dividir os timesteps de entrada por num_train_timesteps, de modo que qualquer agendamento cuja relação timestep / sigma seja não linear (por exemplo, um shift personalizado) permaneça correto. Para um r_timestep fora do agendamento, o scheduler recorre a r_timestep / num_train_timesteps, de modo que a amostragem em qualquer passo fora do agendamento continua sendo suportada.

Update on GitHub