Diffusers documentation

UniPCMultistepScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

UniPCMultistepScheduler

UniPCMultistepScheduler é um framework sem treinamento projetado para amostragem rápida de modelos de difusão. Foi introduzido em UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models por Wenliang Zhao, Lujia Bai, Yongming Rao, Jie Zhou, Jiwen Lu.

Consiste em um corretor (UniC) e um preditor (UniP) que compartilham uma forma analítica unificada e suportam ordens arbitrárias. O UniPC é, por design, agnóstico em relação ao modelo, suportando DPMs em espaço de pixels/espaço latente em amostragem incondicional/condicional. Ele também pode ser aplicado a modelos de predição de ruído e de predição de dados. O corretor UniC também pode ser aplicado após qualquer solver pronto para aumentar a ordem de precisão.

O resumo do artigo é:

Os modelos probabilísticos de difusão (DPMs) demonstraram uma capacidade muito promissora na síntese de imagens em alta resolução. No entanto, a amostragem de um DPM pré-treinado é demorada devido às múltiplas avaliações da rede de remoção de ruído, tornando cada vez mais importante acelerar a amostragem dos DPMs. Apesar dos avanços recentes no design de amostradores rápidos, os métodos existentes ainda não conseguem gerar imagens satisfatórias em muitos aplicativos em que um número menor de etapas (por exemplo, <10) é preferido. Neste artigo, desenvolvemos um corretor unificado (UniC) que pode ser aplicado após qualquer amostrador DPM existente para aumentar a ordem de precisão sem avaliações extras do modelo, e derivamos um preditor unificado (UniP) que suporta ordem arbitrária como subproduto. Combinando UniP e UniC, propomos um framework unificado de preditor-corretor chamado UniPC para a amostragem rápida de DPMs, que possui uma forma analítica unificada para qualquer ordem e pode melhorar significativamente a qualidade da amostragem em relação a métodos anteriores, especialmente em um número extremamente pequeno de etapas. Avaliamos nossos métodos por meio de extensos experimentos, incluindo amostragem incondicional e condicional usando DPMs em espaço de pixels e espaço latente. Nosso UniPC pode alcançar 3,87 FID no CIFAR10 (incondicional) e 7,51 FID no ImageNet 256×256 (condicional) com apenas 10 avaliações de função. O código está disponível em este URL https.

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 predict_x0=True 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.

UniPCMultistepScheduler

classe diffusers.UniPCMultistepScheduler

< >

( 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.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list[int] = []solver_p: SchedulerMixin = Noneuse_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 = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )

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, 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 UniPC, que pode ser qualquer inteiro positivo. A ordem de precisão efetiva é solver_order + 1 devido ao UniC. 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", optional) — 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 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 predict_x0=True.
  • predict_x0 (bool, padrão True) — Se deve usar o algoritmo de atualização no x0 previsto.
  • solver_type ("bh1" ou "bh2", padrão "bh2") — Tipo de solver para UniPC. Recomenda-se usar bh1 para amostragem incondicional quando steps < 10, e bh2 caso contrário.
  • 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.
  • disable_corrector (list, padrão []) — Define em qual etapa desativar o corretor para mitigar o desalinhamento entre epsilon_theta(x_t, c) e epsilon_theta(x_t^c, c), o que pode influenciar a convergência para uma escala de orientação grande. O corretor é geralmente desativado durante as primeiras etapas.
  • solver_p (SchedulerMixin, padrão None) — Qualquer outro scheduler que, se especificado, faz o algoritmo se tornar solver_p + UniC.
  • 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.
  • 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.
  • final_sigmas_type ("zero" ou "sigma_min", 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.
  • 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.

UniPCMultistepScheduler é um framework sem treinamento projetado para a amostragem rápida de modelos 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 UniPC.

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_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

Parâmetros

  • this_model_output (torch.Tensor) — As saídas do modelo em x_t.
  • this_timestep (int) — O timestep atual t.
  • last_sample (torch.Tensor) — A amostra gerada antes do último preditor x_{t-1}.
  • this_sample (torch.Tensor) — A amostra gerada após o último preditor x_{t}.
  • order (int) — O p de UniC-p nesta etapa. A ordem de precisão efetiva deve ser order + 1.

Retorna

torch.Tensor

O tensor de amostra corrigido no timestep atual.

Um passo para o UniC (versão B(h)).

multistep_uni_p_bh_update

< >

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

Parâmetros

  • model_output (torch.Tensor) — A saída direta do modelo de difusão aprendido no timestep atual.
  • 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.
  • order (int) — A ordem do UniP neste timestep (corresponde ao p em UniPC-p).

Retorna

torch.Tensor

O tensor de amostra no passo de tempo anterior.

Um passo para o UniP (versão B(h)). Alternativamente, self.solver_p é usado se especificado.

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 | None = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: list[float] | None = Nonemu: bool | 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.
  • sigmas (List[float], opcional) — Valores personalizados para sigmas a serem usados em cada etapa de difusão. Se None, os sigmas são calculados automaticamente.
  • mu (float, opcional) — Parâmetro mu opcional para deslocamento dinâmico ao usar o tipo de deslocamento de tempo exponencial.

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 UniPC multistep.

stretch_shift_to_terminal

< >

( t: Tensor ) → torch.Tensor

Parâmetros

  • t (torch.Tensor) — Um tensor de timesteps a ser esticado e deslocado.

Retorna

torch.Tensor

Um tensor de timesteps ajustados de modo que o valor final seja igual a self.config.shift_terminal.

Estica e desloca o cronograma de timesteps para garantir que ele termine no valor de configuração shift_terminal configurado.

Referência: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

Parâmetros

  • mu (float) — O parâmetro mu para o deslocamento de tempo.
  • sigma (float) — O parâmetro sigma para o deslocamento de tempo.
  • t (torch.Tensor) — Os passos de tempo de entrada.

Retorna

torch.Tensor

Os timesteps deslocados no tempo.

Aplicar o deslocamento temporal aos sigmas.

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