Diffusers documentation

AsymmetricAutoencoderKL

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AsymmetricAutoencoderKL

Modelo de autoencoder variacional (VAE) maior aprimorado com perda KL para a tarefa de inpainting: Designing a Better Asymmetric VQGAN for StableDiffusion, de Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua.

O resumo do artigo é:

StableDiffusion é um gerador revolucionário de texto para imagem que está causando impacto no mundo de geração e edição de imagens. Diferente dos métodos tradicionais que aprendem um modelo de difusão no espaço de pixels, o StableDiffusion aprende um modelo de difusão no espaço latente por meio de um VQGAN, garantindo tanto eficiência quanto qualidade. Ele não apenas suporta tarefas de geração de imagens, mas também permite a edição de imagens reais, como inpainting de imagem e edição local. No entanto, observamos que o VQGAN vanilla usado no StableDiffusion leva a uma perda significativa de informações, causando artefatos de distorção mesmo em regiões de imagem não editadas. Para isso, propomos um novo VQGAN assimétrico com dois designs simples. Em primeiro lugar, além da entrada do codificador, o decodificador contém um ramo condicional que incorpora informações de prioris específicas da tarefa, como a região de imagem sem máscara no inpainting. Em segundo lugar, o decodificador é muito mais pesado que o codificador, permitindo uma recuperação mais detalhada com apenas um pequeno aumento no custo total de inferência. O custo de treinamento do nosso VQGAN assimétrico é baixo, e precisamos apenas re-treinar um novo decodificador assimétrico, mantendo o codificador do VQGAN vanilla e o StableDiffusion inalterados. Nosso VQGAN assimétrico pode ser amplamente utilizado em métodos de inpainting e edição local baseados em StableDiffusion. Experimentos extensos demonstram que ele pode melhorar significativamente o desempenho de inpainting e edição, mantendo a capacidade original de texto para imagem. O código está disponível em https://github.com/buxiangzhiren/Asymmetric_VQGAN

Os resultados da avaliação podem ser encontrados na seção 4.1 do artigo original.

Checkpoints disponíveis

Exemplo de uso

from diffusers import AsymmetricAutoencoderKL, StableDiffusionInpaintPipeline
from diffusers.utils import load_image, make_image_grid


prompt = "a photo of a person with beard"
img_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/celeba_hq_256.png"
mask_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png"

original_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))

pipe = StableDiffusionInpaintPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-inpainting")
pipe.vae = AsymmetricAutoencoderKL.from_pretrained("cross-attention/asymmetric-autoencoder-kl-x-1-5")
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(prompt=prompt, image=original_image, mask_image=mask_image).images[0]
make_image_grid([original_image, mask_image, image], rows=1, cols=3)

AsymmetricAutoencoderKL

classe diffusers.AsymmetricAutoencoderKL

< >

( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)down_block_out_channels: tuple = (64,)layers_per_down_block: int = 1up_block_types: tuple = ('UpDecoderBlock2D',)up_block_out_channels: tuple = (64,)layers_per_up_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215 )

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.
  • down_block_out_channels (tuple[int], opcional, padrão (64,)) — tupla de canais de saída dos blocos de downsampling.
  • layers_per_down_block (int, opcional, padrão 1) — Número de camadas para o bloco de descida.
  • up_block_types (tuple[str], opcional, padrão ("UpDecoderBlock2D",)) — tupla de tipos de blocos de upsample.
  • up_block_out_channels (tuple[int], opcional, padrão (64,)) — tupla de canais de saída dos blocos de upscaling.
  • layers_per_up_block (int, opcional, padrão 1) — Número de camadas para o bloco de subida.
  • 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ão 32) — Tamanho da amostra de entrada.
  • norm_num_groups (int, opcional, padrão 32) — Número de grupos a serem usados na primeira camada de normalização nos blocos ResNet.
  • 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órmula z = z * scaling_factor antes 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.

Projetando um VQGAN assimétrico melhor para StableDiffusion https://huggingface.co/papers/2306.04632 . 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).

forward

< >

( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple

Parâmetros

  • sample (torch.Tensor) — Amostra de entrada.
  • mask (torch.Tensor, opcional, padrão None) — Máscara opcional para inpainting.
  • sample_posterior (bool, opcional, padrão False) — Se deve amostrar da posterior.
  • return_dict (bool, opcional, padrão True) — Se deve ou não retornar um DecoderOutput em vez de uma tupla simples.
  • generator (torch.Generator, opcional) — Um torch.Generator para tornar a amostragem determinística.

Retorna

DecoderOutput ou tuple

Se return_dict for True, um DecoderOutput é retornado; caso contrário, uma tuple simples é retornada.

AutoencoderKLOutput

classe diffusers.models.modeling_outputs.AutoencoderKLOutput

< >

( latent_dist: DiagonalGaussianDistribution )

Parâmetros

  • latent_dist (DiagonalGaussianDistribution) — Saídas codificadas do Encoder representadas como a média e o logvar de DiagonalGaussianDistribution. DiagonalGaussianDistribution permite amostrar latentes da distribuição.

Saída do método de codificação do AutoencoderKL.

DecoderOutput

classe diffusers.models.autoencoders.vae.DecoderOutput

< >

( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )

Parâmetros

  • sample (torch.Tensor de forma (batch_size, num_channels, height, width)) — A amostra de saída decodificada da última camada do modelo.

Saída do método de decodificação.

Update on GitHub