Diffusers documentation
VQDiffusionScheduler
VQDiffusionScheduler
VQDiffusionScheduler converte a saída do modelo transformer em uma amostra para a imagem sem ruído no passo de difusão anterior. Foi introduzido em Vector Quantized Diffusion Model for Text-to-Image Synthesis, de Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan e Baining Guo.
O resumo do artigo é:
Apresentamos o modelo de difusão com quantização vetorial (VQ-Diffusion) para geração de imagens a partir de texto. Este método é baseado em um autoencoder variacional com quantização vetorial (VQ-VAE) cujo espaço latente é modelado por uma variante condicional do Modelo Probabilístico de Difusão de Desruído (DDPM) desenvolvido recentemente. Verificamos que este método de espaço latente é adequado para tarefas de geração de imagens a partir de texto, pois não apenas elimina o viés unidirecional dos métodos existentes, mas também nos permite incorporar uma estratégia de difusão de máscara e substituição para evitar o acúmulo de erros, um problema sério nos métodos existentes. Nossos experimentos mostram que o VQ-Diffusion produz resultados significativamente melhores na geração de imagens a partir de texto quando comparado a modelos autoregressivos (AR) convencionais com números de parâmetros semelhantes. Em comparação com métodos anteriores baseados em GAN para geração de imagens a partir de texto, nosso VQ-Diffusion pode lidar com cenas mais complexas e melhorar a qualidade das imagens sintetizadas em grande margem. Finalmente, mostramos que o cálculo de geração de imagens em nosso método pode ser altamente eficiente por meio de reparametrização. Com os métodos AR tradicionais, o tempo de geração de imagens a partir de texto aumenta linearmente com a resolução da imagem de saída e, portanto, é bastante demorado mesmo para imagens de tamanho normal. O VQ-Diffusion nos permite alcançar um melhor equilíbrio entre qualidade e velocidade. Nossos experimentos indicam que o modelo VQ-Diffusion com reparametrização é quinze vezes mais rápido que os métodos AR tradicionais, ao mesmo tempo em que atinge uma melhor qualidade de imagem.
VQDiffusionScheduler
classe diffusers.VQDiffusionScheduler
< source >( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )
Parâmetros
- num_vec_classes (
int) — O número de classes dos embeddings vetoriais dos pixels latentes. Inclui a classe para o pixel latente mascarado. - num_train_timesteps (
int, padrão100) — O número de etapas de difusão para treinar o modelo. - alpha_cum_start (
float, padrão0.99999) — O valor inicial de alpha cumulativo. - alpha_cum_end (
float, padrão0.000009) — O valor final de alpha cumulativo. - gamma_cum_start (
float, padrão0.000009) — O valor inicial de gamma cumulativo. - gamma_cum_end (
float, padrão0.99999) — O valor final de gamma cumulativo.
Um agendador para difusão com quantização vetorial.
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.
apply_cumulative_transitions
< source >( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Parâmetros
- q (
torch.Tensorde forma(batch size, num classes - 1, num latent pixels)) — As probabilidades logarítmicas sobre as classes de pixels latentes não mascarados. - t (
intoutorch.Tensor) — O passo de tempo que determina qual matriz de transição cumulativa é utilizada.
Retorna
torch.Tensor de forma (batch size, num classes, num latent pixels)
As probabilidades de log transicionadas com as probabilidades de classe da máscara anexadas.
Aplique a matriz de transição cumulativa em um passo de tempo às probabilidades logarítmicas sobre as classes não mascaradas.
log_Q_t_transitioning_to_known_class
< source >( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor
Parâmetros
- t (
intoutorch.Tensor) — O passo de tempo que determina qual matriz de transição é usada. - x_t (
torch.LongTensorde forma(batch size, num latent pixels)) — As classes de cada pixel latente no tempot. - log_onehot_x_t (
torch.Tensorde forma(batch size, num classes, num latent pixels)) — Os vetores log one-hot dex_t. - cumulative (
bool) — Se cumulative forFalse, a matriz de transição de um único passot-1->té usada. Se cumulative forTrue, a matriz de transição cumulativa0->té usada.
Retorna
torch.Tensor
Cada coluna da matriz retornada é uma linha de log probabilidades da matriz de transição de probabilidade completa. O tensor tem a forma (batch size, num classes - 1, num latent pixels) quando cumulative é True e a forma (batch size, num classes, num latent pixels) caso contrário.
Quando cumulativo, o tensor tem uma linha a menos porque o pixel latente inicial não pode ser mascarado.
Onde:
q_né a distribuição de probabilidade do processo de propagação do pixel latente de ordemn.- C_0 é uma classe de um embedding latente de pixels
- C_k é a classe do pixel latente mascarado
resultado não cumulativo (omitindo logaritmos):
resultado cumulativo (omitindo logaritmos):
Calcula as probabilidades logarítmicas das linhas da matriz de transição (cumulativa ou não cumulativa) para cada pixel latente em x_t.
q_posterior
< source >( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Parâmetros
- log_p_x_0 (
torch.Tensorde forma(batch size, num classes - 1, num latent pixels)) — As probabilidades logarítmicas para as classes previstas dos pixels latentes iniciais. Não inclui uma previsão para a classe mascarada, pois a imagem inicial sem ruído não pode ser mascarada. - x_t (
torch.LongTensorde forma(batch size, num latent pixels)) — As classes de cada pixel latente no tempot. - t (
intoutorch.Tensor) — O passo de tempo que determina qual matriz de transição é usada.
Retorna
torch.Tensor de forma (batch size, num classes, num latent pixels)
As probabilidades de log para as classes previstas da imagem no passo de tempo t-1.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
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: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]
Parâmetros
- model_output (
torch.Tensorde forma(batch size, num classes - 1, num latent pixels)) — As probabilidades logarítmicas para as classes previstas dos pixels latentes iniciais. Não inclui uma previsão para a classe mascarada, pois a imagem inicial sem ruído não pode ser mascarada. - timestep (
intoutorch.Tensor) — O timestep que determina quais matrizes de transição são usadas. - sample (
torch.LongTensorde forma(batch size, num latent pixels)) — As classes de cada pixel latente no timestep atual. - generator (
torch.Generator, opcional) — Um gerador de números aleatórios para o ruído aplicado ap(x_{t-1} | x_t)antes de ser amostrado. - return_dict (
bool, padrãoTrue) — Se deve ou não retornar um VQDiffusionSchedulerOutput outuple.
Retorna
VQDiffusionSchedulerOutput ou tuple[torch.LongTensor]
If return_dict is True, VQDiffusionSchedulerOutput is
returned, otherwise a tuple is returned where the first element is the sample tensor.
Preveja a amostra do passo de tempo anterior pela distribuição de transição reversa. Consulte q_posterior() para mais detalhes sobre como a distribuição é calculada.
VQDiffusionSchedulerOutput
classe diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput
< source >( prev_sample: LongTensor )
Classe de saída para a saída da função de passo do agendador.