Diffusers documentation
FlowMapEulerDiscreteScheduler
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 em vez do mapeamento fixo 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
< source >( 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=5corresponde 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 em vez do mapeamento fixo 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.).
Aplica a transformação de deslocamento configurada a um tensor sigma.
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.
Escala de identidade sem operação. Fornecida para compatibilidade de API com outros agendadores do Diffusers.
scale_noise
< source >( 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.
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
< source >( 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 passarsigmasoutimesteps. - 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 terminal0sigma is appended automatically. The configuredshiftis applied on top. - timesteps (List[float], opcional) —
Agenda personalizada de comprimento
num_inference_steps, nas mesmas unidades deself.timesteps(ou seja, escalada pornum_train_timesteps). Convertida para sigmas internamente. Se tantosigmasquantotimestepsforem 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
< source >( 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
tnas mesmas unidades deself.timesteps. - sample (torch.Tensor) — Current sample{@html "zt"}.
- r_timestep (float ou torch.Tensor, opcional) —
Timestep alvo
r. O padrão é o próximo timestep na agenda quandoNone; 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 é{@html "zr"}. 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.