# PriorTransformer

Prior Transformer ban đầu được giới thiệu trong [Hierarchical Text-Conditional Image Generation with CLIP Latents](https://huggingface.co/papers/2204.06125) của Ramesh và cộng sự. Nó được sử dụng để dự đoán các embedding ảnh CLIP từ các embedding văn bản CLIP; các embedding ảnh được dự đoán thông qua một quá trình khuếch tán khử nhiễu.

Tóm tắt từ bài báo là:

*Các mô hình tương phản như CLIP đã được chứng minh là có khả năng học các biểu diễn hình ảnh mạnh mẽ, nắm bắt được cả ngữ nghĩa lẫn phong cách. Để tận dụng các biểu diễn này cho việc tạo hình ảnh, chúng tôi đề xuất một mô hình hai giai đoạn: một mô hình tiên nghiệm (prior) tạo ra vector nhúng (embedding) hình ảnh CLIP dựa trên mô tả văn bản, và một bộ giải mã (decoder) tạo ra hình ảnh có điều kiện dựa trên vector nhúng hình ảnh đó. Chúng tôi cho thấy việc tạo ra các biểu diễn hình ảnh một cách tường minh giúp cải thiện tính đa dạng của hình ảnh với mức giảm thiểu về độ chân thực và độ tương đồng với mô tả. Các bộ giải mã của chúng tôi, có điều kiện dựa trên các biểu diễn hình ảnh, cũng có thể tạo ra các biến thể của một hình ảnh, giữ nguyên cả ngữ nghĩa lẫn phong cách của nó, trong khi thay đổi các chi tiết không thiết yếu không có trong biểu diễn hình ảnh. Hơn nữa, không gian nhúng chung của CLIP cho phép thao tác hình ảnh theo hướng dẫn ngôn ngữ theo cách zero-shot. Chúng tôi sử dụng mô hình khuếch tán (diffusion model) cho bộ giải mã và thử nghiệm cả mô hình tự hồi quy (autoregressive) lẫn mô hình khuếch tán cho mô hình tiên nghiệm, và nhận thấy rằng nhóm mô hình khuếch tán hiệu quả hơn về mặt tính toán và tạo ra các mẫu có chất lượng cao hơn.*

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

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/prior_transformer.py#L34)

**Tham số:**

num_attention_heads (`int`, *tuỳ chọn*, mặc định là 32) : Số lượng đầu (heads) được sử dụng cho chú ý đa đầu (multi-head attention).

attention_head_dim (`int`, *tuỳ chọn*, mặc định là 64) : Số lượng kênh trong mỗi đầu.

num_layers (`int`, *tuỳ chọn*, mặc định là 20) : Số lượng lớp khối Transformer cần sử dụng.

embedding_dim (`int`, *tùy chọn*, mặc định là 768) : Kích thước của đầu vào mô hình `hidden_states`

num_embeddings (`int`, *tuỳ chọn*, mặc định là 77) : Số lượng embedding của đầu vào mô hình `hidden_states`

additional_embeddings (`int`, *tuỳ chọn*, mặc định là 4) : Số lượng token bổ sung được thêm vào `hidden_states` đã được chiếu. Độ dài thực tế của `hidden_states` được sử dụng là `num_embeddings + additional_embeddings`.

dropout (`float`, *tuỳ chọn*, mặc định là 0.0) : Xác suất dropout cần sử dụng.

time_embed_act_fn (`str`, *tùy chọn*, mặc định là 'silu') : Hàm kích hoạt được sử dụng để tạo nhúng bước thời gian.

norm_in_type (`str`, *tùy chọn*, mặc định là None) : Lớp chuẩn hóa cần áp dụng lên các trạng thái ẩn trước khi truyền vào các khối Transformer. Đặt thành `None` nếu không cần chuẩn hóa.

embedding_proj_norm_type (`str`, *tùy chọn*, mặc định là None) : Lớp chuẩn hóa cần áp dụng cho đầu vào `proj_embedding`. Đặt thành `None` nếu không cần chuẩn hóa.

encoder_hid_proj_type (`str`, *tùy chọn*, mặc định là `linear`) : Lớp chiếu (projection layer) được áp dụng lên đầu vào `encoder_hidden_states`. Đặt thành `None` nếu `encoder_hidden_states` là `None`.

added_emb_type (`str`, *tuỳ chọn*, mặc định là `prd`) : Các embedding bổ sung để điều kiện hóa mô hình. Chọn từ `prd` hoặc `None`. Nếu chọn `prd`, một token chỉ ra tích vô hướng (đã lượng tử hóa) giữa embedding văn bản và embedding hình ảnh sẽ được thêm vào phía trước, như đề xuất trong bài báo unclip https://huggingface.co/papers/2204.06125 Nếu là `None`, sẽ không có embedding bổ sung nào được thêm vào phía trước.

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`, *tuỳ chọn*, mặc định là None) : Kích thước của `proj_embedding`. Nếu là None, sẽ được đặt thành `embedding_dim`.

clip_embed_dim (`int`, *tuỳ chọn*, mặc định là None) : Kích thước của đầu ra. Nếu là None, sẽ được đặt thành `embedding_dim`.

Mô hình Transformer A 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)
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/prior_transformer.py#L183)

**Tham số:**

hidden_states (`torch.Tensor` có hình dạng `(batch_size, embedding_dim)`) : Các embedding ảnh được dự đoán hiện tại.

timestep (`torch.LongTensor`) : Bước khử nhiễu hiện tại.

proj_embedding (`torch.Tensor` có hình dạng `(batch_size, embedding_dim)`) : Vector embedding đã chiếu mà quá trình khử nhiễu được điều kiện dựa trên.

encoder_hidden_states (`torch.Tensor` có hình dạng `(batch_size, num_embeddings, embedding_dim)`) : Trạng thái ẩn của các nhúng văn bản mà quá trình khử nhiễu được điều kiện dựa trên.

attention_mask (`torch.BoolTensor` có shape `(batch_size, num_embeddings)`) : Mặt nạ (mask) cho các text embeddings.

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một [PriorTransformerOutput](/docs/diffusers/main/vi/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) thay vì một tuple thông thường hay không.

**Trả về:** [PriorTransformerOutput](/docs/diffusers/main/vi/api/models/prior_transformer#diffusers.models.transformers.prior_transformer.PriorTransformerOutput) hoặc `tuple`

If return_dict is True, a [PriorTransformerOutput](/docs/diffusers/main/vi/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.

Phương thức forward của [PriorTransformer](/docs/diffusers/main/vi/api/models/prior_transformer#diffusers.PriorTransformer).

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

```python
set_default_attn_processor()
```

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/prior_transformer.py#L168)

Tắt các bộ xử lý chú ý tùy chỉnh và đặt cài đặt chú ý mặc định.

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

[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/prior_transformer.py#L22)

**Tham số:**

predicted_image_embedding (`torch.Tensor` có hình dạng `(batch_size, embedding_dim)`) : Nhúng hình ảnh CLIP được dự đoán, có điều kiện dựa trên đầu vào nhúng văn bản CLIP.

Đầu ra của [PriorTransformer](/docs/diffusers/main/vi/api/models/prior_transformer#diffusers.PriorTransformer).

