# EasyAnimateTransformer3DModel

阿里巴巴 PAI 推出了一个用于 3D 数据的 Diffusion Transformer 模型，来自 [EasyAnimate](https://github.com/aigc-apps/EasyAnimate)。

可以使用以下代码片段加载该模型。

```python
from diffusers import EasyAnimateTransformer3DModel

transformer = EasyAnimateTransformer3DModel.from_pretrained("alibaba-pai/EasyAnimateV5.1-12b-zh", subfolder="transformer", dtype=torch.float16).to("cuda")  # or "mps", "xpu", "cpu"
```

## EasyAnimateTransformer3DModel[[diffusers.EasyAnimateTransformer3DModel]]

#### diffusers.EasyAnimateTransformer3DModel[[diffusers.EasyAnimateTransformer3DModel]]

```python
diffusers.EasyAnimateTransformer3DModel(num_attention_heads: int = 48, attention_head_dim: int = 64, in_channels: int | None = None, out_channels: int | None = None, patch_size: int | None = None, sample_width: int = 90, sample_height: int = 60, activation_fn: str = 'gelu-approximate', timestep_activation_fn: str = 'silu', freq_shift: int = 0, num_layers: int = 48, mmdit_layers: int = 48, dropout: float = 0.0, time_embed_dim: int = 512, add_norm_text_encoder: bool = False, text_embed_dim: int = 3584, text_embed_dim_t5: int = None, norm_eps: float = 1e-05, norm_elementwise_affine: bool = True, flip_sin_to_cos: bool = True, time_position_encoding_type: str = '3d_rope', after_norm = False, resize_inpaint_mask_directly: bool = True, enable_text_attention_mask: bool = True, add_noise_in_inpaint_model: bool = True)
```

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

**参数：**

num_attention_heads (`int`，默认为 `48`)：用于多头注意力的注意力头数量。

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

in_channels (`int`，默认为 `16`)：输入中的通道数。

out_channels (`int`，*可选*，默认为 `16`)：输出的通道数。

patch_size (`int`，默认为 `2`)：用于 patch 嵌入层的 patch 大小。

sample_width (`int`，默认值为 `90`)：输入潜变量的宽度。

sample_height (`int`，默认为 `60`)：输入潜变量的高度。

activation_fn (`str`，默认为 `"gelu-approximate"`)：前馈网络中使用的激活函数。

timestep_activation_fn (`str`，默认为 `"silu"`)：生成时间步嵌入时使用的激活函数。

num_layers (`int`，默认为 `30`)：要使用的 Transformer 块层数。

mmdit_layers (`int`，默认为 `1000`) : 要使用的 Multi Modal Transformer 块层数。

dropout (`float`，默认为 `0.0`)：要使用的 dropout 概率。

time_embed_dim (`int`，默认为 `512`)：时间步嵌入的输出维度。

text_embed_dim (`int`，默认为 `4096`)：文本编码器输出的文本嵌入的输入维度。

norm_eps (`float`，默认值为 `1e-5`)：归一化层中使用的 epsilon 值。

norm_elementwise_affine (`bool`，默认为 `True`)：是否在归一化层中使用逐元素仿射变换。

flip_sin_to_cos (`bool`，默认为 `True`)：是否将时间嵌入中的 sin 翻转为 cos。

time_position_encoding_type (`str`，默认为 `3d_rope`)：时间位置编码的类型。

after_norm (`bool`，默认为 `False`)：用于指示是否在之后应用归一化的标志。

resize_inpaint_mask_directly (`bool`，默认为 `True`)：是否直接调整 inpaint mask 大小的标志。

enable_text_attention_mask (`bool`，默认为 `True`)：用于启用文本注意力掩码的标志。

add_noise_in_inpaint_model (`bool`，默认为 `False`)：用于在 inpaint 模型中添加噪声的标志。

[EasyAnimate](https://github.com/aigc-apps/EasyAnimate) 中用于类视频数据的 Transformer 模型。

#### forward[[diffusers.EasyAnimateTransformer3DModel.forward]]

```python
forward(hidden_states: Tensor, timestep: Tensor, timestep_cond: typing.Optional[torch.Tensor] = None, encoder_hidden_states: typing.Optional[torch.Tensor] = None, encoder_hidden_states_t5: typing.Optional[torch.Tensor] = None, inpaint_latents: typing.Optional[torch.Tensor] = None, control_latents: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

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

**参数：**

hidden_states (`torch.Tensor`，形状为 `(batch_size, channels, num_frames, height, width)`) : 输入 `hidden_states`。

timestep (`torch.LongTensor`)：用于指示去噪步骤。

timestep_cond (`torch.Tensor`, *可选*) : 用于时间步的条件嵌入。如果提供，这些嵌入将与通过 `self.time_embedding` 层传入的样本相加，以得到最终的时间步嵌入。

encoder_hidden_states (`torch.Tensor`, *可选*) : 要使用的条件嵌入（根据输入条件（如提示词）计算得出的嵌入）。

encoder_hidden_states_t5 (`torch.Tensor`, *可选*) : 从 T5 文本编码器计算得出的额外条件嵌入。

inpaint_latents (`torch.Tensor`, *可选*) : 用于模型修复（inpainting）变体，与 `hidden_states` 拼接的潜变量。

control_latents (`torch.Tensor`, *可选*) : 用于模型控制变体，与 `hidden_states` 拼接的潜变量。

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

**返回值：**

如果 `return_dict` 为 True，则返回 `~models.transformer_2d.Transformer2DModelOutput`，否则返回一个 `tuple`，其中第一个元素是样本张量。

[EasyAnimateTransformer3DModel](/docs/diffusers/v0.43.0/zh/api/models/easyanimate_transformer3d#diffusers.EasyAnimateTransformer3DModel) 的前向方法。

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

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

**参数：**

sample (`torch.Tensor`，形状为 `(batch_size, num_channels, height, width)`；若 [Transformer2DModel](/docs/diffusers/v0.43.0/zh/api/models/transformer2d#diffusers.Transformer2DModel) 为离散模式，则为 `(batch size, num_vector_embeds - 1, num_latent_pixels)`)：以 `encoder_hidden_states` 输入为条件的隐藏状态输出。若为离散模式，则返回未加噪潜在像素的概率分布。

[Transformer2DModel](/docs/diffusers/v0.43.0/zh/api/models/transformer2d#diffusers.Transformer2DModel) 的输出。

