Diffusers documentation
AutoencoderKL
AutoencoderKL
O modelo de autoencoder variacional (VAE) com perda KL foi introduzido em Auto-Encoding Variational Bayes por Diederik P. Kingma e Max Welling. O modelo é usado no 🤗 Diffusers para codificar imagens em latentes e para decodificar representações latentes em imagens.
O resumo do artigo é:
Como podemos realizar inferência e aprendizado eficientes em modelos probabilísticos direcionados, na presença de variáveis latentes contínuas com distribuições posteriores intratáveis e grandes conjuntos de dados? Introduzimos um algoritmo de inferência e aprendizado variacional estocástico que escala para grandes conjuntos de dados e, sob algumas condições de diferenciabilidade suaves, funciona até mesmo no caso intratável. Nossas contribuições são duplas. Primeiro, mostramos que uma reparametrização do limite inferior variacional produz um estimador de limite inferior que pode ser otimizado de forma direta usando métodos padrão de gradiente estocástico. Segundo, mostramos que para conjuntos de dados i.i.d. com variáveis latentes contínuas por ponto de dados, a inferência posterior pode ser feita especialmente eficiente ao ajustar um modelo de inferência aproximado (também chamado de modelo de reconhecimento) à posterior intratável usando o estimador de limite inferior proposto. As vantagens teóricas são refletidas nos resultados experimentais.
Carregando do formato original
Por padrão, o AutoencoderKL deve ser carregado com from_pretrained(), mas também pode ser carregado
a partir do formato original usando FromOriginalModelMixin.from_single_file da seguinte forma:
from diffusers import AutoencoderKL
url = "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.safetensors" # can also be a local file
model = AutoencoderKL.from_single_file(url)AutoencoderKL
classe diffusers.AutoencoderKL
< source >( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)up_block_types: tuple = ('UpDecoderBlock2D',)block_out_channels: tuple = (64,)layers_per_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215shift_factor: float | None = Nonelatents_mean: tuple[float] | None = Nonelatents_std: tuple[float] | None = Noneforce_upcast: bool = Trueuse_quant_conv: bool = Trueuse_post_quant_conv: bool = Truemid_block_add_attention: bool = True )
Parâmetros
- in_channels (int, opcional, padrão 3) — Número de canais na imagem de entrada.
- out_channels (int, opcional, padrão 3) — Número de canais na saída.
- down_block_types (
tuple[str], opcional, padrão("DownEncoderBlock2D",)) — tupla de tipos de blocos de downsampling. - up_block_types (
tuple[str], opcional, padrão("UpDecoderBlock2D",)) — tupla de tipos de blocos de upsample. - block_out_channels (
tuple[int], opcional, padrão(64,)) — tupla de canais de saída dos blocos. - act_fn (
str, opcional, padrão"silu") — A função de ativação a ser utilizada. - latent_channels (
int, opcional, padrão 4) — Número de canais no espaço latente. - sample_size (
int, opcional, padrão32) — Tamanho da amostra de entrada. - scaling_factor (
float, opcional, padrão 0.18215) — O desvio padrão por componente do espaço latente treinado, calculado usando o primeiro lote do conjunto de treinamento. Isso é usado para escalar o espaço latente para ter variância unitária durante o treinamento do modelo de difusão. Os latentes são escalados com a fórmulaz = z * scaling_factorantes de serem passados para o modelo de difusão. Ao decodificar, os latentes são escalados de volta para a escala original com a fórmula:z = 1 / scaling_factor * z. Para mais detalhes, consulte as seções 4.3.2 e D.1 do artigo High-Resolution Image Synthesis with Latent Diffusion Models. - force_upcast (
bool, opcional, padrãoTrue) — Se habilitado, força o VAE a executar em float32 para pipelines de alta resolução de imagem, como o SD-XL. O VAE pode ser ajustado / treinado para uma faixa menor sem perder muita precisão, caso em queforce_upcastpode ser definido comoFalse- veja: https://huggingface.co/madebyollin/sdxl-vae-fp16-fix - mid_block_add_attention (
bool, opcional, padrãoTrue) — Se habilitado, o mid_block do Encoder e do Decoder terá blocos de atenção. Se definido como false, o mid_block terá apenas blocos resnet
Um modelo VAE com perda KL para codificar imagens em latentes e decodificar representações latentes em imagens.
Este modelo herda de ModelMixin. Consulte a documentação da superclasse para seus métodos genéricos implementados para todos os modelos (como download ou salvamento).
decode
< source >( z: FloatTensorreturn_dict: bool = Truegenerator = None ) → ~models.vae.DecoderOutput or tuple
Parâmetros
- z (
torch.Tensor) — Lote de entrada de vetores latentes. - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar um~models.vae.DecoderOutputem vez de uma tupla simples.
Retorna
~models.vae.DecoderOutput ou tuple
If return_dict is True, a ~models.vae.DecoderOutput is returned, otherwise a plain tuple is
returned.
Decodifique um lote de imagens.
encode
< source >( x: Tensorreturn_dict: bool = True )
Codifica um lote de imagens em latentes.
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → ~models.vae.DecoderOutput or tuple
Parâmetros
- sample (
torch.Tensor) — Amostra de entrada. - sample_posterior (
bool, opcional, padrãoFalse) — Se deve amostrar da posterior. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar umDecoderOutputem vez de uma tupla simples. - generator (
torch.Generator, opcional) — Umtorch.Generatorpara tornar a amostragem determinística.
Retorna
~models.vae.DecoderOutput ou tuple
Se return_dict for True, um ~models.vae.DecoderOutput é retornado; caso contrário, uma tuple simples é retornada.
Ativa as projeções QKV fundidas. Para os módulos de autoatenção, todas as matrizes de projeção (ou seja, query, key, value) são fundidas. Para os módulos de atenção cruzada, as matrizes de projeção de key e value são fundidas.
> Esta API é 🧪 experimental.
Desativa os processadores de atenção personalizados e define a implementação padrão de atenção.
tiled_decode
< source >( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
Parâmetros
- z (
torch.Tensor) — Lote de entrada de vetores latentes. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~models.vae.DecoderOutputem vez de uma tupla simples.
Retorna
~models.vae.DecoderOutput ou tuple
If return_dict is True, a ~models.vae.DecoderOutput is returned, otherwise a plain tuple is
returned.
Decodifique um lote de imagens usando um decodificador em mosaico.
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ~models.autoencoder_kl.AutoencoderKLOutput or tuple
Parâmetros
- x (
torch.Tensor) — Lote de entrada de imagens. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~models.autoencoder_kl.AutoencoderKLOutputem vez de uma tupla simples.
Retorna
~models.autoencoder_kl.AutoencoderKLOutput ou tuple
If return_dict is True, a ~models.autoencoder_kl.AutoencoderKLOutput is returned, otherwise a plain
tuple is returned.
Codifique um lote de imagens usando um codificador em mosaico.
Quando essa opção está habilitada, o VAE divide o tensor de entrada em blocos para calcular a codificação em várias etapas. Isso é útil para manter o uso de memória constante, independentemente do tamanho da imagem. O resultado final da codificação em blocos é diferente da codificação sem blocos, pois cada bloco usa um codificador diferente. Para evitar artefatos de blocos, os blocos se sobrepõem e são mesclados para formar uma saída suave. Você ainda pode observar variações do tamanho do bloco na saída, mas elas devem ser muito menos perceptíveis.
Desativa a projeção QKV fundida, se estiver habilitada.
> Esta API é 🧪 experimental.
AutoencoderKLOutput
classe diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
Saída do método de codificação do AutoencoderKL.
DecoderOutput
classe diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Saída do método de decodificação.