# OmniGenTransformer2DModel

Model Transformer yang menerima instruksi multimodal untuk menghasilkan gambar untuk [OmniGen](https://github.com/VectorSpaceLab/OmniGen/).

Abstrak dari makalah tersebut adalah:

*Munculnya Large Language Models (LLM) telah menyatukan tugas-tugas generasi bahasa dan merevolusi interaksi manusia-mesin. Namun, dalam ranah generasi gambar, model terpadu yang mampu menangani berbagai tugas dalam satu kerangka kerja masih belum banyak dieksplorasi. Dalam karya ini, kami memperkenalkan OmniGen, sebuah model difusi baru untuk generasi gambar terpadu. OmniGen dicirikan oleh fitur-fitur berikut: 1) Penyatuan: OmniGen tidak hanya menunjukkan kemampuan generasi teks-ke-gambar, tetapi juga secara inheren mendukung berbagai tugas turunan, seperti pengeditan gambar, generasi yang digerakkan oleh subjek, dan generasi kondisional visual. 2) Kesederhanaan: Arsitektur OmniGen sangat disederhanakan, menghilangkan kebutuhan akan plugin tambahan. Selain itu, dibandingkan dengan model difusi yang ada, model ini lebih ramah pengguna dan dapat menyelesaikan tugas kompleks secara end-to-end melalui instruksi tanpa memerlukan langkah-langkah perantara tambahan, sehingga sangat menyederhanakan alur kerja generasi gambar. 3) Transfer Pengetahuan: Berkat pembelajaran dalam format terpadu, OmniGen secara efektif mentransfer pengetahuan antar tugas yang berbeda, mengelola tugas dan domain yang belum pernah dilihat, serta menunjukkan kemampuan baru. Kami juga mengeksplorasi kemampuan penalaran model dan potensi aplikasi mekanisme chain-of-thought. Karya ini merupakan upaya pertama untuk model generasi gambar serbaguna, dan kami akan merilis sumber daya kami di https://github.com/VectorSpaceLab/OmniGen untuk mendorong kemajuan di masa depan.*

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

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

**Parameter:**

in_channels (`int`, defaultnya `4`) : Jumlah channel pada input.

patch_size (`int`, defaultnya `2`) : Ukuran patch spasial yang akan digunakan di lapisan patch embedding.

hidden_size (`int`, defaultnya `3072`) : Dimensi dari lapisan tersembunyi dalam model.

rms_norm_eps (`float`, defaultnya `1e-5`) : Eps untuk lapisan RMSNorm.

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

num_key_value_heads (`int`, defaultnya `32`) : Jumlah kepala yang digunakan untuk kunci dan nilai dalam perhatian multi-kepala.

intermediate_size (`int`, defaultnya `8192`) : Dimensi dari lapisan tersembunyi di lapisan FeedForward.

num_layers (`int`, default `32`) : Jumlah lapisan blok transformer yang digunakan.

pad_token_id (`int`, default `32000`) : id dari token padding.

vocab_size (`int`, default `32064`) : Ukuran kosakata dari embedding vocabulary.

rope_base (`int`, default ke `10000`) : Nilai theta default yang digunakan saat membuat RoPE.

rope_scaling (`dict`, opsional) : Faktor penskalaan untuk RoPE. Harus berisi `short_factor` dan `long_factor`.

pos_embed_max_size (`int`, default `192`) : Ukuran maksimum dari positional embeddings.

time_step_dim (`int`, default `256`) : Dimensi output dari timestep embeddings.

flip_sin_to_cos (`bool`, default ke `True`) : Apakah akan membalik sin dan cos dalam positional embeddings saat menyiapkan timestep embeddings.

downscale_freq_shift (`int`, default `0`) : Pergeseran frekuensi yang digunakan saat menurunkan skala embedding timestep.

timestep_activation_fn (`str`, default `silu`) : Fungsi aktivasi yang digunakan untuk embedding timestep.

Model Transformer yang diperkenalkan dalam 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)
```

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

**Parameter:**

hidden_states (`torch.Tensor` dengan bentuk `(batch_size, in_channels, height, width)`) : Input `hidden_states`.

timestep (`torch.LongTensor`) : Digunakan untuk menunjukkan langkah denoising.

input_ids (`torch.Tensor`) : ID token teks multimodal yang digunakan sebagai kondisioning.

input_img_latents (`list` dari `torch.Tensor`) : Daftar latens untuk gambar input yang digunakan sebagai kondisioning.

input_image_sizes (`dict` dari `int` ke `list` dari `int`) : Pemetaan dari indeks sampel ke posisi tempat embedding gambar input harus ditempatkan dalam urutan kondisioning.

attention_mask (`torch.Tensor`) : Attention mask untuk urutan multimodal gabungan.

position_ids (`torch.Tensor`) : ID posisi yang digunakan untuk menghitung embedding posisi.

return_dict (`bool`, *opsional*, defaultnya `True`) : Apakah akan mengembalikan `~models.transformer_2d.Transformer2DModelOutput` alih-alih tuple biasa.

**Mengembalikan:** `~models.transformer_2d.Transformer2DModelOutput` atau `tuple`

Jika `return_dict` bernilai True, sebuah `~models.transformer_2d.Transformer2DModelOutput` akan dikembalikan, selain itu sebuah `tuple` biasa akan dikembalikan.

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

