# AnyFlowTransformer3DModel

[`AnyFlowPipeline`](../pipelines/anyflow#diffusers.AnyFlowPipeline) 所使用的双向 3D Transformer。它是 v0.35.1 Wan2.1 骨干网络，但有一处结构上的改动：时间步嵌入器被替换为 ``AnyFlowDualTimestepTextImageEmbedding``，因此每次前向调用都会同时以源时间步 ``t`` 和目标时间步 ``r`` 作为条件。这是学习 [AnyFlow](https://huggingface.co/papers/2605.13724) 中引入的流映射 $\Phi_{r\leftarrow t}$ 所需的嵌入。有关论文、作者及已发布的检查点，请参阅 [`AnyFlowPipeline`](../pipelines/anyflow) 页面。

对于分块自回归（FAR 因果）生成，请改用 [`AnyFlowFARTransformer3DModel`](anyflow_far_transformer3d)。

```python
from diffusers import AnyFlowTransformer3DModel

# Bidirectional AnyFlow checkpoint (T2V):
transformer = AnyFlowTransformer3DModel.from_pretrained(
    "nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers", subfolder="transformer"
)
```

## AnyFlowTransformer3DModel[[diffusers.AnyFlowTransformer3DModel]]

#### diffusers.AnyFlowTransformer3DModel[[diffusers.AnyFlowTransformer3DModel]]

```python
diffusers.AnyFlowTransformer3DModel(patch_size: typing.Tuple[int] = (1, 2, 2), num_attention_heads: int = 40, attention_head_dim: int = 128, in_channels: int = 16, out_channels: int = 16, text_dim: int = 4096, freq_dim: int = 256, ffn_dim: int = 13824, num_layers: int = 40, cross_attn_norm: bool = True, eps: float = 1e-06, image_dim: typing.Optional[int] = None, rope_max_seq_len: int = 1024, gate_value: float = 0.25, deltatime_type: str = 'r')
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_anyflow.py#L507)

**参数：**

patch_size (*Tuple[int]*，默认为 *(1, 2, 2)*)：用于视频嵌入的 3D patch 维度 (t_patch, h_patch, w_patch)。

num_attention_heads (*int*，默认为 *40*)：注意力头的数量。

attention_head_dim (*int*，默认为 *128*)：每个头中的通道数。

in_channels (*int*，默认为 *16*)：输入潜变量中的通道数。

out_channels (*int*，默认为 *16*)：输出潜在表示的通道数。

text_dim (*int*，默认为 *4096*)：文本嵌入（UMT5）的输入维度。

freq_dim (*int*，默认为 *256*)：正弦时间嵌入的维度。

ffn_dim (*int*，默认为 *13824*)：前馈网络中的中间维度。

num_layers (*int*，默认为 *40*)：Transformer 块的数量。

cross_attn_norm (*bool*，默认为 *True*)：启用交叉注意力归一化。

eps (*float*，默认为 *1e-6*)：归一化层的 epsilon 值。

image_dim (*Optional[int]*, *可选*，默认为 *None*)：用于 I2V 条件化的图像嵌入维度（原始 Wan2.1-I2V 模型为 *1280*）。

rope_max_seq_len (*int*，默认为 *1024*)：用于预计算旋转位置频率的最大序列长度。

gate_value (*float*，默认为 *0.25*)：源时间步嵌入与增量时间步嵌入之间的混合门控（AnyFlow 论文中的 \\(g\\) 参数，在阶段 1 蒸馏中固定为 0.25）。

deltatime_type (*str*，默认为 *'r'*)：取值为 `"r"`（delta 为目标时间步）或 `"t-r"`（delta 为绝对间隔）。

用于 AnyFlow 流图采样的双向 3D Transformer。

该架构基于 v0.35.1 Wan2.1 3D DiT 主干网络，并做了一处结构性修改：将时间步嵌入器替换为 `AnyFlowDualTimestepTextImageEmbedding`，使得每次前向调用都同时以源时间步 `t` 和目标时间步 `r` 作为条件。这正是 [AnyFlow](https://huggingface.co/papers/2605.13724) 中引入的流映射 \\(\Phi_&amp;lcub;r\leftarrow t}\\) 所需的嵌入。

对于分块自回归（FAR causal）生成，请改用 `AnyFlowFARTransformer3DModel`；该变体在相同的骨干网络之上增加了 FAR causal 块掩码和压缩帧的 patch 嵌入。

#### forward[[diffusers.AnyFlowTransformer3DModel.forward]]

```python
forward(hidden_states: Tensor, timestep: Tensor, r_timestep: Tensor, encoder_hidden_states: Tensor, encoder_hidden_states_image: typing.Optional[torch.Tensor] = None, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, return_dict: bool = True)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_anyflow.py#L626)

**参数：**

hidden_states (*torch.Tensor*，形状为 *(batch_size, num_frames, num_channels, height, width)*)：输入视频潜变量。

timestep (*torch.Tensor*) : 源（噪声更大）流映射时间步 *t*。

r_timestep (*torch.Tensor*) : 目标（更干净的）流映射时间步 *r*；定义流映射步骤的目标位置。

encoder_hidden_states (*torch.Tensor*，形状为 *(batch_size, sequence_len, embed_dims)*)：文本条件嵌入。

encoder_hidden_states_image (*torch.Tensor*, *可选*) : 图像条件嵌入；如果提供，将在文本 token 之前进行拼接。

attention_kwargs (*dict*, *optional*) : 转发给 [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) 中 *self.processor* 下定义的 *AttentionProcessor* 的关键字参数。

return_dict (*bool*，*可选*，默认为 *True*)：是否返回 [*~models.transformer_2d.Transformer2DModelOutput*] 而不是普通元组。

**返回值：**

如果 *return_dict* 为 True，则返回 [*~models.transformer_2d.Transformer2DModelOutput*]；否则返回一个 *tuple*，其第一个元素为预测的速度张量。

双向流图前向传播。`hidden_states` 的布局为 `(B, F, C, H, W)`（逐帧潜变量）。输入通过标准的 `patch_embedding`（kernel = stride = `patch_size`）进行分块，并对由此得到的扁平 token 序列执行全局双向自注意力去噪。

