Diffusers documentation
UniPCMultistepScheduler
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
< source >( 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 debetapara a inferência. - beta_end (
float, padrão 0.02) — O valor final debeta. - 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 entrelinear,scaled_linearousquaredcos_cap_v2. - trained_betas (
np.ndarray, opcional) — Passe um array de betas diretamente para o construtor para ignorarbeta_startebeta_end. - solver_order (
int, padrão2) — A ordem do UniPC, que pode ser qualquer inteiro positivo. A ordem de precisão efetiva ésolver_order + 1devido ao UniC. Recomenda-se usarsolver_order=2para amostragem guiada esolver_order=3para amostragem incondicional. - prediction_type (
"epsilon","sample","v_prediction", or"flow_prediction", defaults to"epsilon", optional) — Prediction type of the scheduler function; can beepsilon(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ãoFalse) — 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 quandothresholding=True. - sample_max_value (
float, padrão 1.0) — O valor de limiar para o thresholding dinâmico. Válido apenas quandothresholding=Trueepredict_x0=True. - predict_x0 (
bool, padrãoTrue) — 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 usarbh1para amostragem incondicional quando steps < 10, ebh2caso contrário. - lower_order_final (
bool, padrãoTrue) — 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 entreepsilon_theta(x_t, c)eepsilon_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ãoNone) — Qualquer outro scheduler que, se especificado, faz o algoritmo se tornarsolver_p + UniC. - use_karras_sigmas (
bool, opcional, padrãoFalse) — Se deve usar sigmas de Karras para os tamanhos de passo no agendamento de ruído durante o processo de amostragem. SeTrue, os sigmas são determinados de acordo com uma sequência de níveis de ruído {σi}. - use_exponential_sigmas (
bool, opcional, padrãoFalse) — 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ãoFalse) — 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ãoFalse) — 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 desigmapara 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. Sezero, o sigma final é definido como 0. - rescale_betas_zero_snr (
bool, padrãoFalse) — 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
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Adicione ruído às amostras originais de acordo com o agendamento de ruído nos timesteps especificados.
convert_model_output
< source >( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor
Converta a saída do modelo para o tipo correspondente necessário pelo algoritmo UniPC.
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Encontre o índice para um passo de tempo (timestep) específico no agendamento.
multistep_uni_c_bh_update
< source >( 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 emx_t. - this_timestep (
int) — O timestep atualt. - last_sample (
torch.Tensor) — A amostra gerada antes do último preditorx_{t-1}. - this_sample (
torch.Tensor) — A amostra gerada após o último preditorx_{t}. - order (
int) — Opde UniC-p nesta etapa. A ordem de precisão efetiva deve serorder + 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
< source >( 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
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
Garante a intercambiabilidade com agendadores que precisam escalar a entrada do modelo de desruidamento dependendo do passo de tempo atual.
set_begin_index
< source >( begin_index: int = 0 )
Define o índice inicial para o agendador. Esta função deve ser executada a partir do pipeline antes da inferência.
set_timesteps
< source >( 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 (
stroutorch.device, opcional) — O dispositivo para o qual os timesteps devem ser movidos. SeNone, os timesteps não são movidos. - sigmas (
List[float], opcional) — Valores personalizados para sigmas a serem usados em cada etapa de difusão. SeNone, 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
< source >( 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 (
intoutorch.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ãoTrue) — Se deve ou não retornar um SchedulerOutput outuple.
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
< source >( t: Tensor ) → torch.Tensor
Estica e desloca o cronograma de timesteps para garantir que ele termine no valor de configuração shift_terminal configurado.
time_shift
< source >( mu: floatsigma: floatt: Tensor ) → torch.Tensor
Aplicar o deslocamento temporal aos sigmas.
SchedulerOutput
classe diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Classe base para a saída da função step de um agendador.