Diffusers documentation

EDMDPMSolverMultistepScheduler

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

EDMDPMSolverMultistepScheduler

EDMDPMSolverMultistepScheduler é uma formulação de Karras de DPMSolverMultistepScheduler, um agendador multietapa de DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps e 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.

EDMDPMSolverMultistepScheduler

classe diffusers.EDMDPMSolverMultistepScheduler

< >

( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )

Parâmetros

  • sigma_min (float, opcional, padrão 0.002) — Magnitude mínima de ruído no agendamento de sigma. Isso foi definido como 0.002 no paper EDM [1]; um intervalo razoável é [0, 10].
  • sigma_max (float, opcional, padrão 80.0) — Magnitude máxima de ruído no agendamento de sigma. Isso foi definido como 80.0 no paper EDM [1]; um intervalo razoável é [0.2, 80.0].
  • sigma_data (float, opcional, padrão 0.5) — O desvio padrão da distribuição dos dados. Isso é definido como 0,5 no artigo EDM [1].
  • sigma_schedule (str, opcional, padrão karras) — Agendamento de sigma para calcular os sigmas. Por padrão, usamos o agendamento introduzido no paper do EDM (https://huggingface.co/papers/2206.00364). Outro valor aceitável é “exponential”. O agendamento exponencial foi incorporado neste modelo: https://huggingface.co/stabilityai/cosxl.
  • num_train_timesteps (int, padrão 1000) — O número de etapas de difusão para treinar o modelo.
  • prediction_type (str, defaults to epsilon, optional) — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample) or v_prediction` (see section 2.4 of Imagen Video paper).
  • rho (float, opcional, padrão 7.0) — O parâmetro rho no agendamento de sigma de Karras. Este foi definido como 7.0 no paper EDM [1].
  • 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.
  • 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 (str, padrão dpmsolver++) — Tipo de algoritmo para o solver; pode ser dpmsolver++ ou sde-dpmsolver++. O tipo dpmsolver++ implementa os algoritmos do paper DPMSolver++. Recomenda-se usar dpmsolver++ ou sde-dpmsolver++ com solver_order=2 para amostragem guiada, como no Stable Diffusion.
  • solver_type (str, padrão midpoint) — Tipo de solver para o solver de segunda ordem; pode ser midpoint ou heun. O tipo de solver afeta levemente a qualidade da amostra, especialmente para um pequeno número de etapas. Recomenda-se o uso de 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.
  • final_sigmas_type (str, 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.

Implementa o DPMSolverMultistepScheduler na formulação EDM apresentada em Karras et al. 2022 [1]. EDMDPMSolverMultistepScheduler é um solver de alta ordem dedicado e rápido para EDOs de difusão.

[1] Karras, Tero, et al. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364

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: Tensor ) → torch.Tensor

Parâmetros

  • original_samples (torch.Tensor) — As amostras originais às quais o ruído será adicionado.
  • noise (torch.Tensor) — O tensor de ruído a ser adicionado às amostras originais.
  • timesteps (torch.Tensor) — Os timesteps nos quais adicionar ruído, determinando o nível de ruído a partir do agendamento.

Retorna

torch.Tensor

As amostras ruidosas com ruído adicionado, escalado de acordo com a agenda de passos temporais.

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

convert_model_output

< >

( model_output: Tensorsample: Tensor ) → torch.Tensor

Parâmetros

  • model_output (torch.Tensor) — A saída direta do modelo de difusão aprendido.
  • sample (torch.Tensor) — 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: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor

Parâmetros

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

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: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → 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) — Uma instância atual de uma amostra criada pelo processo de difusão.
  • noise (torch.Tensor, opcional) — O tensor de ruído a ser adicionado às amostras originais.

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: listsample: Tensor ) → 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) — Uma instância atual de uma amostra criada pelo processo de difusão.

Retorna

torch.Tensor

O tensor de amostra no passo de tempo anterior.

Um passo do DPMSolver multietapa de terceira ordem.

precondition_inputs

< >

( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parâmetros

  • sample (torch.Tensor) — O tensor de amostra de entrada para pré-condicionamento.
  • sigma (float ou torch.Tensor) — O valor atual de sigma (nível de ruído).

Retorna

torch.Tensor

A amostra de entrada escalada.

Pré-condicione a amostra de entrada escalando-a de acordo com a formulação EDM.

precondition_noise

< >

( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parâmetros

  • sigma (float ou torch.Tensor) — O valor de sigma (nível de ruído) a ser pré-condicionado.

Retorna

torch.Tensor

O valor de ruído pré-condicionado calculado como 0.25 * log(sigma).

Pré-condicione o nível de ruído aplicando uma transformação logarítmica.

precondition_outputs

< >

( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parâmetros

  • sample (torch.Tensor) — O tensor de amostra de entrada.
  • model_output (torch.Tensor) — A saída direta do modelo de difusão aprendido.
  • sigma (float ou torch.Tensor) — O valor atual de sigma (nível de ruído).

Retorna

torch.Tensor

A amostra desruída calculada combinando a conexão de atalho e a escala de saída.

Pré-condicione as saídas do modelo de acordo com a formulação do EDM.

scale_model_input

< >

( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parâmetros

  • sample (torch.Tensor) — O tensor de amostra de entrada.
  • timestep (float ou torch.Tensor) — O timestep atual na cadeia de difusão.

Retorna

torch.Tensor

Uma amostra de entrada escalada.

Escala a entrada do modelo de desruidamento para corresponder ao algoritmo Euler. 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, NoneType] = None )

Parâmetros

  • num_inference_steps (int) — 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.

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] = 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) — 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.
  • return_dict (bool) — Se deve ou não retornar um SchedulerOutput ou tuple.

Retorna

SchedulerOutput ou tuple

If return_dict is True, SchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

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