# CogView4Transformer2DModel

来自 [CogView4]() 的用于 2D 数据的 Diffusion Transformer 模型

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

```python
from diffusers import CogView4Transformer2DModel

transformer = CogView4Transformer2DModel.from_pretrained("THUDM/CogView4-6B", subfolder="transformer", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"
```

## CogView4Transformer2DModel[[diffusers.CogView4Transformer2DModel]]

#### diffusers.CogView4Transformer2DModel[[diffusers.CogView4Transformer2DModel]]

```python
diffusers.CogView4Transformer2DModel(patch_size: int = 2, in_channels: int = 16, out_channels: int = 16, num_layers: int = 30, attention_head_dim: int = 40, num_attention_heads: int = 64, text_embed_dim: int = 4096, time_embed_dim: int = 512, condition_dim: int = 256, pos_embed_max_size: int = 128, sample_size: int = 128, rope_axes_dim: tuple[int, int] = (256, 256))
```

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

**参数：**

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

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

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

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

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

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

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

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

condition_dim (`int`，默认为 `256`) : 输入 SDXL 风格分辨率条件（original_size、target_size、crop_coords）的嵌入维度。

pos_embed_max_size (`int`，默认为 `128`)：位置嵌入的最大分辨率，将从中截取形状为 `H x W` 的切片并加到输入的 patch 化潜变量上，其中 `H` 和 `W` 分别为潜变量的高度和宽度。值为 128 表示图像生成支持的最大高度和宽度为 `128 * vae_scale_factor * patch_size => 128 * 8 * 2 => 2048`。

sample_size (`int`，默认为 `128`)：输入潜变量的基础分辨率。如果在生成过程中未提供高度/宽度，则使用该值来确定分辨率，即 `sample_size * vae_scale_factor => 128 * 8 => 1024`

#### forward[[diffusers.CogView4Transformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor, timestep: LongTensor, original_size: Tensor, target_size: Tensor, crop_coords: Tensor, attention_kwargs: dict[str, typing.Any] | None = None, return_dict: bool = True, attention_mask: typing.Optional[torch.Tensor] = None, image_rotary_emb: tuple[torch.Tensor, torch.Tensor] | list[tuple[torch.Tensor, torch.Tensor]] | None = None)
```

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

**参数：**

hidden_states (`torch.Tensor`，形状为 `(batch_size, in_channels, height, width)`)：输入 `hidden_states`。

encoder_hidden_states (`torch.Tensor`，形状为 `(batch_size, sequence_len, embed_dims)`)：要使用的条件嵌入（从输入条件（例如提示词）计算得出的嵌入）。

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

original_size (`torch.Tensor`) : 原始图像尺寸条件。

target_size (`torch.Tensor`)：目标图像尺寸条件。

crop_coords (`torch.Tensor`)：裁剪坐标条件。

attention_kwargs (`dict`, *可选*) : 一个 kwargs 字典，如果指定，将作为参数传递给 [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` 而不是普通元组。

attention_mask (`torch.Tensor`, *可选*) : 应用于注意力分数的掩码。

image_rotary_emb (`tuple` of `torch.Tensor`, *可选*) : 预计算的旋转位置嵌入。

**返回值：**

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

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

## 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) 的输出。

