Diffusers documentation

SanaWMTransformer3DModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SanaWMTransformer3DModel

一个 3D 扩散 Transformer(16 亿参数),用于相机控制下的图像到视频生成,作为 SanaWMPipeline 的第一阶段采样器。该 Transformer 结合了:

  • 一个双向 GDN-Triton 线性注意力主干分支(深度 20,隐藏维度 2240,20 个注意力头),
  • 一个 UCPE(Unified Camera Pose Embedding,统一相机位姿嵌入)相机控制分支,它接收所请求轨迹的 raymap + Plücker 表示,并且
  • 一种 Wan 风格的 3D 旋转位置嵌入,外加每隔 softmax_every_n 层注入一次的周期性 softmax 注意力块。

该模型可通过以下方式加载:

import torch
from diffusers import SanaWMTransformer3DModel

transformer = SanaWMTransformer3DModel.from_pretrained(
    "Efficient-Large-Model/SANA-WM_bidirectional-diffusers",
    subfolder="transformer",
    torch_dtype=torch.bfloat16,
)

SanaWMTransformer3DModel

class diffusers.SanaWMTransformer3DModel

< >

( 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' )

参数

  • in_channels (int,默认为 128) — VAE 潜在通道数(LTX-2)。
  • softmax_every_n (int,默认为 4) — 每 N 个块使用一个 softmax 注意力块。
  • linear_head_dim (int,默认为 112) — GDN 头维度。
  • ffn_type(str,默认为 "GLUMBConvTemp")— FFN。
  • t_kernel_size (int,默认为 3) — 时间卷积核。
  • conv_kernel_size (int,默认为 4) — 注意力机制中的空间卷积核大小。
  • k_conv_only (bool,默认为 True) — 仅对 K 应用卷积。
  • pos_embed_type (str,默认为 "wan_rope") — 位置嵌入。
  • qk_norm (bool,默认为 True) — 对 Q/K 应用 RMSNorm。
  • cross_norm (bool,默认为 True) — 对交叉注意力中的 K 应用 RMSNorm。
  • y_norm(bool,默认为 True)— 对文本嵌入应用 attention_y_norm。
  • init_cam_from_base (bool,默认为 True) — 未使用;相机分支从检查点加载。 保留此参数以便已发布的 config.json 文件能够正常加载。
  • use_chunk_plucker_post_attn (bool,默认为 True)。 —
  • chunk_plucker_channels(int,默认值为 48)— 6 dims * temporal_stride 8。
  • chunk_plucker_post_attn_blocks (int,默认为 20) — 所有块。
  • fp32_attention (bool,默认为 True) — 未使用;注意力始终在 fp32 下运行。保留此参数以便加载已发布的 config.json 文件。
  • image_size (int,默认为 720) — 标称图像尺寸。
  • caption_channels(int,默认为 2304)— Gemma-2 的隐藏层大小。

SANA-WM 1600M 双向相机控制 DiT。

单类 DiT(depth=20,hidden_size=2240,patch_size=(1,1,1),num_heads=20,即公开的 Efficient-Large-Model/SANA-WM_bidirectional 发布版本)。save_pretrained / from_pretrained 通过 ConfigMixin 开箱即用。

每个块都会执行一个相机条件(UCPE)注意力机制:[BidirectionalGDNUCPESinglePathLiteLA],但每隔 softmax_every_n 个块会执行其对应的 softmax 版本 [_SoftmaxUCPESinglePathLiteLA]。

state-dict 与公开的 sana 检查点完全相同,只是有意移除了 pos_embed 缓冲区。

forward

< >

( 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 )

参数

  • hidden_states — (B, C, T, H, W) 潜在表示。
  • timestep — (B, 1, T) 逐帧扩散时间步(LTX 风格)。
  • encoder_hidden_states — (B, 1, L, D_caption) 文本嵌入。
  • encoder_attention_mask — (B, L) 文本注意力掩码(diffusers 约定)。
  • mask — encoder_attention_mask 的别名,用于匹配 sana DiT 的关键字参数名称。如果同时传入两者,mask 优先。
  • return_dict — 如果为 True(默认值),则返回 Transformer2DModelOutput; 否则返回一个单元素元组 (sample,)。
  • data_info — 额外的条件信息;当 data_info["image_vae_embeds"] 存在时,会沿通道轴与潜变量进行拼接。
  • camera_conditions — (B, T, 20) 用于驱动相机控制(UCPE)分支的原始相机条件。
  • chunk_plucker — Plucker 光线嵌入 (B, C, T, H, W),当模型配置了 use_chunk_plucker_input / use_chunk_plucker_post_attn 时会被使用。
  • cam_pos_embeds — 可选的预计算相机位置嵌入("absmap" / "P" 条目),用于复用而非重新计算。
  • pos_embeds — 可选的预计算旋转位置嵌入;当为 None 时,将根据潜在张量的形状进行构建。
  • raymats — 可选的预计算 UCPE 光线矩阵(仅在 cam_pos_embeds 不包含 "P" 时使用)。
  • frame_valid_mask — 可选的逐帧有效性掩码,形状为 (B, 1, T, 1, 1)、(B, 1, T) 或 (B, T)。
  • chunk_size — 转发给各 block 的分块长度覆盖值;若未设置,则回退到每个 block 配置的 chunk_size。

运行 SANA-WM DiT。

unpatchify

< >

( xpost_patch_num_framespost_patch_heightpost_patch_width )

x: (N, T, patch_size*2 C) imgs: (N, H, W, C)

Transformer2DModelOutput

类 diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

参数

  • sample(形状为 (batch_size, num_channels, height, width) 的 torch.Tensor,或者如果 Transformer2DModel 是离散的,则为 (batch size, num_vector_embeds - 1, num_latent_pixels))— 以 encoder_hidden_states 输入为条件的隐藏状态输出。如果是离散的,则返回未加噪潜在像素的概率分布。

Transformer2DModel 的输出。

Update on GitHub