Buckets:
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) Ayrıştırılmış 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, ayrıştırılmış üç 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.
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'da bir modeli from_single_file ile 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[[diffusers.AutoencoderDC]]
diffusers.AutoencoderDC[[diffusers.AutoencoderDC]]
diffusers.AutoencoderDC(in_channels: int = 3, latent_channels: int = 32, attention_head_dim: int = 32, encoder_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 = True, decoder_in_shortcut: bool = True, decoder_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") : Dekoderde 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,))) : Kodlayıcını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,))) : Dekoderin QKV (query-key-value) dönüşümleri için çok ölçekli yapılandırmalar.
upsample_block_type (str, varsayılan "pixel_shuffle") : Dekoderde yukarı örneklemeye (upsampling) 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") : Dekoderde 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") : Dekoderin 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 sahip olacak şekilde ölçeklenmesi için kullanılır. Gizli değişkenler, difüzyon modeline aktarılmadan ö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öntemlerini (indirme veya kaydetme gibi) görmek için üst sınıfın belgelendirmesine bakın.
encode[[diffusers.AutoencoderDC.encode]]
encode(x: Tensor, return_dict: bool = True)
Parametreler:
x (torch.Tensor) : Giriş görüntü partisi.
return_dict (bool, varsayılan True) : Düz bir tuple yerine ~models.vae.EncoderOutput döndürülüp döndürülmemesi.
Dönüş:
Kodlanmış videoların gizil (latent) temsilleri. return_dict True ise bir ~models.vae.EncoderOutput döndürülür, aksi halde düz bir tuple döndürülür.
Bir görüntü grubunu latentlere kodlayın.
decode[[diffusers.AutoencoderDC.decode]]
decode(z: Tensor, return_dict: bool = True)
Parametreler:
z (torch.Tensor) : Gizil vektörlerin giriş partisi.
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üş: ~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[[diffusers.AutoencoderDC.enable_tiling]]
enable_tiling(tile_sample_min_height: int | None = None, tile_sample_min_width: int | None = None, tile_sample_stride_height: float | None = None, tile_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 karoyu 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[[diffusers.AutoencoderDC.forward]]
forward(sample: Tensor, return_dict: bool = True)
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üş: ~models.vae.DecoderOutput veya tuple
return_dict True ise, ~models.vae.DecoderOutput döndürülür; aksi halde düz bir tuple döndürülür.
DecoderOutput[[diffusers.models.autoencoders.vae.DecoderOutput]]
diffusers.models.autoencoders.vae.DecoderOutput[[diffusers.models.autoencoders.vae.DecoderOutput]]
diffusers.models.autoencoders.vae.DecoderOutput(sample: Tensor, commit_loss: typing.Optional[torch.FloatTensor] = None)
Parametreler:
sample (torch.Tensor, şekli (batch_size, num_channels, height, width)) : Modelin son katmanından çözümlenmiş çıktı örneği.
Çözümleme yönteminin çıktısı.
Xet Storage Details
- Size:
- 13.3 kB
- Xet hash:
- 4f66709e766ee1024d6b740844c3e4d292d6ad6ebae9977f09b44c5e69b717ab
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.