Diffusers documentation
SanaWMTransformer3DModel
SanaWMTransformer3DModel
카메라 제어 이미지-비디오 생성을 위한 3D Diffusion Transformer(1.6B 파라미터)로, SanaWMPipeline의 1단계 샘플러로 사용됩니다. 이 Transformer는 다음을 결합합니다:
- 양방향 GDN-Triton 선형 어텐션 메인 브랜치(깊이 20, 숨김 2240, 헤드 20),
- 요청된 궤도의 raymap + Plücker 표현을 소비하는 UCPE(Unified Camera Pose Embedding) 카메라 제어 브랜치,
softmax_every_n레이어마다 주입되는 Wan 스타일의 3D 회전 위치 임베딩과 주기적 softmax-attention 블록
모델은 다음으로 로드할 수 있습니다:
import torch
from diffusers import SanaWMTransformer3DModel
transformer = SanaWMTransformer3DModel.from_pretrained(
"Efficient-Large-Model/SANA-WM_bidirectional-diffusers",
subfolder="transformer",
torch_dtype=torch.bfloat16,
)SanaWMTransformer3DModel
클래스 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' )
매개변수
- in_channels (int, 기본값 128) — VAE latent channels (LTX-2).
- softmax_every_n (int, 기본값 4) — N개 블록마다 softmax attention 블록을 사용합니다.
- linear_head_dim (int, 기본값 112) — GDN 헤드 차원.
- ffn_type (str, 기본값
"GLUMBConvTemp") — FFN. - t_kernel_size (int, 기본값 3) — 시간 차원 컨볼루션 커널.
- conv_kernel_size (int, 기본값 4) — attention 내부의 공간적 conv 커널
- k_conv_only (bool, 기본값 True) — K에만 conv를 적용합니다.
- pos_embed_type (str, 기본값
"wan_rope") — 위치 임베딩. - qk_norm (bool, 기본값 True) — Q/K에 적용되는 RMSNorm.
- cross_norm (bool, 기본값 True) — cross-attention 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) — 미사용; attention은 항상 fp32로 실행됩니다. 공개된 config.json 파일이 로드되도록 유지됩니다.
- image_size (int, 기본값 720) — 명목상 이미지 크기.
- caption_channels (int, 기본값 2304) — Gemma-2 hidden size.
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는 의도적으로 제거된 pos_embed 버퍼를 제외하고 공개된 sana 체크포인트와 동일합니다.
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 )
매개변수
- hidden_states —
(B, C, T, H, W)형태의 latents. - timestep —
(B, 1, T)프레임별 diffusion timesteps (LTX 스타일). - encoder_hidden_states —
(B, 1, L, D_caption)텍스트 임베딩. - encoder_attention_mask —
(B, L)텍스트 어텐션 마스크 (diffusers 규약). - mask — sana DiT의 kwarg 이름과 일치하는
encoder_attention_mask의 별칭입니다. 둘 다 전달되면mask가 우선합니다. - return_dict —
True(기본값)인 경우Transformer2DModelOutput를 반환하고, 그렇지 않으면 1-튜플(sample,)을 반환합니다. - data_info — 추가 조건;
data_info["image_vae_embeds"]은 존재할 경우 채널 축을 따라 latents에 연결됩니다. - camera_conditions — 카메라 제어(UCPE) 브랜치를 구동하는
(B, T, 20)크기의 원시 카메라 조건 - chunk_plucker — Plucker ray 임베딩
(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 — 블록으로 전달되는 청크 길이 오버라이드입니다. 각 블록에 설정된
chunk_size로 대체됩니다.
SANA-WM DiT를 실행합니다.
x: (N, T, patch_size*2 C) imgs: (N, H, W, C)
Transformer2DModelOutput
클래스 diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
매개변수
- sample (
torch.Tensor, shape(batch_size, num_channels, height, width)또는 Transformer2DModel이 discrete인 경우(batch size, num_vector_embeds - 1, num_latent_pixels)) —encoder_hidden_states입력에 조건부인 hidden states 출력입니다. discrete인 경우, 노이즈가 제거된 latent 픽셀에 대한 확률 분포를 반환합니다.
Transformer2DModel의 출력입니다.