Diffusers documentation
AutoencoderDC
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.
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
< source >( 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ılan3) — Örneklerdeki giriş kanal sayısı. - latent_channels (
int, varsayılan32) — 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ılanTrue) — Encoder'ın sonunda kısayol kullanılıp kullanılmayacağı. - decoder_in_shortcut (
bool, varsayılanTrue) — 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ılan1.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 öncez = z * scaling_factorformü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
< source >( x: Tensorreturn_dict: bool = True )
Bir görüntü grubunu latentlere kodlayın.
decode
< source >( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
Parametreler
- z (
torch.Tensor) — Girdi partisi latent vektörleri. - return_dict (
bool, varsayılanTrue) — Düz bir tuple yerine~models.vae.DecoderOutputdö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
< source >( 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
< source >( 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ılanTrue) — Düz bir tuple yerineDecoderOutputdö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
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Çözümleme yönteminin çıktısı.