Diffusers documentation

DEISMultistepScheduler

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

DEISMultistepScheduler

O Diffusion Exponential Integrator Sampler (DEIS) é proposto em Fast Sampling of Diffusion Models with Exponential Integrator por Qinsheng Zhang e Yongxin Chen. DEISMultistepScheduler é um solver rápido de alta ordem para equações diferenciais ordinárias (ODEs) de difusão.

Esta implementação modifica a fórmula de ajuste polinomial no espaço log-rho, em vez do espaço linear t original do paper DEIS. Essa modificação possui coeficientes em forma fechada para a atualização multietapa exponencial, em vez de depender de um solver numérico.

O resumo do artigo é:

Nos últimos anos, testemunhamos o grande sucesso dos modelos de Difusão~(DMs) na geração de amostras de alta fidelidade em tarefas de modelagem generativa. Uma limitação importante dos DMs é seu procedimento de amostragem notoriamente lento, que normalmente requer de centenas a milhares de passos de discretização temporal do processo de difusão aprendido para alcançar a precisão desejada. Nosso objetivo é desenvolver um método de amostragem rápido para DMs com um número muito menor de passos, mantendo a alta qualidade das amostras. Para isso, analisamos sistematicamente o procedimento de amostragem nos DMs e identificamos os fatores-chave que afetam a qualidade da amostra, sendo o método de discretização o mais crucial. Ao examinar cuidadosamente o processo de difusão aprendido, propomos o Diffusion Exponential Integrator Sampler~(DEIS). Ele é baseado no Exponential Integrator, projetado para discretizar equações diferenciais ordinárias (ODEs), e aproveita uma estrutura semilinear do processo de difusão aprendido para reduzir o erro de discretização. O método proposto pode ser aplicado a qualquer DM e pode gerar amostras de alta fidelidade em tão poucas quanto 10 etapas. Em nossos experimentos, leva cerca de 3 minutos em uma GPU A6000 para gerar 50 mil imagens do CIFAR10. Além disso, ao usar diretamente DMs pré-treinados, alcançamos o desempenho de amostragem state-of-the-art quando o número de avaliações da função de score~(NFE) é limitado, por exemplo, 4,17 FID com 10 NFEs, 3,37 FID e 9,74 IS com apenas 15 NFEs no CIFAR10. O código está disponível em este URL https.

Dicas

É recomendado definir solver_order como 2 ou 3, enquanto solver_order=1 é equivalente ao DDIMScheduler.

O thresholding dinâmico do Imagen é suportado e, para modelos de difusão no espaço de pixels, você pode definir thresholding=True para usar o thresholding dinâmico.

DEISMultistepScheduler

classe diffusers.DEISMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = '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['deis'] = 'deis'solver_type: typing.Literal['logrho'] = 'logrho'lower_order_final: bool = Trueuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0use_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. Escolha entre linear, scaled_linear ou squaredcos_cap_v2.
  • trained_betas (np.ndarray ou list[float], 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 DEIS, 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", or "flow_prediction", defaults to "epsilon") — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.
  • 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 limitação dinâmica. 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.
  • algorithm_type ("deis", padrão "deis") — O tipo de algoritmo para o solver.
  • solver_type ("logrho", padrão "logrho") — Tipo de solver para DEIS.
  • 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.
  • 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_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 parâmetro de deslocamento de fluxo para modelos baseados em fluxo.
  • 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.
  • use_dynamic_shifting (bool, padrão False) — Se deve usar shifting dinâmico para o agendamento de ruído.
  • time_shift_type ("exponential", padrão "exponential") — O tipo de deslocamento de tempo a ser aplicado.

DEISMultistepScheduler é um solver de alta ordem e rápido para equações diferenciais ordinárias (ODEs) 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: Tensor = None**kwargs ) → torch.Tensor

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.

Retorna

torch.Tensor

A saída do modelo convertido.

Converta a saída do modelo para o tipo correspondente necessário pelo algoritmo DEIS.

deis_first_order_update

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

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.
  • prev_timestep (int) — O passo de tempo discreto anterior na cadeia de difusão.
  • 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 para o DEIS 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_deis_second_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: 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) — 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 para o DEIS multietapa de segunda ordem.

multistep_deis_third_order_update

< >

( model_output_list: list[torch.Tensor]*argssample: 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) — 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 para o DEIS 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: intdevice: typing.Union[str, torch.device] = Nonemu: float | None = 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.
  • mu (float, opcional) — O parâmetro mu para o deslocamento dinâmico. Usado apenas quando use_dynamic_shifting=True e time_shift_type="exponential".

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: Tensorreturn_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.
  • return_dict (bool, padrão True) — 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 DEIS multietapa.

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