# Ovis-Image

![concepts](https://github.com/AIDC-AI/Ovis-Image/blob/main/docs/imgs/ovis_image_case.png)

Ovis-Image هو نموذج لتوليد الصور من النص بحجم 7B محسّن خصيصًا لعرض النصوص عالية الجودة، مصمم للعمل بكفاءة تحت قيود حسابية صارمة.

[التقرير التقني الخاص بـ Ovis-Image](https://arxiv.org/abs/2511.22982) من مجموعة Alibaba، بقلم Guo-Hua Wang وLiangfu Cao وTianyu Cui وMinghao Fu وXiaohao Chen وPengxin Zhan وJianshan Zhao وLan Li وBowen Fu وJiaqi Liu وQing-Guo Chen.

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

*نقدّم Ovis-Image، وهو نموذج لتوليد الصور من النص بحجم 7B محسّن خصيصًا لعرض النص عالي الجودة، ومصمم للعمل بكفاءة تحت قيود حسابية صارمة. مبنيًا على إطار Ovis-U1 السابق الخاص بنا، يدمج Ovis-Image مُفكّكًا بصريًا يعتمد على الانتشار مع العمود الفقري متعدد الوسائط الأقوى Ovis 2.5، مستفيدًا من خط تدريب يركّز على النص يجمع بين التدريب المسبق على نطاق واسع وتحسينات ما بعد التدريب المصممة بعناية. وعلى الرغم من بنيته المدمجة، يحقق Ovis-Image أداءً في عرض النص يضاهي أداء النماذج المفتوحة الأكبر بكثير مثل Qwen-Image، ويقترب من الأنظمة المغلقة المصدر مثل Seedream وGPT4o. والأهم من ذلك، يبقى النموذج قابلًا للنشر على وحدة معالجة رسومية واحدة متطورة ذات ذاكرة معتدلة، مما يضيق الفجوة بين مستوى عرض النص الرائد والنشر العملي. تشير نتائجنا إلى أن دمج عمود فقري متعدد الوسائط قوي مع وصف تدريب مصمم بعناية ويركز على النص يكفي لتحقيق عرض ثنائي اللغة موثوق للنص دون اللجوء إلى نماذج ضخمة أو مملوكة.*

**أبرز النقاط**:

*   **عرض قوي للنصوص بمقياس مدمج قدره 7B**: نموذج Ovis-Image هو نموذج لتوليد الصور من النصوص بحجم 7B، ويقدّم جودة عرض للنصوص مماثلة لجودة الأنظمة الأكبر بكثير من فئة 20B مثل Qwen-Image، ويتنافس مع النماذج المغلقة الرائدة مثل GPT4o في السيناريوهات التي تركز على النصوص، مع بقاء حجمه صغيرًا بما يكفي للتشغيل على أجهزة متاحة على نطاق واسع.
*   **دقة عالية في الأوامر التي تعتمد على النصوص والحساسة للتخطيط**: يتفوق النموذج في الأوامر التي تتطلب توافقًا دقيقًا بين المحتوى اللغوي والخطوط المُصغَّرة (مثل الملصقات، واللوحات الإعلانية، والشعارات، والنماذج الأولية للواجهات، والمخططات المعلوماتية)، حيث ينتج نصوصًا واضحة القراءة، ومكتوبةً بإملاء صحيح، ومتسقةً دلاليًا عبر خطوط وأحجام ونسب أبعاد متنوعة دون المساس بالجودة البصرية الإجمالية.
*   **الكفاءة وقابلية النشر**: بفضل ميزانية 7B من المعاملات ومعماريته المبسطة، يتناسب نموذج Ovis-Image مع وحدة معالجة رسومية واحدة من الطراز العالي ذاكرة معتدلة، ويدعم الاستخدام التفاعلي منخفض الكمون، ويتوسع ليخدم الإنتاج على دفعات، مما يجلب عرض نصوص قريب من مستوى الطليعة إلى التطبيقات التي لا يكون فيها استخدام نماذج بمعايير تصل إلى عشرات المليارات عملياً.

تمت مساهمة خط المعالجة هذا من فريق Ovis-Image. يمكن العثور على قاعدة الكود الأصلية [هنا](https://github.com/AIDC-AI/Ovis-Image).

النماذج المتاحة:

| النموذج | نوع البيانات الموصى به |
|:-----:|:-----------------:|
| [`AIDC-AI/Ovis-Image-7B`](https://huggingface.co/AIDC-AI/Ovis-Image-7B) | `torch.bfloat16` |

راجع [هذه](https://huggingface.co/collections/AIDC-AI/ovis-image) المجموعة لمزيد من المعلومات.

## OvisImagePipeline[[diffusers.OvisImagePipeline]]

#### diffusers.OvisImagePipeline[[diffusers.OvisImagePipeline]]

```python
diffusers.OvisImagePipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: Qwen3Model, tokenizer: Qwen2Tokenizer, transformer: OvisImageTransformer2DModel)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ovis_image/pipeline_ovis_image.py#L129)

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

transformer ([OvisImageTransformer2DModel](/docs/diffusers/v0.43.0/ar/api/models/ovisimage_transformer2d#diffusers.OvisImageTransformer2DModel)) : معمارية Transformer الشرطية (MMDiT) لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/v0.43.0/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : مُجدوِل يُستخدم بالاقتران مع `transformer` لإزالة الضوضاء من كامنات الصورة المُرمَّزة.

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ar/api/models/autoencoderkl#diffusers.AutoencoderKL)) : نموذج الترميز التحويلي التبايني (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.

text_encoder (`Qwen3Model`) : مُشفِّر النص من الفئة [Qwen3Model](https://huggingface.co/docs/transformers/en/model_doc/qwen3#transformers.Qwen3Model).

tokenizer (`Qwen2TokenizerFast`) : مُجزِّئ من الفئة [Qwen2TokenizerFast](https://huggingface.co/docs/transformers/en/model_doc/qwen2#transformers.Qwen2TokenizerFast).

خط أنابيب Ovis-Image لتوليد الصور من النص.

مرجع: https://github.com/AIDC-AI/Ovis-Image

#### __call__[[diffusers.OvisImagePipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, negative_prompt: str | list[str] = '', guidance_scale: float = 5.0, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, sigmas: list[float] | None = None, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 256)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ovis_image/pipeline_ovis_image.py#L457)

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

prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير `prompt_embeds` بدلاً من ذلك.

negative_prompt (`str` أو `list[str]`، *اختياري*) : الأمر أو الأوامر التي لا ينبغي أن توجه توليد الصورة. إذا لم يُعرَّف، يجب تمرير `negative_prompt_embeds` بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يُتجاهل إذا لم يكن `guidance_scale` أكبر من `1`).

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 1.0) : يتم تفعيل التوجيه الحر من التصنيف (مقياس التوجيه) عندما يكون `guidance_scale` > 1 ويتم توفير `negative_prompt`.

height (`int`، *اختياري*، الافتراضي هو self.unet.config.sample_size * self.vae_scale_factor) : ارتفاع الصورة المولّدة بالبكسلات. يتم ضبطه على 1024 افتراضيًا للحصول على أفضل النتائج.

width (`int`، *اختياري*، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) : عرض الصورة المولدة بالبكسلات. يتم ضبطه على 1024 افتراضيًا للحصول على أفضل النتائج.

num_inference_steps (`int`، *اختياري*، القيمة الافتراضية 50) : عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال.

sigmas (`list[float]`، *اختياري*) : قيم `sigmas` مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل `sigmas` في طريقة `set_timesteps` الخاصة بهم. إذا لم تُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير `num_inference_steps`.

num_images_per_prompt (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الصور التي سيتم توليدها لكل موجه.

generator (`torch.Generator` أو `list[torch.Generator]`، *اختياري*) : مولّد واحد أو قائمة من [مولّدات torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل التوليد حتميًا.

latents (`torch.FloatTensor`، *اختياري*) : كامنات ضجيج مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، فسيتم إنشاء كامنات من خلال الاستخراج باستخدام `generator` العشوائي المُقدَّم.

prompt_embeds (`torch.FloatTensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.FloatTensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال `negative_prompt`.

output_type (`str`، *اختياري*، القيمة الافتراضية `"pil"`) : صيغة الصورة الناتجة عن عملية التوليد. اختر بين [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` أو `np.array`.

return_dict (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان يجب إرجاع `~pipelines.flux.FluxPipelineOutput` بدلاً من tuple عادي.

joint_attention_kwargs (`dict`، *اختياري*) : قاموس kwargs يُمرَّر إلى `AttentionProcessor` إذا تم تحديده، كما هو معرَّف تحت `self.processor` في [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

callback_on_step_end (`Callable`، *اختياري*) : دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. سيتضمن `callback_kwargs` قائمة بجميع المصفوفات كما حددتها `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`List`، *اختياري*) : قائمة مدخلات المصفوفات (tensors) لدالة `callback_on_step_end`. سيتم تمرير المصفوفات المحددة في القائمة كحجة `callback_kwargs`. لن تتمكن من تضمين سوى المتغيرات المدرجة في خاصية `._callback_tensor_inputs` لفئة خط الأنابيب (pipeline) الخاص بك.

max_sequence_length (`int` الافتراضي 512) : أقصى طول تسلسل يُستخدم مع `prompt`.

**يعيد:** [OvisImagePipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/ovis_image#diffusers.pipelines.ovis_image.OvisImagePipelineOutput) أو `tuple`

[OvisImagePipelineOutput](/docs/diffusers/v0.43.0/ar/api/pipelines/ovis_image#diffusers.pipelines.ovis_image.OvisImagePipelineOutput) إذا كان `return_dict` صحيحًا، وإلا فسيكون `tuple`. عند إرجاع tuple، يكون العنصر الأول قائمة تحتوي على الصور المولّدة.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:
```py
>>> import torch
>>> from diffusers import OvisImagePipeline

>>> pipe = OvisImagePipeline.from_pretrained("AIDC-AI/Ovis-Image-7B", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = 'A creative 3D artistic render where the text "OVIS-IMAGE" is written in a bold, expressive handwritten brush style using thick, wet oil paint. The paint is a mix of vibrant rainbow colors (red, blue, yellow) swirling together like toothpaste or impasto art. You can see the ridges of the brush bristles and the glossy, wet texture of the paint. The background is a clean artist's canvas. Dynamic lighting creates soft shadows behind the floating paint strokes. Colorful, expressive, tactile texture, 4k detail.'
>>> image = pipe(prompt, negative_prompt="", num_inference_steps=50, guidance_scale=5.0).images[0]
>>> image.save("ovis_image.png")
```

#### encode_prompt[[diffusers.OvisImagePipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, max_sequence_length: int = 256, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ovis_image/pipeline_ovis_image.py#L269)

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

prompt (`str` أو `list[str]`، *اختياري*) : النص الذي سيتم ترميزه

negative_prompt (`str` أو `list[str]`، *اختياري*) : الموجه أو الموجهات التي لا ينبغي توجيه توليد الصورة بها. يُستخدم فقط عندما يكون `do_classifier_free_guidance` هو `True`. إذا لم يُعرَّف، يُستخدم نص فارغ.

do_classifier_free_guidance (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم ترميز `negative_prompt` أيضًا للإرشاد الحر للمصنّف.

device : (`torch.device`): جهاز torch

num_images_per_prompt (`int`) : عدد الصور التي يجب توليدها لكل موجه

max_sequence_length (`int`، *اختياري*، القيمة الافتراضية 256) : الحد الأقصى لطول التسلسل المستخدم لـ `prompt`.

prompt_embeds (`torch.FloatTensor`، *اختياري*) : تمثيلات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، *مثلًا* وزن الأوامر. إذا لم تُقدَّم، فسيتم توليد تمثيلات النص من معامل الإدخال `prompt`.

negative_prompt_embeds (`torch.FloatTensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. إذا لم تُقدَّم، فستُولَّد من `negative_prompt`.

## OvisImagePipelineOutput[[diffusers.pipelines.ovis_image.OvisImagePipelineOutput]]

#### diffusers.pipelines.ovis_image.OvisImagePipelineOutput[[diffusers.pipelines.ovis_image.OvisImagePipelineOutput]]

```python
diffusers.pipelines.ovis_image.OvisImagePipelineOutput(images: list[PIL.Image.Image, numpy.ndarray])
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ovis_image/pipeline_output.py#L24)

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

images (`list[PIL.Image.Image]` أو `np.ndarray`) : قائمة من صور PIL منزوعة الضوضاء بطول `batch_size` أو مصفوفة numpy بأبعاد `(batch_size, height, width, num_channels)`. تمثل صور PIL أو مصفوفة numpy صورًا منزوعة الضوضاء من خط أنابيب الانتشار.

فئة الإخراج لخطوط أنابيب Ovis-Image.

