# PixArt-Σ

![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/pixart/header_collage_sigma.jpg)

[PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation](https://huggingface.co/papers/2403.04692) من تأليف Junsong Chen وJincheng Yu وChongjian Ge وLewei Yao وEnze Xie وYue Wu وZhongdao Wang وJames Kwok وPing Luo وHuchuan Lu وZhenguo Li.

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

*في هذه الورقة، نعرّف PixArt-Σ، وهو نموذج تحويل انتشار (DiT) قادر على توليد الصور مباشرةً بدقة 4K. يمثل PixArt-Σ تقدماً كبيراً على سلفه PixArt-α، حيث يوفر صوراً بدقة أعلى بشكل ملحوظ ومواءمة محسّنة مع أوامر النص. إحدى الميزات الرئيسية لـ PixArt-Σ هي كفاءة التدريب. بالاستفادة من التدريب المسبق التأسيسي لـ PixArt-α، يتطور من خط الأساس “الأضعف” إلى نموذج “أقوى” من خلال دمج بيانات ذات جودة أعلى، وهي عملية نسميها “التدريب من الضعيف إلى القوي”. تتجلى التطورات في PixArt-Σ في جانبين: (1) بيانات تدريب عالية الجودة: يدمج PixArt-Σ بيانات صور بجودة أعلى، مقترنة بوصفات صور أكثر دقة وتفاصيل. (2) ضغط رموز فعال: نقترح وحدة انتباه جديدة ضمن إطار DiT تضغط المفاتيح والقيم معاً، مما يحسّن الكفاءة بشكل كبير ويسهّل توليد الصور فائقة الدقة. بفضل هذه التحسينات، يحقق PixArt-Σ جودة صورة فائقة وقدرة على الالتزام بأوامر المستخدم بحجم نموذج أصغر بكثير (0.6 مليار معامل) مقارنةً بنماذج انتشار النص إلى الصورة الحالية، مثل SDXL (2.6 مليار معامل) و SD Cascade (5.1 مليار معامل). علاوة على ذلك، يدعم قدرة PixArt-Σ على توليد صور بدقة 4K إنشاء ملصقات وجدران خلفية عالية الدقة، مما يعزز بكفاءة إنتاج المحتوى البصري عالي الجودة في صناعات مثل الأفلام والألعاب.*

يمكنك العثور على قاعدة الأكواد الأصلية في [PixArt-alpha/PixArt-sigma](https://github.com/PixArt-alpha/PixArt-sigma) وجميع نقاط التفتيش المتاحة في [PixArt-alpha](https://huggingface.co/PixArt-alpha).

بعض الملاحظات حول هذا الخط:

* يستخدم عمودًا من نوع Transformer (بدلًا من UNet) لإزالة الضوضاء. وبذلك، فهو يملك بنية معمارية مشابهة لبنية [DiT](https://hf.co/docs/transformers/model_doc/dit).
* تم تدريبه باستخدام شروط نصية محسوبة من T5. يجعل هذا الجانب خط الأنابيب أفضل في اتباع الأوامر النصية المعقدة التي تتضمن تفاصيل دقيقة.
* يتميز بقدرته على إنتاج صور عالية الدقة بنسب أبعاد مختلفة. للحصول على أفضل النتائج، يوصي المؤلفون ببعض نطاقات الأحجام التي يمكن العثور عليها [هنا](https://github.com/PixArt-alpha/PixArt-sigma/blob/master/diffusion/data/datasets/utils.py).
* يتساوى في الجودة مع أنظمة توليد الصور من النص المتقدمة (حتى تاريخ كتابة هذا النص) مثل PixArt-α وStable Diffusion XL وPlayground V2.0 وDALL-E 3، مع كونه أكثر كفاءة منها.
* يُظهر القدرة على توليد صور بدقة فائقة عالية، مثل 2048 بكسل أو حتى 4K.
* يُظهر ذلك أن نماذج النص إلى صورة يمكن أن تنمو من نموذج ضعيف إلى نموذج أقوى من خلال عدة تحسينات (مثل VAEs ومجموعات البيانات وما إلى ذلك.)

> [!TIP]
> تأكد من الاطلاع على [دليل المجدولين](../../using-diffusers/schedulers) لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم [إعادة استخدام المكونات عبر خطوط الأنابيب](../../using-diffusers/loading#reusing-models-in-multiple-pipelines) لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.

> [!TIP]
> يمكنك تحسين جودة التوليد بشكل أكبر عن طريق تمرير الصورة المولّدة من [PixArtSigmaPipeline](/docs/diffusers/main/ar/api/pipelines/pixart_sigma#diffusers.PixArtSigmaPipeline) إلى نموذج [SDXL refiner](./stable_diffusion/stable_diffusion_xl#base-to-refiner-model).

## الاستدلال باستخدام ذاكرة GPU أقل من 8GB

شغّل [PixArtSigmaPipeline](/docs/diffusers/main/ar/api/pipelines/pixart_sigma#diffusers.PixArtSigmaPipeline) باستخدام أقل من 8 جيجابايت من ذاكرة GPU VRAM عن طريق تحميل مُشفّر النص بدقة 8 بت. دعونا نستعرض مثالًا كاملًا.

أولاً، ثبّت مكتبة [bitsandbytes](https://github.com/TimDettmers/bitsandbytes):

```bash
pip install -U bitsandbytes
```

ثم حمّل مُشفِّر النص بدقة 8 بت:

```python
from transformers import T5EncoderModel
from diffusers import PixArtSigmaPipeline
import torch

text_encoder = T5EncoderModel.from_pretrained(
    "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
    subfolder="text_encoder",
    load_in_8bit=True,
    device_map="auto",
)
pipe = PixArtSigmaPipeline.from_pretrained(
    "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
    text_encoder=text_encoder,
    transformer=None,
    device_map="balanced"
)
```

الآن، استخدم `pipe` لتشفير موجه:

```python
with torch.no_grad():
    prompt = "cute cat"
    prompt_embeds, prompt_attention_mask, negative_embeds, negative_prompt_attention_mask = pipe.encode_prompt(prompt)
```

بما أن تمثيلات النص (Embeddings) قد تم حسابها، احذف `text_encoder` و`pipe` من الذاكرة، وأطلق بعض ذاكرة GPU:

```python
import gc

def flush():
    gc.collect()
    torch.cuda.empty_cache()

del text_encoder
del pipe
flush()
```

ثم احسب الكمونيات باستخدام تضمينات الموجه كمدخلات:

```python
pipe = PixArtSigmaPipeline.from_pretrained(
    "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
    text_encoder=None,
    dtype=torch.float16,
).to("cuda")  # or "mps", "xpu", "cpu"

latents = pipe(
    negative_prompt=None,
    prompt_embeds=prompt_embeds,
    negative_prompt_embeds=negative_embeds,
    prompt_attention_mask=prompt_attention_mask,
    negative_prompt_attention_mask=negative_prompt_attention_mask,
    num_images_per_prompt=1,
    output_type="latent",
).images

del pipe.transformer
flush()
```

> [!TIP]
> لاحظ أنه عند تهيئة `pipe`، تقوم بإعداد `text_encoder` ليكون `None` حتى لا يتم تحميله.

بمجرد حساب الكمونيات، مررها إلى VAE لتفكيكها إلى صورة حقيقية:

```python
with torch.no_grad():
    image = pipe.vae.decode(latents / pipe.vae.config.scaling_factor, return_dict=False)[0]
image = pipe.image_processor.postprocess(image, output_type="pil")[0]
image.save("cat.png")
```

من خلال حذف المكونات التي لا تستخدمها وإفراغ ذاكرة GPU VRAM، يجب أن تتمكن من تشغيل [PixArtSigmaPipeline](/docs/diffusers/main/ar/api/pipelines/pixart_sigma#diffusers.PixArtSigmaPipeline) باستخدام أقل من 8GB من ذاكرة GPU VRAM.

![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/pixart/8bits_cat.png)

إذا كنت ترغب في الحصول على تقرير لاستهلاك الذاكرة، فقم بتشغيل هذا [السكربت](https://gist.github.com/sayakpaul/3ae0f847001d342af27018a96f467e4e).

> [!WARNING]
> يمكن أن تؤثر تضمينات النص المحسوبة بدقة 8 بت على جودة الصور المولّدة بسبب فقدان المعلومات في فضاء التمثيل الناتج عن تقليل الدقة. يُوصى بمقارنة المخرجات مع وبدون استخدام 8 بت.

عند تحميل `text_encoder`، قمت بتعيين `load_in_8bit` إلى `True`. يمكنك أيضاً تحديد `load_in_4bit` لتقليل متطلبات الذاكرة بشكل أكبر إلى أقل من 7 جيجابايت.

## PixArtSigmaPipeline[[diffusers.PixArtSigmaPipeline]]

#### diffusers.PixArtSigmaPipeline[[diffusers.PixArtSigmaPipeline]]

```python
diffusers.PixArtSigmaPipeline(tokenizer: T5Tokenizer, text_encoder: T5EncoderModel, vae: AutoencoderKL, transformer: PixArtTransformer2DModel, scheduler: KarrasDiffusionSchedulers)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py#L185)

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

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

text_encoder (`T5EncoderModel`) : مُشفِّر نص ثابت. يستخدم PixArt-Alpha [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel)، وتحديداً النسخة [t5-v1_1-xxl](https://huggingface.co/PixArt-alpha/PixArt-alpha/tree/main/t5-v1_1-xxl).

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

transformer ([PixArtTransformer2DModel](/docs/diffusers/main/ar/api/models/pixart_transformer2d#diffusers.PixArtTransformer2DModel)) : نموذج `PixArtTransformer2DModel` مشروط بالنص لإزالة الضوضاء من كامنات الصورة المُرمّزة. نُشر في الأصل باسم [`Transformer2DModel`](https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS/blob/main/transformer/config.json#L2) في الإعدادات، لكن يمكن تجاهل هذا الاختلاف.

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

خط أنابيب لتوليد الصور من النص باستخدام PixArt-Sigma.

يرث هذا النموذج من [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

#### __call__[[diffusers.PixArtSigmaPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, negative_prompt: str = '', num_inference_steps: int = 20, timesteps: list[int] = None, sigmas: list[float] = None, guidance_scale: float = 4.5, num_images_per_prompt: int | None = 1, height: int | None = None, width: int | None = None, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1, clean_caption: bool = True, use_resolution_binning: bool = True, max_sequence_length: int = 300, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py#L631)

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

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

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

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

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

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

guidance_scale (`float`، *اختياري*، القيمة الافتراضية 4.5) : مقياس التوجيه كما هو مُعرَّف في [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). يُعرَّف `guidance_scale` على أنه `w` من المعادلة 2. في [Imagen Paper](https://huggingface.co/papers/2205.11487). يتم تفعيل مقياس التوجيه عن طريق تعيين `guidance_scale > 1`. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بنص `prompt`، وعادةً على حساب انخفاض جودة الصورة.

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

height (`int`، *اختياري*، الافتراضي هو self.unet.config.sample_size) : ارتفاع الصورة المولّدة بالبكسل.

width (`int`، *اختياري*، الافتراضي هو self.unet.config.sample_size) : عرض الصورة المولدة بالبكسل.

eta (`float`، *اختياري*، القيمة الافتراضية 0.0) : يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على [schedulers.DDIMScheduler](/docs/diffusers/main/ar/api/schedulers/ddim#diffusers.DDIMScheduler)، وسيتم تجاهله في الحالات الأخرى.

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

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

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

prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع انتباه مُولّد مسبقًا لتضمينات النص.

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

negative_prompt_attention_mask (`torch.Tensor`، *اختياري*) : قناع انتباه مُولّد مسبقًا لتضمينات النصوص السلبية.

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

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

callback (`Callable`، *اختياري*) : دالة ستُستدعى كل `callback_steps` خطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية: `callback(step: int, timestep: int, latents: torch.Tensor)`.

callback_steps (`int`، *اختياري*، القيمة الافتراضية 1) : التكرار الذي تُستدعى فيه دالة `callback`. إذا لم يتم تحديده، فستُستدعى الدالة في كل خطوة.

clean_caption (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيت `beautifulsoup4` و`ftfy`. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام.

use_resolution_binning (`bool` الافتراضي هو `True`) : إذا تم ضبطه على `True`، فإن الارتفاع والعرض المطلوبين يُخضعان أولاً للتحويل إلى أقرب دقة باستخدام `ASPECT_RATIO_1024_BIN`. بعد فك ترميز الكمّيات الناتجة إلى صور، يتم تغيير حجمها مرة أخرى إلى الدقة المطلوبة. مفيد لتوليد صور غير مربعة.

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

**يعيد:** [ImagePipelineOutput](/docs/diffusers/main/ar/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) أو `tuple`

إذا كان `return_dict` هو `True`، يُعاد [ImagePipelineOutput](/docs/diffusers/main/ar/api/pipelines/consistency_models#diffusers.ImagePipelineOutput)، وإلا يُعاد `tuple` يكون عنصره الأول قائمة بالصور المولّدة

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

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

>>> # You can replace the checkpoint id with "PixArt-alpha/PixArt-Sigma-XL-2-512-MS" too.
>>> pipe = PixArtSigmaPipeline.from_pretrained(
...     "PixArt-alpha/PixArt-Sigma-XL-2-1024-MS", torch_dtype=torch.float16
... )
>>> # Enable memory optimizations.
>>> # pipe.enable_model_cpu_offload()

>>> prompt = "A small cactus with a happy face in the Sahara desert."
>>> image = pipe(prompt).images[0]
```

#### encode_prompt[[diffusers.PixArtSigmaPipeline.encode_prompt]]

```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str = '', num_images_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, clean_caption: bool = False, max_sequence_length: int = 300, **kwargs)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py#L247)

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

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

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

do_classifier_free_guidance (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم استخدام classifier free guidance أم لا

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

device : (`torch.device`, *اختياري*): جهاز torch لوضع التضمينات الناتجة عليه

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

negative_prompt_embeds (`torch.Tensor`، *اختياري*) : تمثيلات نصية سالبة مُولّدة مسبقًا. بالنسبة إلى PixArt-Alpha، يجب أن تكون تمثيلات السلسلة "".

clean_caption (`bool`، القيمة الافتراضية `False`) : إذا كانت `True`، سيقوم الدالة بمعالجة الوصف المقدم وتنظيفه قبل الترميز.

max_sequence_length (`int`، القيمة الافتراضية 300) : أقصى طول تسلسل يُستخدم للموجّه.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

