Diffusers documentation

DPMSolverMultistepScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DPMSolverMultistepScheduler

DPMSolverMultistepScheduler é um agendador multietapa do DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps e do DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models, de Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li e Jun Zhu.

DPMSolver (e a versão aprimorada DPMSolver++) é um solver de alta ordem dedicado e rápido para equações diferenciais ordinárias de difusão, com garantia de ordem de convergência. Empiricamente, a amostragem com DPMSolver usando apenas 20 passos pode gerar amostras de alta qualidade, e é capaz de gerar amostras bastante boas mesmo em 10 passos.

Dicas

É recomendado definir solver_order como 2 para amostragem guiada e solver_order=3 para amostragem incondicional.

O thresholding dinâmico do Imagen é suportado e, para modelos de difusão no espaço de pixels, você pode definir tanto algorithm_type="dpmsolver++" quanto thresholding=True para usar o thresholding dinâmico. Esse método de thresholding não é adequado para modelos de difusão no espaço latente, como o Stable Diffusion.

A variante SDE do DPMSolver e do DPM-Solver++ também é suportada, mas apenas para os solvers de primeira e segunda ordem. Este é um solver SDE rápido para o SDE de difusão reversa. Recomenda-se o uso do solver de segunda ordem sde-dpmsolver++.

DPMSolverMultistepScheduler

classe diffusers.DPMSolverMultistepScheduler

< >

( 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.0algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )

Parâmetros

  • num_train_timesteps (int, padrão 1000) — O número de etapas de difusão para treinar o modelo.
  • beta_start (float, padrão 0.0001) — O valor inicial de beta para a inferência.
  • beta_end (float, padrão 0.02) — O valor final de beta.
  • beta_schedule ("linear", "scaled_linear" ou "squaredcos_cap_v2", padrão "linear") — O agendamento de beta, um mapeamento de um intervalo de beta para uma sequência de betas para o passo do modelo.
  • trained_betas (np.ndarray, opcional) — Passe um array de betas diretamente para o construtor para ignorar beta_start e beta_end.
  • solver_order (int, padrão 2) — A ordem do DPMSolver, que pode ser 1 ou 2 ou 3. Recomenda-se usar solver_order=2 para amostragem guiada e solver_order=3 para amostragem incondicional.
  • prediction_type ("epsilon", "sample", "v_prediction" ou "flow_prediction", padrão "epsilon") — Tipo de previsão da função do agendador. epsilon prevê o ruído do processo de difusão, sample prevê diretamente a amostra com ruído, v_prediction prevê a velocidade (veja a seção 2.4 do paper Imagen Video) e flow_prediction prevê o fluxo.
  • thresholding (bool, padrão False) — Se deve usar o método de “limiar dinâmico”. Isso não é adequado para modelos de difusão em espaço latente, como o Stable Diffusion.
  • dynamic_thresholding_ratio (float, padrão 0.995) — A proporção para o método de limiar dinâmico. Válido apenas quando thresholding=True.
  • sample_max_value (float, padrão 1.0) — O valor de limiar para o thresholding dinâmico. Válido apenas quando thresholding=True e algorithm_type="dpmsolver++".
  • algorithm_type ("dpmsolver", "dpmsolver++", "sde-dpmsolver" ou "sde-dpmsolver++", padrão "dpmsolver++") — Tipo de algoritmo para o solver. O tipo dpmsolver implementa os algoritmos do artigo DPMSolver, e o tipo dpmsolver++ implementa os algoritmos do artigo DPMSolver++. Recomenda-se usar dpmsolver++ ou sde-dpmsolver++ com solver_order=2 para amostragem guiada, como no Stable Diffusion.
  • solver_type ("midpoint" ou "heun", padrão "midpoint") — Tipo de solver para o solver de segunda ordem. O tipo de solver afeta levemente a qualidade da amostra, especialmente para um pequeno número de etapas. É recomendado usar solvers midpoint.
  • lower_order_final (bool, padrão True) — Se deve usar solucionadores de ordem inferior nas etapas finais. Válido apenas para < 15 etapas de inferência. Isso pode estabilizar a amostragem do DPMSolver para etapas < 15, especialmente para etapas <= 10.
  • euler_at_final (bool, padrão False) — Se deve usar o método de Euler no passo final. Trata-se de um compromisso entre estabilidade numérica e riqueza de detalhes. Isso pode estabilizar a amostragem da variante SDE do DPMSolver para um pequeno número de passos de inferência, mas às vezes pode resultar em embaçamento.
  • use_karras_sigmas (bool, opcional, padrão False) — Se deve usar sigmas de Karras para os tamanhos de passo no agendamento de ruído durante o processo de amostragem. Se True, os sigmas são determinados de acordo com uma sequência de níveis de ruído {σi}.
  • use_exponential_sigmas (bool, opcional, padrão False) — Se deve usar sigmas exponenciais para os tamanhos de passo no agendamento de ruído durante o processo de amostragem.
  • use_beta_sigmas (bool, opcional, padrão False) — Se deve usar beta sigmas para os tamanhos de passo no agendamento de ruído durante o processo de amostragem. Consulte Beta Sampling is All You Need para mais informações.
  • use_lu_lambdas (bool, opcional, padrão False) — Se deve usar o uniform-logSNR para os tamanhos de passo propostos pelo DPM-Solver de Lu no agendamento de ruído durante o processo de amostragem. Se True, os sigmas e os passos de tempo são determinados de acordo com uma sequência de lambda(t).
  • use_flow_sigmas (bool, opcional, padrão False) — Se deve usar sigmas de fluxo para os tamanhos de passo no agendamento de ruído durante o processo de amostragem.
  • flow_shift (float, opcional, padrão 1.0) — O valor de deslocamento para o agendamento de passos de tempo para flow matching.
  • final_sigmas_type ("zero" ou "sigma_min", opcional, padrão "zero") — O valor final de sigma para o agendamento de ruído durante o processo de amostragem. Se "sigma_min", o sigma final é o mesmo que o último sigma no agendamento de treinamento. Se "zero", o sigma final é definido como 0.
  • lambda_min_clipped (float, padrão -inf) — Limite de recorte para o valor mínimo de lambda(t) para estabilidade numérica. Isso é crítico para o agendamento de ruído cosseno (squaredcos_cap_v2).
  • variance_type ("learned" ou "learned_range", opcional) — Defina como "learned" ou "learned_range" para modelos de difusão que preveem a variância. Se definido, a saída do modelo contém a variância gaussiana prevista.
  • timestep_spacing ("linspace", "leading" ou "trailing", padrão "linspace") — A forma como os timesteps devem ser escalonados. Consulte a Tabela 2 do Common Diffusion Noise Schedules and Sample Steps are Flawed para mais informações.
  • steps_offset (int, padrão 0) — Um deslocamento adicionado às etapas de inferência, conforme exigido por algumas famílias de modelos.
  • rescale_betas_zero_snr (bool, padrão False) — Se deve reescalar os betas para ter SNR terminal zero. Isso permite que o modelo gere amostras muito claras e escuras, em vez de limitá-lo a amostras com brilho médio. Relacionado de forma solta a --offset_noise.
  • use_dynamic_shifting (bool, padrão False) — Se deve usar shifting dinâmico para o cronograma de timestep.
  • time_shift_type ("exponential", padrão "exponential") — O tipo de deslocamento de tempo a ser aplicado ao usar deslocamento dinâmico.

DPMSolverMultistepScheduler é um solver de alta ordem dedicado e rápido para EDOs de difusão.

Este modelo herda de SchedulerMixin e ConfigMixin. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os agendadores, como carregamento e salvamento.

add_noise

< >

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

Parâmetros

  • original_samples (torch.Tensor) — As amostras originais sem ruído.
  • noise (torch.Tensor) — O ruído a ser adicionado às amostras.
  • timesteps (torch.IntTensor) — Os timesteps nos quais adicionar ruído às amostras.

Retorna

torch.Tensor

As amostras ruidosas.

Adicione ruído às amostras originais de acordo com o agendamento de ruído nos timesteps especificados.

convert_model_output

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Parâmetros

  • model_output (torch.Tensor) — A saída direta do modelo de difusão aprendido.
  • sample (torch.Tensor, opcional) — Uma instância atual de uma amostra criada pelo processo de difusão.

Retorna

torch.Tensor

A saída do modelo convertido.

Converte a saída do modelo para o tipo correspondente que o algoritmo DPMSolver/DPMSolver++ precisa. O DPM-Solver é projetado para discretizar uma integral do modelo de previsão de ruído, e o DPM-Solver++ é projetado para discretizar uma integral do modelo de previsão de dados.

> O algoritmo e o tipo de modelo são desacoplados. Você pode usar DPMSolver ou DPMSolver++ tanto para modelos de previsão de ruído quanto para modelos de previsão de dados.

dpm_solver_first_order_update

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Parâmetros

  • model_output (torch.Tensor) — A saída direta do modelo de difusão aprendido.
  • sample (torch.Tensor, opcional) — Uma instância atual de uma amostra criada pelo processo de difusão.
  • noise (torch.Tensor, opcional) — O tensor de ruído.

Retorna

torch.Tensor

O tensor de amostra no passo de tempo anterior.

Um passo para o DPMSolver de primeira ordem (equivalente ao DDIM).

index_for_timestep

< >

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

Parâmetros

  • timestep (int ou torch.Tensor) — O timestep para o qual encontrar o índice.
  • schedule_timesteps (torch.Tensor, opcional) — O agendamento de timesteps a ser pesquisado. Se None, usa self.timesteps.

Retorna

int

O índice do timestep no agendamento.

Encontre o índice para um passo de tempo (timestep) específico no agendamento.

multistep_dpm_solver_second_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Parâmetros

  • model_output_list (list[torch.Tensor]) — As saídas diretas do modelo de difusão aprendido nos timesteps atuais e subsequentes.
  • sample (torch.Tensor, opcional) — Uma instância atual de uma amostra criada pelo processo de difusão.
  • noise (torch.Tensor, opcional) — Ruído aleatório usado pelas variantes de solver estocástico (sde-*). Obrigatório quando algorithm_type é definido como um deles e não utilizado caso contrário.

Retorna

torch.Tensor

O tensor de amostra no passo de tempo anterior.

Um passo para o DPMSolver multietapa de segunda ordem.

multistep_dpm_solver_third_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Parâmetros

  • model_output_list (list[torch.Tensor]) — As saídas diretas do modelo de difusão aprendido nos timesteps atuais e subsequentes.
  • sample (torch.Tensor, opcional) — Uma instância atual de uma amostra criada pelo processo de difusão.
  • noise (torch.Tensor, opcional) — O tensor de ruído.

Retorna

torch.Tensor

O tensor de amostra no passo de tempo anterior.

Um passo do DPMSolver multietapa de terceira ordem.

scale_model_input

< >

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

Parâmetros

  • sample (torch.Tensor) — A amostra de entrada.

Retorna

torch.Tensor

Uma amostra de entrada escalada.

Garante a intercambiabilidade com agendadores que precisam escalar a entrada do modelo de desruidamento dependendo do passo de tempo atual.

set_begin_index

< >

( begin_index: int = 0 )

Parâmetros

  • begin_index (int, padrão 0) — O índice inicial do agendador.

Define o índice inicial para o agendador. Esta função deve ser executada a partir do pipeline antes da inferência.

set_timesteps

< >

( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )

Parâmetros

  • num_inference_steps (int, opcional) — O número de etapas de difusão usadas ao gerar amostras com um modelo pré-treinado.
  • device (str ou torch.device, opcional) — O dispositivo para o qual os timesteps devem ser movidos. Se None, os timesteps não são movidos.
  • mu (float, opcional) — Expoente para o deslocamento dinâmico de tempo. Exige use_dynamic_shifting e um time_shift_type de "exponential"; quando informado, flow_shift é definido como exp(mu).
  • timesteps (list[int], opcional) — Timesteps personalizados usados para suportar um agendamento de timesteps arbitrário. Se None, os timesteps serão gerados com base no atributo timestep_spacing. Se timesteps for passado, num_inference_steps e sigmas devem ser None, e o atributo timestep_spacing será ignorado.

Define os passos discretos usados para a cadeia de difusão (a ser executado antes da inferência).

etapa

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple

Parâmetros

  • model_output (torch.Tensor) — A saída direta do modelo de difusão aprendido.
  • timestep (int ou torch.Tensor) — O timestep discreto atual na cadeia de difusão.
  • sample (torch.Tensor) — Uma instância atual de uma amostra criada pelo processo de difusão.
  • generator (torch.Generator, opcional) — Um gerador de números aleatórios.
  • variance_noise (torch.Tensor, opcional) — Alternativa para gerar ruído com generator fornecendo diretamente o ruído para a variância em si. Útil para métodos como LEdits++.
  • return_dict (bool, padrão True) — Se deve ou não retornar um SchedulerOutput ou tuple.

Retorna

SchedulerOutput ou tuple

Se return_dict for True, SchedulerOutput é retornado; caso contrário, uma tupla é retornada, em que o primeiro elemento é o tensor da amostra.

Preveja a amostra do passo de tempo anterior revertendo o SDE. Esta função propaga a amostra com o DPMSolver multistep.

SchedulerOutput

classe diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

Parâmetros

  • prev_sample (torch.Tensor de forma (batch_size, num_channels, height, width) para imagens) — Amostra calculada (x_{t-1}) do passo de tempo anterior. prev_sample deve ser usado como entrada do modelo no loop de remoção de ruído.

Classe base para a saída da função step de um agendador.

Update on GitHub