Diffusers documentation

AutoencoderDC

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

AutoencoderDC

O modelo Autoencoder 2D usado em SANA e introduzido em DCAE pelos autores Junyu Chen*, Han Cai*, Junsong Chen, Enze Xie, Shang Yang, Haotian Tang, Muyang Li, Yao Lu, Song Han do MIT HAN Lab.

O resumo do artigo é:

Apresentamos o Deep Compression Autoencoder (DC-AE), uma nova família de modelos de autoencoder para acelerar modelos de difusão de alta resolução. Modelos de autoencoder existentes demonstraram resultados impressionantes com uma razão de compressão espacial moderada (por exemplo, 8x), mas falham em manter uma precisão de reconstrução satisfatória para razões de compressão espacial altas (por exemplo, 64x). Abordamos esse desafio introduzindo duas técnicas-chave: (1) Residual Autoencoding, em que projetamos nossos modelos para aprender resíduos com base em recursos transformados de espaço para canal, a fim de aliviar a dificuldade de otimização de autoencoders de alta compressão espacial; (2) Decoupled High-Resolution Adaptation, uma estratégia de treinamento desacoplada em três fases eficiente para mitigar a penalidade de generalização de autoencoders de alta compressão espacial. Com esses designs, melhoramos a razão de compressão espacial do autoencoder até 128, mantendo a qualidade de reconstrução. Ao aplicar nosso DC-AE a modelos de difusão latente, alcançamos uma aceleração significativa sem perda de precisão. Por exemplo, no ImageNet 512x512, nosso DC-AE fornece uma aceleração de inferência de 19.1x e uma aceleração de treinamento de 17.9x na GPU H100 para o UViT-H, ao mesmo tempo em que atinge um FID melhor, em comparação com o autoencoder SD-VAE-f8 amplamente utilizado. Nosso código está disponível em this https URL.

Os seguintes modelos DCAE foram lançados e são suportados no Diffusers.

Formato DiffusersFormato original
mit-han-lab/dc-ae-f32c32-sana-1.0-diffusersmit-han-lab/dc-ae-f32c32-sana-1.0
mit-han-lab/dc-ae-f32c32-in-1.0-diffusersmit-han-lab/dc-ae-f32c32-in-1.0
mit-han-lab/dc-ae-f32c32-mix-1.0-diffusersmit-han-lab/dc-ae-f32c32-mix-1.0
mit-han-lab/dc-ae-f64c128-in-1.0-diffusersmit-han-lab/dc-ae-f64c128-in-1.0
mit-han-lab/dc-ae-f64c128-mix-1.0-diffusersmit-han-lab/dc-ae-f64c128-mix-1.0
mit-han-lab/dc-ae-f128c512-in-1.0-diffusersmit-han-lab/dc-ae-f128c512-in-1.0
mit-han-lab/dc-ae-f128c512-mix-1.0-diffusersmit-han-lab/dc-ae-f128c512-mix-1.0

Este modelo foi contribuído por lawrence-cj.

Carregue um modelo no formato Diffusers com from_pretrained().

from diffusers import AutoencoderDC

ae = AutoencoderDC.from_pretrained("mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers", dtype=torch.float32).to("cuda")  # or "mps", "xpu", "cpu"

Carregue um modelo no Diffusers via from_single_file

from difusers import AutoencoderDC

ckpt_path = "https://huggingface.co/mit-han-lab/dc-ae-f32c32-sana-1.0/blob/main/model.safetensors"
model = AutoencoderDC.from_single_file(ckpt_path) 

O modelo AutoencoderDC possui variantes de checkpoint em arquivo único in e mix que possuem chaves de checkpoint correspondentes, mas utilizam fatores de escala diferentes. Não é possível para o Diffusers inferir automaticamente o arquivo de configuração correto a ser usado com o modelo com base apenas no checkpoint e, por padrão, configurará o modelo usando o arquivo de configuração da variante mix. Para substituir a configuração determinada automaticamente, use o argumento config ao usar o carregamento em arquivo único com checkpoints da variante in.

from diffusers import AutoencoderDC

ckpt_path = "https://huggingface.co/mit-han-lab/dc-ae-f128c512-in-1.0/blob/main/model.safetensors"
model = AutoencoderDC.from_single_file(ckpt_path, config="mit-han-lab/dc-ae-f128c512-in-1.0-diffusers")

AutoencoderDC

classe diffusers.AutoencoderDC

< >

( in_channels: int = 3latent_channels: int = 32attention_head_dim: int = 32encoder_block_types: str | tuple[str] = 'ResBlock'decoder_block_types: str | tuple[str] = 'ResBlock'encoder_block_out_channels: tuple = (128, 256, 512, 512, 1024, 1024)decoder_block_out_channels: tuple = (128, 256, 512, 512, 1024, 1024)encoder_layers_per_block: tuple = (2, 2, 2, 3, 3, 3)decoder_layers_per_block: tuple = (3, 3, 3, 3, 3, 3)encoder_qkv_multiscales: tuple = ((), (), (), (5,), (5,), (5,))decoder_qkv_multiscales: tuple = ((), (), (), (5,), (5,), (5,))upsample_block_type: str = 'pixel_shuffle'downsample_block_type: str = 'pixel_unshuffle'decoder_norm_types: str | tuple[str] = 'rms_norm'decoder_act_fns: str | tuple[str] = 'silu'encoder_out_shortcut: bool = Truedecoder_in_shortcut: bool = Truedecoder_conv_act_fn: str = 'relu'scaling_factor: float = 1.0 )

Parâmetros

  • in_channels (int, padrão 3) — O número de canais de entrada nas amostras.
  • latent_channels (int, padrão 32) — O número de canais na representação do espaço latente.
  • encoder_block_types (str | tuple[str], padrão "ResBlock") — O(s) tipo(s) de bloco a ser(em) usado(s) no codificador.
  • decoder_block_types (str | tuple[str], padrão "ResBlock") — O(s) tipo(s) de bloco a ser(em) usado(s) no decodificador.
  • encoder_block_out_channels (tuple[int, ...], padrão (128, 256, 512, 512, 1024, 1024)) — O número de canais de saída para cada bloco no codificador.
  • decoder_block_out_channels (tuple[int, ...], padrão (128, 256, 512, 512, 1024, 1024)) — O número de canais de saída para cada bloco no decodificador.
  • encoder_layers_per_block (tuple[int], padrão (2, 2, 2, 3, 3, 3)) — O número de camadas por bloco no codificador.
  • decoder_layers_per_block (tuple[int], padrão (3, 3, 3, 3, 3, 3)) — O número de camadas por bloco no decodificador.
  • encoder_qkv_multiscales (tuple[tuple[int, ...], ...], padrão ((), (), (), (5,), (5,), (5,))) — Configurações multiescala para as transformações QKV (query-key-value) do codificador.
  • decoder_qkv_multiscales (tuple[tuple[int, ...], ...], padrão ((), (), (), (5,), (5,), (5,))) — Configurações multiescala para as transformações QKV (query-key-value) do decodificador.
  • upsample_block_type (str, padrão "pixel_shuffle") — O tipo de bloco a ser usado para o aumento de resolução (upsampling) no decodificador.
  • downsample_block_type (str, padrão "pixel_unshuffle") — O tipo de bloco a ser usado para o downsampling no encoder.
  • decoder_norm_types (str | tuple[str], padrão "rms_norm") — O(s) tipo(s) de normalização a serem usados no decodificador.
  • decoder_act_fns (str | tuple[str], padrão "silu") — A(s) função(ões) de ativação a ser(em) usada(s) no decodificador.
  • encoder_out_shortcut (bool, padrão True) — Se deve usar um atalho no final do codificador.
  • decoder_in_shortcut (bool, padrão True) — Se deve usar um atalho no início do decodificador.
  • decoder_conv_act_fn (str, padrão "relu") — A função de ativação a ser usada no final do decodificador.
  • scaling_factor (float, padrão 1.0) — O inverso multiplicativo da raiz quadrada da média dos quadrados das características latentes. 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.

Um modelo Autoencoder introduzido em DCAE e utilizado em SANA.

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).

encode

< >

( x: Tensorreturn_dict: bool = True )

Parâmetros

  • x (torch.Tensor) — Lote de entrada de imagens.
  • return_dict (bool, padrão True) — Se deve retornar um ~models.vae.EncoderOutput em vez de uma tupla simples.

Codifica um lote de imagens em latentes.

decode

< >

( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple

Parâmetros

  • z (torch.Tensor) — Lote de entrada de vetores latentes.
  • return_dict (bool, padrão True) — Se deve retornar um ~models.vae.DecoderOutput em 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.

enable_tiling

< >

( tile_sample_min_height: int | None = Nonetile_sample_min_width: int | None = Nonetile_sample_stride_height: float | None = Nonetile_sample_stride_width: float | None = None )

Parâmetros

  • tile_sample_min_height (int, opcional) — A altura mínima necessária para que uma amostra seja separada em tiles ao longo da dimensão de altura.
  • tile_sample_min_width (int, opcional) — A largura mínima necessária para que uma amostra seja separada em tiles ao longo da dimensão de largura.
  • tile_sample_stride_height (int, opcional) — A quantidade mínima de sobreposição entre duas tiles verticais consecutivas. Isso garante que não haja artefatos de tiling produzidos ao longo da dimensão de altura.
  • tile_sample_stride_width (int, opcional) — O deslocamento entre duas tiles horizontais consecutivas. Isso garante que não sejam produzidos artefatos de tiling ao longo da dimensão de largura.

Ative a decodificação em blocos do AE. Quando essa opção está ativada, o AE divide o tensor de entrada em blocos para calcular a decodificação e a codificação em várias etapas. Isso é útil para economizar uma grande quantidade de memória e permitir o processamento de imagens maiores.

forward

< >

( sample: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple

Parâmetros

  • sample (torch.Tensor) — Amostra de entrada.
  • return_dict (bool, opcional, padrão True) — Se deve ou não retornar um DecoderOutput em vez de uma tupla simples.

Retorna

~models.vae.DecoderOutput ou tuple

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

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