Diffusers documentation
SanaTransformer2DModel
SanaTransformer2DModel
SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers makalesinden 2D veriler için bir Diffusion Transformer modeli, NVIDIA ve MIT HAN Lab tarafından Enze Xie, Junsong Chen, Junyu Chen, Han Cai, Haotian Tang, Yujun Lin, Zhekai Zhang, Muyang Li, Ligeng Zhu, Yao Lu, Song Han tarafından tanıtıldı.
Makalenin özeti şudur:
Sana'yı tanıtıyoruz; 4096×4096 çözünürlüğe kadar görüntüleri verimli bir şekilde üretebilen bir metinden görüntüye çerçevesi. Sana, son derece yüksek hızda, güçlü metin-görüntü hizalamasına sahip yüksek çözünürlüklü ve yüksek kaliteli görüntüler sentezleyebilir ve dizüstü bilgisayar GPU'larında dağıtılabilir. Temel tasarımlar şunları içerir: (1) Derin sıkıştırma otoenkoder: görüntüleri yalnızca 8× sıkıştıran geleneksel AE'lerin aksine, görüntüleri 32× sıkıştırabilen bir AE eğittik; bu, latent token sayısını etkili bir şekilde azaltır. (2) Doğrusal DiT: DiT'deki tüm standart dikkat mekanizmalarını, kaliteden ödün vermeden yüksek çözünürlüklerde daha verimli olan doğrusal dikkatle değiştirdik. (3) Sadece çözücü metin kodlayıcı: T5'i, metin kodlayıcı olarak modern, yalnızca çözücü tabanlı küçük bir LLM ile değiştirdik ve görüntü-metin hizalamasını güçlendirmek için bağlam içi öğrenme ile karmaşık insan talimatları tasarladık. (4) Verimli eğitim ve örneklem: örneklem adımlarını azaltmak için Flow-DPM-Solver öneriyoruz; yakınsamayı hızlandırmak için verimli başlık etiketleme ve seçimi kullanıyoruz. Sonuç olarak, Sana-0.6B, modern dev difüzyon modelleriyle (ör. Flux-12B) çok rekabetçidir; 20 kat daha küçük olup ölçülen verimlilikte 100+ kat daha hızlıdır. Ayrıca, Sana-0.6B, 16GB'lık bir dizüstü bilgisayar GPU'suna dağıtılabilir ve 1024×1024 çözünürlüğünde bir görüntü üretmek için 1 saniyeden az zaman alır. Sana, düşük maliyetle içerik oluşturmaya olanak tanır. Kod ve model kamuya açık olarak yayınlanacaktır.
Model, aşağıdaki kod parçasıyla yüklenebilir.
from diffusers import SanaTransformer2DModel
transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)SanaTransformer2DModel
sınıf diffusers.SanaTransformer2DModel
< source >( in_channels: int = 32out_channels: int | None = 32num_attention_heads: int = 70attention_head_dim: int = 32num_layers: int = 20num_cross_attention_heads: int | None = 20cross_attention_head_dim: int | None = 112cross_attention_dim: int | None = 2240caption_channels: int = 2304mlp_ratio: float = 2.5dropout: float = 0.0attention_bias: bool = Falsesample_size: int = 32patch_size: int = 1norm_elementwise_affine: bool = Falsenorm_eps: float = 1e-06interpolation_scale: int | None = Noneguidance_embeds: bool = Falseguidance_embeds_scale: float = 0.1qk_norm: str | None = Nonetimestep_scale: float = 1.0 )
Parametreler
- in_channels (
int, varsayılan32) — Girdideki kanal sayısı. - out_channels (
int, isteğe bağlı, varsayılan32) — Çıktıdaki kanal sayısı. - num_attention_heads (
int, varsayılan70) — Çok başlı dikkat (multi-head attention) için kullanılacak baş sayısı. - attention_head_dim (
int, varsayılan32) — Her baştaki kanal sayısı. - num_layers (
int, varsayılan20) — Kullanılacak Transformer bloklarının katman sayısı. - num_cross_attention_heads (
int, isteğe bağlı, varsayılan20) — Cross-attention için kullanılacak baş sayısı. - cross_attention_head_dim (
int, isteğe bağlı, varsayılan112) — Çapraz dikkat (cross-attention) için her başlıkta (head) bulunan kanal sayısı. - cross_attention_dim (
int, isteğe bağlı, varsayılan2240) — Çapraz dikkat (cross-attention) çıktısındaki kanal sayısı. - caption_channels (
int, varsayılan2304) — Başlık gömme vektörlerindeki kanal sayısı. - mlp_ratio (
float, varsayılan2.5) — GLUMBConv katmanında kullanılacak genişletme oranı. - dropout (
float, varsayılan0.0) — Dropout olasılığı. - attention_bias (
bool, varsayılanFalse) — Dikkat katmanında sapma (bias) kullanılıp kullanılmayacağı. - sample_size (
int, varsayılan32) — Girdi gizlisinin (latent) temel boyutu. - patch_size (
int, varsayılan1) — Patch gömme katmanında kullanılacak yamaların boyutu. - norm_elementwise_affine (
bool, varsayılanFalse) — Normalizasyon katmanında öge bazlı afinite kullanılıp kullanılmayacağı. - norm_eps (
float, varsayılan1e-6) — Normalizasyon katmanı için epsilon değeri. - qk_norm (
str, isteğe bağlı, varsayılanNone) — Sorgu ve anahtar için kullanılacak normalizasyon. - timestep_scale (
float, varsayılan1.0) — Zaman adımları için kullanılacak ölçek.
Sana model ailesinde tanıtılan 2B Transformer modeli.
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorguidance: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_block_samples: tuple[torch.Tensor] | None = Nonereturn_dict: bool = True )
Parametreler
- hidden_states (
torch.Tensor, şekli(batch_size, in_channels, height, width)) — Girdihidden_states. - encoder_hidden_states (
torch.Tensor, şekli(batch_size, sequence_len, embed_dims)) — Kullanılacak koşullu gömme değerleri (prompt gibi girdi koşullarından hesaplanan gömme değerleri). - timestep (
torch.LongTensor) — Gürültü azaltma adımını belirtmek için kullanılır. - guidance (
torch.Tensor, isteğe bağlı) — Yönlendirme ölçeği gömme. - encoder_attention_mask (
torch.Tensor, isteğe bağlı) —encoder_hidden_statesuygulanan çapraz dikkat maskesi. - attention_mask (
torch.Tensor, isteğe bağlı) —hidden_statesuygulanan öz-dikkat maskesi. - attention_kwargs (
dict, isteğe bağlı) — Belirtilirse, diffusers.models.attention_processor içindekiself.processoraltında tanımlananAttentionProcessor'a iletilen bir kwargs sözlüğü. - controlnet_block_samples (
tupleoftorch.Tensor, isteğe bağlı) — Belirtilirse, transformer bloklarının artıklarına eklenen tensörlerin listesi. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine~models.transformer_2d.Transformer2DModelOutputdöndürülüp döndürülmemesi.
SanaTransformer2DModel ileri yöntemi.
Transformer2DModelOutput
sınıf diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parametreler
- sample (
torch.Tensor, şekli(batch_size, num_channels, height, width)veya Transformer2DModel ayrık (discrete) ise(batch size, num_vector_embeds - 1, num_latent_pixels)) —encoder_hidden_statesgirdisine koşullu gizli durum (hidden states) çıktısı. Ayrık (discrete) ise, gürültüsü kaldırılmış (unnoised) gizli (latent) pikseller için olasılık dağıtımlarını döndürür.
Transformer2DModel'nin çıktısı.