# PriorTransformer

Prior Transformer pertama kali diperkenalkan dalam [Hierarchical Text-Conditional Image Generation with CLIP Latents](https://huggingface.co/papers/2204.06125) oleh Ramesh dkk. Model ini digunakan untuk memprediksi embedding gambar CLIP dari embedding teks CLIP; embedding gambar diprediksi melalui proses denoising diffusion.

Abstrak dari makalah tersebut adalah:

*Model kontrasif seperti CLIP telah terbukti mampu mempelajari representasi gambar yang robust, yang menangkap baik semantik maupun gaya. Untuk memanfaatkan representasi ini untuk generasi gambar, kami mengusulkan model dua tahap: prior yang menghasilkan embedding gambar CLIP berdasarkan caption teks, dan decoder yang menghasilkan gambar yang dikondisikan pada embedding gambar tersebut. Kami menunjukkan bahwa secara eksplisit menghasilkan representasi gambar meningkatkan keragaman gambar dengan kehilangan minimal dalam hal fotorealisme dan kemiripan caption. Decoder kami yang dikondisikan pada representasi gambar juga dapat menghasilkan variasi dari sebuah gambar yang mempertahankan baik semantik maupun gayanya, sambil memvariasikan detail non-esensial yang tidak ada dalam representasi gambar tersebut. Selain itu, ruang embedding gabungan dari CLIP memungkinkan manipulasi gambar yang dipandu bahasa secara zero-shot. Kami menggunakan model difusi untuk decoder dan bereksperimen dengan model autoregresif maupun model difusi untuk prior, dan menemukan bahwa yang terakhir secara komputasi lebih efisien dan menghasilkan sampel dengan kualitas yang lebih tinggi.*

## 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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/prior_transformer.py#L34)

**Parameter:**

num_attention_heads (`int`, *opsional*, defaultnya 32) : Jumlah head yang digunakan untuk multi-head attention.

attention_head_dim (`int`, *opsional*, defaultnya 64) : Jumlah channel di setiap head.

num_layers (`int`, *opsional*, defaultnya 20) : Jumlah lapisan blok Transformer yang akan digunakan.

embedding_dim (`int`, *opsional*, default 768) : Dimensi dari input model `hidden_states`

num_embeddings (`int`, *opsional*, defaultnya 77) : Jumlah embedding dari input model `hidden_states`

additional_embeddings (`int`, *opsional*, default 4) : Jumlah token tambahan yang ditambahkan ke `hidden_states` yang diproyeksikan. Panjang aktual dari `hidden_states` yang digunakan adalah `num_embeddings + additional_embeddings`.

dropout (`float`, *opsional*, default 0.0) : Probabilitas dropout yang akan digunakan.

time_embed_act_fn (`str`, *opsional*, defaultnya 'silu') : Fungsi aktivasi yang digunakan untuk membuat embedding timestep.

norm_in_type (`str`, *opsional*, defaultnya None) : Lapisan normalisasi yang diterapkan pada hidden states sebelum diteruskan ke blok Transformer. Atur menjadi `None` jika normalisasi tidak diperlukan.

embedding_proj_norm_type (`str`, *opsional*, defaultnya None) : Lapisan normalisasi yang diterapkan pada input `proj_embedding`. Atur menjadi `None` jika normalisasi tidak diperlukan.

encoder_hid_proj_type (`str`, *opsional*, defaultnya `linear`) : Lapisan proyeksi yang diterapkan pada input `encoder_hidden_states`. Atur menjadi `None` jika `encoder_hidden_states` adalah `None`.

added_emb_type (`str`, *opsional*, defaultnya `prd`) : Embedding tambahan untuk mengondisikan model. Pilih dari `prd` atau `None`. Jika memilih `prd`, sebuah token yang menunjukkan hasil perkalian titik (kuantisasi) antara embedding teks dan embedding gambar akan ditambahkan di depan, sebagaimana diusulkan dalam paper unclip https://huggingface.co/papers/2204.06125 Jika nilainya `None`, tidak ada embedding tambahan yang akan ditambahkan di depan.

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`, *opsional*, default None) : Dimensi dari `proj_embedding`. Jika None, akan diset ke `embedding_dim`.

clip_embed_dim (`int`, *opsional*, default None) : Dimensi dari output. Jika None, akan diset ke `embedding_dim`.

Model Transformer Prior.

#### 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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/prior_transformer.py#L183)

**Parameter:**

hidden_states (`torch.Tensor` dengan bentuk `(batch_size, embedding_dim)`) : Embedding gambar yang saat ini diprediksi.

timestep (`torch.LongTensor`) : Langkah denoising saat ini.

proj_embedding (`torch.Tensor` dengan bentuk `(batch_size, embedding_dim)`) : Vektor embedding terproyeksi yang menjadi kondisi bagi proses denoising.

encoder_hidden_states (`torch.Tensor` dengan bentuk `(batch_size, num_embeddings, embedding_dim)`) : Hidden states dari text embeddings yang menjadi kondisi bagi proses denoising.

attention_mask (`torch.BoolTensor` dengan bentuk `(batch_size, num_embeddings)`) : Mask teks untuk embedding teks.

return_dict (`bool`, *opsional*, defaultnya `True`) : Apakah akan mengembalikan [PriorTransformerOutput](/docs/diffusers/v0.43.0/id/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) alih-alih tuple biasa.

**Mengembalikan:** [PriorTransformerOutput](/docs/diffusers/v0.43.0/id/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) atau `tuple`

If return_dict is True, a [PriorTransformerOutput](/docs/diffusers/v0.43.0/id/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) is returned, otherwise a tuple is returned where the first element is the sample tensor.

Metode forward dari [PriorTransformer](/docs/diffusers/v0.43.0/id/api/models/prior_transformer#diffusers.PriorTransformer).

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

```python
set_default_attn_processor()
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/prior_transformer.py#L168)

Menonaktifkan prosesor perhatian kustom dan mengatur implementasi perhatian default.

## 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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/prior_transformer.py#L22)

**Parameter:**

predicted_image_embedding (`torch.Tensor` dengan bentuk `(batch_size, embedding_dim)`) : Embedding gambar CLIP yang diprediksi berdasarkan input embedding teks CLIP.

Output dari [PriorTransformer](/docs/diffusers/v0.43.0/id/api/models/prior_transformer#diffusers.PriorTransformer).

