# PriorTransformer

Prior Transformer は、Ramesh らによる [Hierarchical Text-Conditional Image Generation with CLIP Latents](https://huggingface.co/papers/2204.06125) で初めて紹介されました。CLIP テキスト埋め込みから CLIP 画像埋め込みを予測するために使用され、画像埋め込みはデノイジング拡散プロセスを通じて予測されます。

論文の抄録は以下の通りです：

*CLIPのような対照的モデルは、意味とスタイルの両方を捉える画像の頑健な表現を学習できることが示されています。これらの表現を画像生成に活用するために、2段階のモデルを提案します。1つは、テキストキャプションが与えられたときにCLIPの画像埋め込みを生成する事前分布（prior）、もう1つは、画像埋め込みを条件として画像を生成するデコーダーです。画像表現を明示的に生成することで、フォトリアリズムとキャプション類似度の損失を最小限に抑えながら、画像の多様性を向上させることを示します。画像表現を条件とする私たちのデコーダーは、画像表現に含まれていない非本質的な詳細を変化させつつ、意味とスタイルの両方を保持した画像のバリエーションを生成することもできます。さらに、CLIPの結合埋め込み空間により、ゼロショットで言語による画像操作が可能になります。デコーダーには拡散モデルを使用し、事前分布には自己回帰モデルと拡散モデルの両方を試しましたが、後者の方が計算効率が良く、より高品質なサンプルを生成することがわかりました。*

## PriorTransformer[[diffusers.PriorTransformer]]

#### diffusers.PriorTransformer[[diffusers.PriorTransformer]]

```python
diffusers.PriorTransformer(num_attention_heads: int = 32, attention_head_dim: int = 64, num_layers: int = 20, embedding_dim: int = 768, num_embeddings = 77, additional_embeddings = 4, dropout: float = 0.0, time_embed_act_fn: str = 'silu', norm_in_type: str | None = None, embedding_proj_norm_type: str | None = None, encoder_hid_proj_type: str | None = 'linear', added_emb_type: str | None = 'prd', time_embed_dim: int | None = None, embedding_proj_dim: int | None = None, clip_embed_dim: int | None = None)
```

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

**パラメータ:**

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

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

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

embedding_dim (`int`、*optional*、デフォルトは 768) : モデル入力 `hidden_states` の次元

num_embeddings (`int`、*optional*、デフォルトは 77) : モデル入力 `hidden_states` の埋め込み数

additional_embeddings (`int`、*任意*、デフォルトは 4) : 投影された`hidden_states`に追加されるトークンの数です。実際に使用される`hidden_states`の長さは`num_embeddings + additional_embeddings`です。

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

time_embed_act_fn (`str`、*任意*、デフォルトは 'silu') : タイムステップ埋め込みの作成に使用する活性化関数。

norm_in_type (`str`、*任意*、デフォルトは None) : Transformer ブロックに渡す前に、隠れ状態に適用する正規化レイヤー。正規化が不要な場合は `None` に設定します。

embedding_proj_norm_type (`str`、*任意*、デフォルトは None) : 入力 `proj_embedding` に適用する正規化レイヤー。正規化が不要な場合は `None` に設定します。

encoder_hid_proj_type (`str`、*任意*、デフォルトは`linear`) : 入力`encoder_hidden_states`に適用する投影層。`encoder_hidden_states`が`None`の場合は、`None`に設定してください。

added_emb_type (`str`、*任意*、デフォルトは `prd`) : モデルを条件付けするための追加の埋め込み。 `prd` または `None` から選択します。 `prd` を選択した場合、unclip の論文 https://huggingface.co/papers/2204.06125 で提案されているように、テキスト埋め込みと画像埋め込みの（量子化された）内積を示すトークンを先頭に追加します。 `None` の場合、追加の埋め込みは先頭に追加されません。

time_embed_dim (`int, *optional*, defaults to None) : The dimension of timestep embeddings. If None, will be set to `num_attention_heads * attention_head_dim`

embedding_proj_dim (`int`、*任意*、デフォルトは None) : `proj_embedding` の次元です。None の場合、`embedding_dim` に設定されます。

clip_embed_dim (`int`、*optional*、デフォルトは None) : 出力の次元数です。None の場合、`embedding_dim` に設定されます。

事前学習済み Transformer モデル。

#### forward[[diffusers.PriorTransformer.forward]]

```python
forward(hidden_states, timestep: typing.Union[torch.Tensor, float, int], proj_embedding: Tensor, encoder_hidden_states: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.BoolTensor] = None, return_dict: bool = True)
```

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

**パラメータ:**

hidden_states (`torch.Tensor`、shape `(batch_size, embedding_dim)`) : 現在予測されている画像埋め込み。

timestep (`torch.LongTensor`) : 現在のノイズ除去ステップ。

proj_embedding (`torch.Tensor`、shape `(batch_size, embedding_dim)`) : 去噪プロセスの条件となる、射影された埋め込みベクトル。

encoder_hidden_states (`torch.Tensor`、shape `(batch_size, num_embeddings, embedding_dim)`) : デノイジングプロセスの条件となるテキスト埋め込みの隠れ状態。

attention_mask (`torch.BoolTensor`、shape `(batch_size, num_embeddings)`) : テキスト埋め込み用のテキストマスク。

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

**戻り値:** [PriorTransformerOutput](/docs/diffusers/main/ja/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) または `tuple`

return_dict が True の場合、[PriorTransformerOutput](/docs/diffusers/main/ja/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。

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

#### set_default_attn_processor[[diffusers.PriorTransformer.set_default_attn_processor]]

```python
set_default_attn_processor()
```

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

カスタムアテンションプロセッサを無効にし、デフォルトのアテンション実装を設定します。

## PriorTransformerOutput[[diffusers.models.transformers.prior_transformer.PriorTransformerOutput]]

#### diffusers.models.transformers.prior_transformer.PriorTransformerOutput[[diffusers.models.transformers.prior_transformer.PriorTransformerOutput]]

```python
diffusers.models.transformers.prior_transformer.PriorTransformerOutput(predicted_image_embedding: Tensor)
```

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

**パラメータ:**

predicted_image_embedding (`torch.Tensor`、shape `(batch_size, embedding_dim)`) : CLIP テキスト埋め込み入力を条件として予測された CLIP 画像埋め込み。

[PriorTransformer](/docs/diffusers/main/ja/api/models/prior_transformer#diffusers.PriorTransformer)の出力。

