# OmniGenTransformer2DModel

نموذج Transformer يقبل تعليمات متعددة الوسائط لتوليد صور لـ [OmniGen](https://github.com/VectorSpaceLab/OmniGen/).

ملخص الورقة البحثية هو:

*أدى ظهور نماذج اللغة الكبيرة (LLMs) إلى توحيد مهام توليد اللغة وقلب موازين التفاعل بين الإنسان والآلة. ومع ذلك، في مجال توليد الصور، لا يزال النموذج الموحّد القادر على التعامل مع مهام متنوعة ضمن إطار عمل واحد غير مستكشف إلى حد كبير. في هذا العمل، نعرّف OmniGen، وهو نموذج انتشار جديد لتوليد الصور الموحّد. يتسم OmniGen بالخصائص التالية: 1) التوحيد: لا يُظهر OmniGen قدرات توليد الصور من النص فحسب، بل يدعم بشكل جوهري مهامًا لاحقة متنوعة، مثل تحرير الصور، والتوليد الموجّه بالموضوع، والتوليد الشرطي البصري. 2) البساطة: البنية المعمارية لـ OmniGen مبسطة للغاية، مما يلغي الحاجة إلى إضافات خارجية. علاوة على ذلك، مقارنةً بنماذج الانتشار الحالية، فهو أكثر سهولة في الاستخدام، ويمكنه إكمال المهام المعقدة من البداية إلى النهاية عبر التعليمات دون الحاجة إلى خطوات وسيطة إضافية، مما يبسّط بشكل كبير سير عمل توليد الصور. 3) نقل المعرفة: بفضل التعلم في صيغة موحدة، ينقل OmniGen المعرفة بفعالية عبر مهام مختلفة، ويتعامل مع المهام والمجالات غير المرئية، ويعرض قدرات جديدة. كما نستكشف قدرات الاستدلال للنموذج والتطبيقات المحتملة لآلية سلسلة الأفكار. يمثل هذا العمل المحاولة الأولى لنموذج توليد صور عام، وسننشر مواردنا على https://github.com/VectorSpaceLab/OmniGen لتعزيز التطورات المستقبلية.*

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_omnigen.py#L283)

**المعاملات:**

in_channels (`int`، القيمة الافتراضية `4`) : عدد القنوات في المدخلات.

patch_size (`int`، القيمة الافتراضية `2`) : حجم البقع المكانية المستخدمة في طبقة تضمين البقع.

hidden_size (`int`، القيمة الافتراضية `3072`) : بُعد الطبقات المخفية في النموذج.

rms_norm_eps (`float`، القيمة الافتراضية `1e-5`) : قيمة Eps لطبقة RMSNorm.

num_attention_heads (`int`، القيمة الافتراضية `32`) : عدد الرؤوس المستخدمة في الانتباه متعدد الرؤوس.

num_key_value_heads (`int`، القيمة الافتراضية `32`) : عدد الرؤوس المستخدمة للمفاتيح والقيم في الانتباه متعدد الرؤوس.

intermediate_size (`int`، القيمة الافتراضية `8192`) : بُعد الطبقة المخفية في طبقات FeedForward.

num_layers (`int`، الافتراضي `32`) : عدد طبقات كتل التحويل (transformer blocks) المستخدمة.

pad_token_id (`int`، الافتراضي `32000`) : المعرّف (id) لرمز الحشو (padding token).

vocab_size (`int`، القيمة الافتراضية `32064`) : حجم مفردات التضمين.

rope_base (`int`، القيمة الافتراضية هي `10000`) : القيمة الافتراضية لثيتا (theta) المستخدمة عند إنشاء RoPE.

rope_scaling (`dict`, اختياري) : عوامل التوسيع الخاصة بـ RoPE. يجب أن تحتوي على `short_factor` و`long_factor`.

pos_embed_max_size (`int`، الافتراضي `192`) : الحد الأقصى لحجم التضمينات الموضعية.

time_step_dim (`int`، القيمة الافتراضية `256`) : بُعد المخرجات لتضمينات خطوة الزمن.

flip_sin_to_cos (`bool`، الافتراضي `True`) : ما إذا كان يجب عكس sin و cos في التضمينات الموضعية عند إعداد تضمينات خطوة الزمن.

downscale_freq_shift (`int`، الافتراضي `0`) : إزاحة التردد المستخدمة عند تصغير تضمينات خطوات الزمن.

timestep_activation_fn (`str`، الافتراضي `silu`) : دالة التنشيط المستخدمة لتضمينات خطوة الزمن.

نموذج Transformer الذي تم تقديمه في 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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_omnigen.py#L407)

**المعاملات:**

hidden_states (`torch.Tensor` من الشكل `(batch_size, in_channels, height, width)`) : مدخلات `hidden_states`.

timestep (`torch.LongTensor`) : يُستخدم للإشارة إلى خطوة إزالة الضوضاء.

input_ids (`torch.Tensor`) : معرّفات رموز نصية متعددة الوسائط تُستخدم كشرط.

input_img_latents (`list` من `torch.Tensor`) : قائمة بالمتغيرات الكامنة (latents) للصور المدخلة المستخدمة كشرط.

input_image_sizes (`dict` من `int` إلى `list` من `int`) : تعيين من فهرس العينة إلى المواضع التي يجب وضع تضمينات صورة الإدخال فيها ضمن تسلسل الشرط.

attention_mask (`torch.Tensor`) : قناع الانتباه (Attention mask) للتسلسل متعدد الوسائط المشترك.

position_ids (`torch.Tensor`) : معرّفات المواقع المستخدمة لحساب التضمينات الموضعية.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع `~models.transformer_2d.Transformer2DModelOutput` بدلاً من tuple عادي.

**يعيد:** `~models.transformer_2d.Transformer2DModelOutput` أو `tuple`

إذا كان `return_dict` صحيحًا، يُعاد `~models.transformer_2d.Transformer2DModelOutput`، وإلا يُعاد `tuple` عادي.

طريقة [OmniGenTransformer2DModel](/docs/diffusers/v0.43.0/ar/api/models/omnigen_transformer#diffusers.OmniGenTransformer2DModel) الأمامية.

