# Transformer2DModel

[CompVis](https://huggingface.co/CompVis) による、Dosovitskiy らが提唱した [Vision Transformer](https://huggingface.co/papers/2010.11929) に基づく、画像類似データ向けの Transformer モデルです。[Transformer2DModel](/docs/diffusers/main/ja/api/models/transformer2d#diffusers.Transformer2DModel) は、離散的な入力（ベクトル埋め込みのクラス）または連続的な入力（実際の埋め込み）を受け取ります。

入力が**連続**の場合:

1. 入力を投影し、`(batch_size, sequence_length, feature_dimension)` にリサイズします。
2. Transformerブロックを標準的な方法で適用します。
3. 画像にリサイズします。

入力が**離散的**な場合:

> [!TIP]
> 入力クラスの一つがマスクされた潜在ピクセルであることが前提とされています。ノイズ除去済みの画像の予測クラスには、マスクされたピクセルに対する予測が含まれていません。これは、ノイズ除去済みの画像はマスクできないためです。

1. 入力（潜在ピクセルのクラス）を埋め込みに変換し、位置埋め込みを適用します。
2. Transformerブロックを標準的な方法で適用します。
3. ノイズ除去されていない画像のクラスを予測します。

## Transformer2DModel[[diffusers.Transformer2DModel]]

#### diffusers.Transformer2DModel[[diffusers.Transformer2DModel]]

```python
diffusers.Transformer2DModel(num_attention_heads: int = 16, attention_head_dim: int = 88, in_channels: int | None = None, out_channels: int | None = None, num_layers: int = 1, dropout: float = 0.0, norm_num_groups: int = 32, cross_attention_dim: int | None = None, attention_bias: bool = False, sample_size: int | None = None, num_vector_embeds: int | None = None, patch_size: int | None = None, activation_fn: str = 'geglu', num_embeds_ada_norm: int | None = None, use_linear_projection: bool = False, only_cross_attention: bool = False, double_self_attention: bool = False, upcast_attention: bool = False, norm_type: str = 'layer_norm', norm_elementwise_affine: bool = True, norm_eps: float = 1e-05, attention_type: str = 'default', caption_channels: int = None, interpolation_scale: float = None, use_additional_conditions: bool | None = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_2d.py#L39)

**パラメータ:**

num_attention_heads (`int`, *optional*, デフォルトは 16) : マルチヘッドアテンションで使用するヘッド数。

attention_head_dim (`int`、*任意*、デフォルトは 88) : 各ヘッドのチャネル数。

in_channels (`int`, *任意*) : 入力と出力のチャネル数（入力が**連続**の場合に指定します）。

num_layers (`int`、*optional*、デフォルトは 1) : 使用する Transformer ブロックの層数。

dropout (`float`、*任意*、デフォルトは 0.0) : 使用する dropout の確率。

cross_attention_dim (`int`, *任意*) : 使用する`encoder_hidden_states`の次元数。

sample_size (`int`、*任意*) : 潜在画像の幅（入力が**discrete**の場合に指定します）。これは位置埋め込みの数を学習するために使用されるため、トレーニング中は固定されます。

num_vector_embeds (`int`, *任意*) : 潜在ピクセルのベクトル埋め込みのクラス数（入力が**離散型**の場合に指定します）。マスクされた潜在ピクセルのクラスを含みます。

activation_fn (`str`、*任意*、デフォルトは`"geglu"`) : feed-forward で使用する活性化関数。

num_embeds_ada_norm ( `int`, *optional*) : 学習中に使用される拡散ステップ数。`AdaLayerNorm` が norm_layers に少なくとも 1 つ含まれている場合に渡します。これは、隠れ状態に追加される埋め込みの数を学習するために使用されるため、学習中は固定されます。推論時には、`num_embeds_ada_norm` 以上のステップ数を超えない範囲で、最大でそのステップ数までノイズ除去を行うことができます。

attention_bias (`bool`, *省略可*) : `TransformerBlocks` の attention に bias パラメータを含めるかどうかを設定します。

画像のようなデータ向けの2D Transformerモデル。

#### forward[[diffusers.Transformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: typing.Optional[torch.Tensor] = None, timestep: typing.Optional[torch.LongTensor] = None, added_cond_kwargs: dict[str, torch.Tensor] = None, class_labels: typing.Optional[torch.LongTensor] = None, cross_attention_kwargs: dict[str, typing.Any] = None, attention_mask: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/transformer_2d.py#L324)

**パラメータ:**

hidden_states (`torch.LongTensor`（shape: `(batch size, num latent pixels)`、離散型の場合）、`torch.Tensor`（shape: `(batch size, channel, height, width)`、連続型の場合））: 入力となる`hidden_states`。

encoder_hidden_states ( `torch.Tensor`、形状 `(batch size, sequence len, embed dims)`、*任意*) : クロスアテンション層用の条件付き埋め込み。指定しない場合、クロスアテンションは自己アテンションにデフォルトで切り替わります。

timestep ( `torch.LongTensor`, *任意*) : デノイジングステップを示すために使用します。`AdaLayerNorm`内で埋め込みとして適用される任意のタイムステップです。

class_labels ( `torch.LongTensor`、shape `(batch size, num classes)`、*任意*) : クラスラベルによる条件付けを示すために使用します。`AdaLayerZeroNorm`内で埋め込みとして適用される任意のクラスラベルです。

cross_attention_kwargs ( `dict[str, Any]`, *任意*) : 指定された場合、[diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) の `self.processor` で定義されている `AttentionProcessor` に渡される kwargs の辞書です。

attention_mask ( `torch.Tensor`, *任意*) : 形状が `(batch, key_tokens)` のアテンションマスクが `encoder_hidden_states` に適用されます。`1` の場合はマスクが保持され、`0` の場合は破棄されます。マスクはバイアスに変換され、「破棄」トークンに対応するアテンションスコアに大きな負の値が加算されます。

encoder_attention_mask ( `torch.Tensor`, *任意*) : `encoder_hidden_states` に適用されるクロスアテンションマスク。2つの形式をサポートします。 * マスク `(batch, sequence_length)` True = 保持、False = 破棄。 * バイアス `(batch, 1, sequence_length)` 0 = 保持、-10000 = 破棄。 `ndim == 2` の場合、マスクとして解釈され、上記の形式と整合するバイアスに変換されます。このバイアスはクロスアテンションスコアに追加されます。

return_dict (`bool`、*任意*、デフォルトは`True`) : プレーンなタプルではなく、[UNet2DConditionOutput](/docs/diffusers/main/ja/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput)を返すかどうか。

**戻り値:**

`return_dict` が True の場合、`Transformer2DModelOutput` が返され、それ以外の場合は、最初の要素がサンプルテンソルである `tuple` が返されます。

[Transformer2DModel](/docs/diffusers/main/ja/api/models/transformer2d#diffusers.Transformer2DModel)のforwardメソッドです。

## 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/main/src/diffusers/models/modeling_outputs.py#L21)

**パラメータ:**

sample (`torch.Tensor`、shape は `(batch_size, num_channels, height, width)`、または [Transformer2DModel](/docs/diffusers/main/ja/api/models/transformer2d#diffusers.Transformer2DModel) が離散型の場合 `(batch size, num_vector_embeds - 1, num_latent_pixels)`) : `encoder_hidden_states` 入力を条件とする隠れ状態の出力です。離散型の場合、ノイズ除去されていない潜在ピクセルの確率分布を返します。

[Transformer2DModel](/docs/diffusers/main/ja/api/models/transformer2d#diffusers.Transformer2DModel)の出力です。

