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

MIT HAN Lab'dan Junyu Chen*, Han Cai*, Junsong Chen, Enze Xie, Shang Yang, Haotian Tang, Muyang Li, Yao Lu ve Song Han tarafından DCAE'de tanıtılan ve SANA'da kullanılan 2B Otomatik Kodlayıcı modeli.

Makalenin özeti şudur:

Yüksek çözünürlüklü difüzyon modellerini hızlandırmak için yeni bir otoenkoder modeli ailesi olan Deep Compression Autoencoder (DC-AE)'yi sunuyoruz. Mevcut otoenkoder modelleri, orta düzey uzamsal sıkıştırma oranlarında (ör. 8x) etkileyici sonuçlar gösterse de, yüksek uzamsal sıkıştırma oranlarında (ör. 64x) tatmin edici bir yeniden yapılandırma doğruluğunu korumakta başarısız olmaktadır. Bu zorluğu, iki temel teknik tanıtarak ele alıyoruz: (1) Kalıntı Otoenkodlama (Residual Autoencoding), burada modellerimizi, yüksek uzamsal sıkıştırma oranına sahip otoenkoderların optimizasyon zorluğunu hafifletmek amacıyla, uzaydan kanala dönüştürülmüş özelliklere dayalı kalıntıları öğrenmeye yönelik tasarlıyoruz; (2) Çözümlenmiş Yüksek Çözünürlük Uyumlandırması (Decoupled High-Resolution Adaptation), yüksek uzamsal sıkıştırma oranına sahip otoenkoderların genelleme cezasını azaltmak için verimli, çözümlenmiş üç aşamalı bir eğitim stratejisi. Bu tasarımlarla, yeniden yapılandırma kalitesini koruyarak otoenkoderın uzamsal sıkıştırma oranını 128'e kadar artırıyoruz. DC-AE'mizi latent difüzyon modellerine uyguladığımızda, doğruluk düşüşü olmadan önemli bir hızlanma elde ediyoruz. Örneğin, ImageNet 512x512 üzerinde, yaygın olarak kullanılan SD-VAE-f8 otoenkoderına kıyasla, UViT-H için H100 GPU üzerinde 19.1x çıkarım hızlanması ve 17.9x eğitim hızlanması sağlarken daha iyi bir FID değeri elde ediyoruz. Kodumuz bu https URL adresinde mevcuttur.

Aşağıdaki DCAE modelleri Diffusers'ta yayınlanmış ve desteklenmektedir.

Diffusers biçimiOrijinal biçim
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

Bu model lawrence-cj tarafından katkıda bulunmuştur.

Modeli Diffusers biçiminde from_pretrained() ile yükleyin.

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"

Diffusers'ta from_single_file ile bir model yükleyin

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) 

AutoencoderDC modelinin, eşleşen checkpoint anahtarlarına sahip ancak farklı ölçekleme faktörleri kullanan in ve mix tek dosya checkpoint varyantları vardır. Diffusers'ın yalnızca checkpoint'e dayanarak modelle kullanılacak doğru config dosyasını otomatik olarak çıkarabilmesi mümkün değildir ve model, varsayılan olarak mix varyantı config dosyası kullanılarak yapılandırılır. Otomatik olarak belirlenen config'i geçersiz kılmak için, in varyantı checkpoint'leriyle tek dosya yükleme kullanırken config argümanını kullanın.

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

sınıf 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 )

Parametreler

  • in_channels (int, varsayılan 3) — Örneklerdeki giriş kanal sayısı.
  • latent_channels (int, varsayılan 32) — Gizli uzay temsilindeki kanal sayısı.
  • encoder_block_types (str | tuple[str], varsayılan "ResBlock") — Kodlayıcıda kullanılacak blok tür(ü/leri).
  • decoder_block_types (str | tuple[str], varsayılan "ResBlock") — Çözücüde kullanılacak blok tür(ü/leri).
  • encoder_block_out_channels (tuple[int, ...], varsayılan (128, 256, 512, 512, 1024, 1024)) — Kodlayıcıdaki her blok için çıktı kanal sayısı.
  • decoder_block_out_channels (tuple[int, ...], varsayılan (128, 256, 512, 512, 1024, 1024)) — Çözücüdeki her blok için çıktı kanal sayısı.
  • encoder_layers_per_block (tuple[int], varsayılan (2, 2, 2, 3, 3, 3)) — Kodlayıcıdaki blok başına katman sayısı.
  • decoder_layers_per_block (tuple[int], varsayılan (3, 3, 3, 3, 3, 3)) — Çözücüdeki blok başına katman sayısı.
  • encoder_qkv_multiscales (tuple[tuple[int, ...], ...], varsayılan ((), (), (), (5,), (5,), (5,))) — Encoder'ın QKV (query-key-value) dönüşümleri için çok ölçekli yapılandırmalar.
  • decoder_qkv_multiscales (tuple[tuple[int, ...], ...], varsayılan ((), (), (), (5,), (5,), (5,))) — Çözücünün QKV (query-key-value) dönüşümleri için çok ölçekli yapılandırmalar.
  • upsample_block_type (str, varsayılan "pixel_shuffle") — Çözücüde yukarı örnekleme için kullanılacak blok türü.
  • downsample_block_type (str, varsayılan "pixel_unshuffle") — Kodlayıcıda indirgeme için kullanılacak blok türü.
  • decoder_norm_types (str | tuple[str], varsayılan "rms_norm") — Dekoderde kullanılacak normalizasyon tür(ü/leri).
  • decoder_act_fns (str | tuple[str], varsayılan "silu") — Dekoderya kullanılacak aktivasyon fonksiyonu(ları).
  • encoder_out_shortcut (bool, varsayılan True) — Encoder'ın sonunda kısayol kullanılıp kullanılmayacağı.
  • decoder_in_shortcut (bool, varsayılan True) — Dekoderin başlangıcında kısayolun kullanılıp kullanılmayacağı.
  • decoder_conv_act_fn (str, varsayılan "relu") — Çözücünün sonunda kullanılacak aktivasyon fonksiyonu.
  • scaling_factor (float, varsayılan 1.0) — Gizli özelliklerin karekök ortalama karesinin çarpımsal tersidir. Bu, difüzyon modelinin eğitimi sırasında gizli uzayın birim varyansa ölçeklenmesi için kullanılır. Gizli değişkenler, difüzyon modeline geçirilmeden önce z = z * scaling_factor formülüyle ölçeklenir. Kod çözme sırasında gizli değişkenler, orijinal ölçeğe şu formülle geri ölçeklenir: z = 1 / scaling_factor * z.

DCAE'de tanıtılan ve SANA'da kullanılan bir Autoencoder modeli.

Bu model ModelMixin sınıfından devralır. Tüm modeller için uygulanan genel yöntemleri (indirme veya kaydetme gibi) görmek için üst sınıfın belgelendirmesine bakın.

encode

< >

( x: Tensorreturn_dict: bool = True )

Parametreler

  • x (torch.Tensor) — Görsellerin giriş partisi.
  • return_dict (bool, varsayılan True) — Düz bir tuple yerine ~models.vae.EncoderOutput döndürülüp döndürülmemesi.

Bir görüntü grubunu latentlere kodlayın.

decode

< >

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

Parametreler

  • z (torch.Tensor) — Girdi partisi latent vektörleri.
  • return_dict (bool, varsayılan True) — Düz bir tuple yerine ~models.vae.DecoderOutput döndürülüp döndürülmemesi.

Dönüş değeri

~models.vae.DecoderOutput veya tuple

return_dict True ise, ~models.vae.DecoderOutput döndürülür, aksi takdirde düz bir tuple döndürülür.

Bir görüntü grubunu çözümlen.

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 )

Parametreler

  • tile_sample_min_height (int, isteğe bağlı) — Bir örneğin yükseklik boyutu boyunca karolalara ayrılabilmesi için gereken minimum yükseklik.
  • tile_sample_min_width (int, isteğe bağlı) — Bir örneğin genişlik boyutu boyunca karolalara ayrılabilmesi için gereken minimum genişlik.
  • tile_sample_stride_height (int, isteğe bağlı) — İki ardışık dikey karo arasındaki minimum örtüşme miktarı. Bu, yükseklik boyutu boyunca karo artefaktlarının oluşmamasını sağlamak içindir.
  • tile_sample_stride_width (int, isteğe bağlı) — İki ardışık yatay karoyu arasındaki adım. Bu, genişlik boyutu boyunca karo artefaktlarının oluşmamasını sağlamak içindir.

Döşemeli AE çözümlenmesini etkinleştirir. Bu seçenek etkinleştirildiğinde, AE girdi tensörünü döşemelere böler ve çözümlenme ile kodlamayı birden fazla adımda hesaplar. Bu, büyük miktarda bellek tasarrufu sağlamak ve daha büyük görüntülerin işlenmesine olanak tanımak için kullanışlıdır.

forward

< >

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

Parametreler

  • sample (torch.Tensor) — Girdi örneği.
  • return_dict (bool, isteğe bağlı, varsayılan True) — Düz bir tuple yerine DecoderOutput döndürülüp döndürülmemesi.

Dönüş değeri

~models.vae.DecoderOutput veya tuple

return_dict True ise, ~models.vae.DecoderOutput döndürülür, aksi takdirde düz bir tuple döndürülür.

DecoderOutput

sınıf diffusers.models.autoencoders.vae.DecoderOutput

< >

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

Parametreler

  • sample (torch.Tensor, şekli (batch_size, num_channels, height, width)) — Modelin son katmanından gelen çözümlenmiş çıktı örneği.

Çözümleme yönteminin çıktısı.

Update on GitHub