# OmniGenTransformer2DModel

Một mô hình Transformer nhận các chỉ thị đa phương thức để tạo hình ảnh cho [OmniGen](https://github.com/VectorSpaceLab/OmniGen/).

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

*Sự ra đời của các Mô hình Ngôn ngữ Lớn (LLM) đã thống nhất các tác vụ tạo ngôn ngữ và cách mạng hóa tương tác giữa con người và máy móc. Tuy nhiên, trong lĩnh vực tạo ảnh, một mô hình thống nhất có khả năng xử lý nhiều tác vụ khác nhau trong cùng một khung kiến trúc vẫn chưa được khám phá nhiều. Trong công trình này, chúng tôi giới thiệu OmniGen, một mô hình khuếch tán mới cho tạo ảnh thống nhất. OmniGen có các đặc điểm sau: 1) Thống nhất: OmniGen không chỉ thể hiện khả năng tạo ảnh từ văn bản mà còn hỗ trợ nội tại nhiều tác vụ hạ nguồn khác nhau, chẳng hạn như chỉnh sửa ảnh, tạo ảnh theo chủ thể và tạo ảnh có điều kiện thị giác. 2) Đơn giản: Kiến trúc của OmniGen được đơn giản hóa cao, loại bỏ nhu cầu về các plugin bổ sung. Hơn nữa, so với các mô hình khuếch tán hiện có, nó thân thiện hơn với người dùng và có thể hoàn thành các tác vụ phức tạp theo hướng dẫn từ đầu đến cuối mà không cần các bước trung gian bổ sung, qua đó đơn giản hóa đáng kể quy trình tạo ảnh. 3) Chuyển giao kiến thức: Nhờ học tập theo định dạng thống nhất, OmniGen chuyển giao kiến thức hiệu quả giữa các tác vụ khác nhau, quản lý các tác vụ và miền chưa từng thấy, và thể hiện các khả năng mới. Chúng tôi cũng khám phá khả năng suy luận của mô hình và các ứng dụng tiềm năng của cơ chế chuỗi suy nghĩ. Công trình này đại diện cho nỗ lực đầu tiên về một mô hình tạo ảnh đa dụng, và chúng tôi sẽ phát hành tài nguyên của mình tại https://github.com/VectorSpaceLab/OmniGen để thúc đẩy các tiến bộ trong tương lai.*

```python
import torch
from diffusers import OmniGenTransformer2DModel

transformer = OmniGenTransformer2DModel.from_pretrained("Shitao/OmniGen-v1-diffusers", subfolder="transformer", dtype=torch.bfloat16)
```

## OmniGenTransformer2DModel[[diffusers.OmniGenTransformer2DModel]]

#### diffusers.OmniGenTransformer2DModel[[diffusers.OmniGenTransformer2DModel]]

```python
diffusers.OmniGenTransformer2DModel(in_channels: int = 4, patch_size: int = 2, hidden_size: int = 3072, rms_norm_eps: float = 1e-05, num_attention_heads: int = 32, num_key_value_heads: int = 32, intermediate_size: int = 8192, num_layers: int = 32, pad_token_id: int = 32000, vocab_size: int = 32064, max_position_embeddings: int = 131072, original_max_position_embeddings: int = 4096, rope_base: int = 10000, rope_scaling: dict = None, pos_embed_max_size: int = 192, time_step_dim: int = 256, flip_sin_to_cos: bool = True, downscale_freq_shift: int = 0, timestep_activation_fn: str = 'silu')
```

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

**Tham số:**

in_channels (`int`, mặc định là `4`) : Số lượng kênh trong đầu vào.

patch_size (`int`, mặc định là `2`) : Kích thước của các patch không gian được sử dụng trong lớp nhúng patch.

hidden_size (`int`, mặc định là `3072`) : Độ chiều của các lớp ẩn trong mô hình.

rms_norm_eps (`float`, mặc định là `1e-5`) : Eps cho lớp RMSNorm.

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

num_key_value_heads (`int`, mặc định là `32`) : Số lượng đầu (heads) được sử dụng cho các key và value trong cơ chế chú ý đa đầu (multi-head attention).

intermediate_size (`int`, mặc định là `8192`) : Kích thước của lớp ẩn trong các lớp FeedForward.

num_layers (`int`, mặc định là `32`) : Số lượng lớp khối transformer cần sử dụng.

pad_token_id (`int`, mặc định là `32000`) : id của token đệm (padding token).

vocab_size (`int`, mặc định là `32064`) : Kích thước của bảng từ vựng cho embedding.

rope_base (`int`, mặc định là `10000`) : Giá trị theta mặc định được sử dụng khi tạo RoPE.

rope_scaling (`dict`, tùy chọn) : Các hệ số tỷ lệ cho RoPE. Phải chứa `short_factor` và `long_factor`.

pos_embed_max_size (`int`, mặc định là `192`) : Kích thước tối đa của các nhúng vị trí (positional embeddings).

time_step_dim (`int`, mặc định là `256`) : Kích thước chiều đầu ra của các embedding bước thời gian.

flip_sin_to_cos (`bool`, mặc định là `True`) : Có nên đảo sin và cos trong các nhúng vị trí khi chuẩn bị các nhúng bước thời gian hay không.

downscale_freq_shift (`int`, mặc định là `0`) : Độ dịch tần số cần sử dụng khi giảm kích thước các nhúng bước thời gian (timestep embeddings).

timestep_activation_fn (`str`, mặc định là `silu`) : Hàm kích hoạt được sử dụng cho các nhúng bước thời gian.

Mô hình Transformer được giới thiệu trong OmniGen (https://huggingface.co/papers/2409.11340).

#### forward[[diffusers.OmniGenTransformer2DModel.forward]]

```python
forward(hidden_states: Tensor, timestep: typing.Union[int, float, torch.FloatTensor], input_ids: Tensor, input_img_latents: list[torch.Tensor], input_image_sizes: dict[int, list[int]], attention_mask: Tensor, position_ids: Tensor, return_dict: bool = True)
```

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

**Tham số:**

hidden_states (`torch.Tensor` có hình dạng `(batch_size, in_channels, height, width)`) : `hidden_states` đầu vào.

timestep (`torch.LongTensor`) : Dùng để chỉ bước khử nhiễu.

input_ids (`torch.Tensor`) : Các id token văn bản đa phương thức được sử dụng làm điều kiện.

input_img_latents (`list` của `torch.Tensor`) : Danh sách các latents cho các hình ảnh đầu vào được sử dụng làm điều kiện.

input_image_sizes (`dict` của `int` tới `list` của `int`) : Ánh xạ từ chỉ mục mẫu tới các vị trí mà các nhúng ảnh đầu vào nên được đặt trong chuỗi điều kiện.

attention_mask (`torch.Tensor`) : Mặt nạ chú ý (attention mask) cho chuỗi đa phương thức kết hợp.

position_ids (`torch.Tensor`) : Các id vị trí được sử dụng để tính các nhúng vị trí.

return_dict (`bool`, *tùy chọn*, mặc định là `True`) : Có nên trả về một `~models.transformer_2d.Transformer2DModelOutput` thay vì một tuple thông thường hay không.

**Trả về:** `~models.transformer_2d.Transformer2DModelOutput` hoặc `tuple`

Nếu `return_dict` là True, một `~models.transformer_2d.Transformer2DModelOutput` sẽ được trả về, ngược lại một `tuple` thông thường sẽ được trả về.

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

