Diffusers documentation

VQDiffusionScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

< >

( 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ão 100) — O número de etapas de difusão para treinar o modelo.
  • alpha_cum_start (float, padrão 0.99999) — O valor inicial de alpha cumulativo.
  • alpha_cum_end (float, padrão 0.000009) — O valor final de alpha cumulativo.
  • gamma_cum_start (float, padrão 0.000009) — O valor inicial de gamma cumulativo.
  • gamma_cum_end (float, padrão 0.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

< >

( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Parâmetros

  • q (torch.Tensor de forma (batch size, num classes - 1, num latent pixels)) — As probabilidades logarítmicas sobre as classes de pixels latentes não mascarados.
  • t (int ou torch.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

< >

( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor

Parâmetros

  • t (int ou torch.Tensor) — O passo de tempo que determina qual matriz de transição é usada.
  • x_t (torch.LongTensor de forma (batch size, num latent pixels)) — As classes de cada pixel latente no tempo t.
  • log_onehot_x_t (torch.Tensor de forma (batch size, num classes, num latent pixels)) — Os vetores log one-hot de x_t.
  • cumulative (bool) — Se cumulative for False, a matriz de transição de um único passo t-1->t é usada. Se cumulative for True, a matriz de transição cumulativa 0->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 ordem n.
  • C_0 é uma classe de um embedding latente de pixels
  • C_k é a classe do pixel latente mascarado

resultado não cumulativo (omitindo logaritmos):

q_0(x_t | x_{t-1} = C_0) ... q_n(x_t | x_{t-1} = C_0)
          .      .                     .
          .               .            .
          .                      .     .
q_0(x_t | x_{t-1} = C_k) ... q_n(x_t | x_{t-1} = C_k)

resultado cumulativo (omitindo logaritmos):

q_0_cumulative(x_t | x_0 = C_0)    ...  q_n_cumulative(x_t | x_0 = C_0)
          .               .                          .
          .                        .                 .
          .                               .          .
q_0_cumulative(x_t | x_0 = C_{k-1}) ... q_n_cumulative(x_t | x_0 = C_{k-1})

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

< >

( 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.Tensor de 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.LongTensor de forma (batch size, num latent pixels)) — As classes de cada pixel latente no tempo t.
  • t (int ou torch.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.

Calcula as probabilidades logarítmicas para as classes previstas da imagem no passo de tempo t-1:

p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )

set_timesteps

< >

( num_inference_steps: intdevice: 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 e os parâmetros do processo de difusão (alpha, beta, gamma) devem ser 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: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]

Parâmetros

  • model_output (torch.Tensor de 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 (int ou torch.Tensor) — O timestep que determina quais matrizes de transição são usadas.
  • sample (torch.LongTensor de 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 a p(x_{t-1} | x_t) antes de ser amostrado.
  • return_dict (bool, padrão True) — Se deve ou não retornar um VQDiffusionSchedulerOutput ou tuple.

Retorna

VQDiffusionSchedulerOutput ou tuple[torch.LongTensor]

If return_dict é True, VQDiffusionSchedulerOutput é retornado; caso contrário, uma tupla é retornada, em que o primeiro elemento é o tensor da amostra.

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

< >

( prev_sample: LongTensor )

Parâmetros

  • prev_sample (torch.LongTensor de forma (batch size, num latent pixels)) — A amostra calculada no passo de tempo anterior. prev_sample deve ser usado como a próxima entrada do modelo no loop de remoção de ruído.

Classe de saída para a saída da função de passo do agendador.

Update on GitHub