# CogView3PlusTransformer2DModel

清华大学 & 智谱 AI 在 [CogView3: Finer and Faster Text-to-Image Generation via Relay Diffusion](https://huggingface.co/papers/2403.05121) 中介绍了 [CogView3Plus](https://github.com/THUDM/CogView3) 的 2D 数据 Diffusion Transformer 模型。

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

```python
from diffusers import CogView3PlusTransformer2DModel

transformer = CogView3PlusTransformer2DModel.from_pretrained("THUDM/CogView3Plus-3b", subfolder="transformer", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"
```

## CogView3PlusTransformer2DModel[[diffusers.CogView3PlusTransformer2DModel]]

#### diffusers.CogView3PlusTransformer2DModel[[diffusers.CogView3PlusTransformer2DModel]]

```python
diffusers.CogView3PlusTransformer2DModel(patch_size: int = 2, in_channels: int = 16, num_layers: int = 30, 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, pos_embed_max_size: int = 128, sample_size: int = 128)
```

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

**参数：**

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`

在 [CogView3：通过中继扩散实现更精细、更快速的文本到图像生成](https://huggingface.co/papers/2403.05121) 中引入的 Transformer 模型。

#### forward[[diffusers.CogView3PlusTransformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor, timestep: LongTensor, original_size: Tensor, target_size: Tensor, crop_coords: Tensor, return_dict: bool = True)
```

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

**参数：**

hidden_states (`torch.Tensor`) : 输入 `hidden_states`，形状为 `(batch size, channel, height, width)`。

encoder_hidden_states (`torch.Tensor`) : 条件嵌入（根据输入条件（例如提示词）计算得到的嵌入），形状为 `(batch_size, sequence_len, text_embed_dim)`

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

original_size (`torch.Tensor`) : CogView3 使用类似于 SDXL 的微条件机制来处理原始图像尺寸，具体说明见 [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952) 中的第 2.2 节。

target_size (`torch.Tensor`) : CogView3 使用类似 SDXL 的微条件机制来处理目标图像尺寸，具体说明见 [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952) 中的第 2.2 节。

crop_coords (`torch.Tensor`) : CogView3 使用类似 SDXL 的微条件化方法处理裁剪坐标，具体说明见 [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952) 中的第 2.2 节。

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

**返回：** `torch.Tensor` 或 `~models.transformer_2d.Transformer2DModelOutput`

使用提供的输入作为条件进行去噪后的潜在变量。

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

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

