Diffusers documentation
SanaWMTransformer3DModel
SanaWMTransformer3DModel
Diffusion Transformer 3D (1,6 miliar parameter) untuk generasi gambar-ke-video dengan kontrol kamera, digunakan sebagai sampler tahap-1 dari SanaWMPipeline. Transformer ini menggabungkan:
- cabang utama perhatian linear GDN-Triton bidireksional (kedalaman 20, tersembunyi 2240, 20 kepala),
- cabang kontrol kamera UCPE (Unified Camera Pose Embedding) yang mengonsumsi representasi raymap + Plücker dari trayektori yang diminta, dan
- embedding posisi rotasi 3D bergaya Wan ditambah blok softmax-attention periodik yang disuntikkan setiap
softmax_every_nlapisan.
Model dapat dimuat dengan:
import torch
from diffusers import SanaWMTransformer3DModel
transformer = SanaWMTransformer3DModel.from_pretrained(
"Efficient-Large-Model/SANA-WM_bidirectional-diffusers",
subfolder="transformer",
torch_dtype=torch.bfloat16,
)SanaWMTransformer3DModel
kelas diffusers.SanaWMTransformer3DModel
< source >( in_channels: int = 128num_layers: int = 20hidden_size: int = 2240num_attention_heads: int = 20patch_size: tuple[int, int, int] = (1, 1, 1)softmax_every_n: int = 4linear_head_dim: int = 112ffn_type: str = 'GLUMBConvTemp't_kernel_size: int = 3conv_kernel_size: int = 4k_conv_only: bool = Truepos_embed_type: str = 'wan_rope'qk_norm: bool = Truecross_norm: bool = Truey_norm: bool = Truecam_attn_compress: int = 1init_cam_from_base: bool = Trueuse_chunk_plucker_post_attn: bool = Truechunk_plucker_channels: int = 48chunk_plucker_post_attn_blocks: int = 20fp32_attention: bool = Trueimage_size: int = 720caption_channels: int = 2304mlp_ratio: float = 3.0mlp_acts: tuple = ('silu', 'silu', None)use_pe: bool = Truelearn_sigma: bool = Falsepred_sigma: bool = Falsemixed_precision: str = 'bf16' )
Parameter
- in_channels (int, default 128) — Kanal laten VAE (LTX-2).
- softmax_every_n (int, defaultnya 4) — Gunakan blok perhatian softmax setiap N blok.
- linear_head_dim (int, default 112) — Dimensi head GDN.
- ffn_type (str, defaultnya
"GLUMBConvTemp") — FFN. - t_kernel_size (int, defaultnya 3) — Kernel konvolusi temporal.
- conv_kernel_size (int, default 4) — Kernel konvolusi spasial di dalam attention.
- k_conv_only (bool, defaultnya True) — Terapkan conv hanya pada K.
- pos_embed_type (str, defaultnya
"wan_rope") — Position embedding. - qk_norm (bool, defaultnya True) — RMSNorm pada Q/K.
- cross_norm (bool, defaultnya True) — RMSNorm pada K cross-attention.
- y_norm (bool, defaultnya True) — Terapkan
attention_y_normke embedding teks. - init_cam_from_base (bool, default True) — Tidak digunakan; cabang kamera dimuat dari checkpoint. Dipertahankan agar file config.json yang dirilis dapat dimuat.
- use_chunk_plucker_post_attn (bool, defaultnya True). —
- chunk_plucker_channels (int, default 48) —
6 dims * temporal_stride 8. - chunk_plucker_post_attn_blocks (int, defaultnya 20) — Semua blok.
- fp32_attention (bool, defaultnya True) — Tidak digunakan; attention selalu berjalan dalam fp32. Dipertahankan agar file config.json yang dirilis dapat dimuat.
- image_size (int, defaultnya 720) — Ukuran nominal gambar.
- caption_channels (int, defaultnya 2304) — ukuran tersembunyi Gemma-2.
SANA-WM 1600M DiT bidireksional yang dikendalikan kamera.
DiT satu kelas (depth=20, hidden_size=2240, patch_size=(1,1,1), num_heads=20 — yaitu rilis publik Efficient-Large-Model/SANA-WM_bidirectional). save_pretrained / from_pretrained berfungsi langsung melalui ConfigMixin.
Setiap blok menjalankan perhatian yang dikondisikan kamera (UCPE): [BidirectionalGDNUCPESinglePathLiteLA], kecuali setiap blok ke-softmax_every_n yang menjalankan padanan softmax-nya [_SoftmaxUCPESinglePathLiteLA].
State-dict identik dengan checkpoint sana publik, kecuali buffer pos_embed yang sengaja dihapus.
forward
< source >( hidden_states: torch.Tensortimestep: torch.Tensorencoder_hidden_states: torch.Tensorencoder_attention_mask: torch.Tensor | None = Nonemask: torch.Tensor | None = Nonereturn_dict: bool = Truedata_info: Optional[dict] = Nonecamera_conditions: torch.Tensor | None = Nonechunk_plucker: torch.Tensor | None = Nonecam_pos_embeds: Optional[dict] = Nonepos_embeds: torch.Tensor | None = Noneraymats: torch.Tensor | None = Noneframe_valid_mask: torch.Tensor | None = Nonechunk_size: int | None = None )
Parameter
- hidden_states — latents
(B, C, T, H, W). - timestep —
(B, 1, T)timestep difusi per-frame (gaya LTX). - encoder_hidden_states — embedding teks
(B, 1, L, D_caption). - encoder_attention_mask —
(B, L)mask perhatian teks (konvensi diffusers). - mask — Alias untuk
encoder_attention_maskyang sesuai dengan nama kwarg DiT sana. Jika keduanya diteruskan,maskyang diprioritaskan. - return_dict — Jika
True(default), mengembalikanTransformer2DModelOutput; jika tidak, mengembalikan satu tuple(sample,). - data_info — Kondisioning tambahan;
data_info["image_vae_embeds"]digabungkan ke latents sepanjang sumbu channel jika ada. - camera_conditions —
(B, T, 20)kondisi kamera mentah yang menggerakkan cabang kontrol kamera (UCPE). - chunk_plucker — Plucker ray embeddings
(B, C, T, H, W), digunakan ketika model dikonfigurasi denganuse_chunk_plucker_input/use_chunk_plucker_post_attn. - cam_pos_embeds — Embedding posisi kamera yang sudah dihitung sebelumnya (entri
"absmap"/"P") yang digunakan kembali alih-alih dihitung ulang. - pos_embeds — Embedding posisi rotasi yang sudah dihitung sebelumnya (opsional); jika
None, embedding ini dibangun dari bentuk laten. - raymats — Matriks ray UCPE yang sudah dihitung sebelumnya (hanya digunakan ketika
cam_pos_embedstidak membawa"P"). - frame_valid_mask — Mask validitas per frame opsional, berbentuk
(B, 1, T, 1, 1),(B, 1, T)atau(B, T). - chunk_size — Penggantian panjang chunk yang diteruskan ke blok; kembali ke
chunk_sizeyang dikonfigurasi untuk masing-masing blok.
Jalankan SANA-WM DiT.
x: (N, T, patch_size*2 C) imgs: (N, H, W, C)
Transformer2DModelOutput
kelas diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parameter
- sample (
torch.Tensordengan bentuk(batch_size, num_channels, height, width)atau(batch size, num_vector_embeds - 1, num_latent_pixels)jika Transformer2DModel bersifat diskrit) — Output hidden states yang dikondisikan pada inputencoder_hidden_states. Jika diskrit, mengembalikan distribusi probabilitas untuk latent pixels yang tidak berisik.
Output dari Transformer2DModel.