Diffusers documentation

PixArt-Σ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

PixArt-Σ

PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation من تأليف 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 وجميع نقاط التفتيش المتاحة في PixArt-alpha.

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

  • يستخدم عمودًا من نوع Transformer (بدلًا من UNet) لإزالة الضوضاء. وبذلك، فهو يملك بنية معمارية مشابهة لبنية DiT.
  • تم تدريبه باستخدام شروط نصية محسوبة من T5. يجعل هذا الجانب خط الأنابيب أفضل في اتباع الأوامر النصية المعقدة التي تتضمن تفاصيل دقيقة.
  • يتميز بقدرته على إنتاج صور عالية الدقة بنسب أبعاد مختلفة. للحصول على أفضل النتائج، يوصي المؤلفون ببعض نطاقات الأحجام التي يمكن العثور عليها هنا.
  • يتساوى في الجودة مع أنظمة توليد الصور من النص المتقدمة (حتى تاريخ كتابة هذا النص) مثل PixArt-α وStable Diffusion XL وPlayground V2.0 وDALL-E 3، مع كونه أكثر كفاءة منها.
  • يُظهر القدرة على توليد صور بدقة فائقة عالية، مثل 2048 بكسل أو حتى 4K.
  • يُظهر ذلك أن نماذج النص إلى صورة يمكن أن تنمو من نموذج ضعيف إلى نموذج أقوى من خلال عدة تحسينات (مثل VAEs ومجموعات البيانات وما إلى ذلك.)

تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.

يمكنك تحسين جودة التوليد بشكل أكبر عن طريق تمرير الصورة المولّدة من PixArtSigmaPipeline إلى نموذج SDXL refiner.

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

شغّل PixArtSigmaPipeline باستخدام أقل من 8 جيجابايت من ذاكرة GPU VRAM عن طريق تحميل مُشفّر النص بدقة 8 بت. دعونا نستعرض مثالًا كاملًا.

أولاً، ثبّت مكتبة bitsandbytes:

pip install -U bitsandbytes

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

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 لتشفير موجه:

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:

import gc

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

del text_encoder
del pipe
flush()

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

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()

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

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

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")

من خلال حذف المكونات التي لا تستخدمها وإفراغ ذاكرة الفيديو (VRAM) الخاصة بوحدة المعالجة الرسومية (GPU)، يجب أن تتمكن من تشغيل PixArtSigmaPipeline باستخدام أقل من 8 جيجابايت من ذاكرة الفيديو (VRAM) للوحدة الرسومية.

إذا كنت ترغب في الحصول على تقرير لاستهلاك الذاكرة، فقم بتشغيل هذا السكربت.

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

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

PixArtSigmaPipeline

فئة diffusers.PixArtSigmaPipeline

< >

( tokenizer: T5Tokenizertext_encoder: T5EncoderModelvae: AutoencoderKLtransformer: PixArtTransformer2DModelscheduler: KarrasDiffusionSchedulers )

المعاملات

  • vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
  • text_encoder (T5EncoderModel) — مُشفِّر نص ثابت. يستخدم PixArt-Alpha T5، وتحديداً النسخة t5-v1_1-xxl.
  • tokenizer (T5Tokenizer) — مُقسِّم من الفئة T5Tokenizer.
  • transformer (PixArtTransformer2DModel) — نموذج PixArtTransformer2DModel مشروط بالنص لإزالة الضوضاء من كامنات الصورة المُرمّزة. نُشر في الأصل باسم Transformer2DModel في الإعدادات، لكن يمكن تجاهل عدم التطابق.
  • scheduler (SchedulerMixin) — مجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

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

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

__call__

< >

( prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 20timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 4.5num_images_per_prompt: int | None = 1height: int | None = Nonewidth: int | None = Noneeta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Trueuse_resolution_binning: bool = Truemax_sequence_length: int = 300**kwargs ) → ImagePipelineOutput or tuple

المعاملات

  • 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. يُعرَّف guidance_scale على أنه w من المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين 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، وسيتم تجاهله في الحالات الأخرى.
  • generator (torch.Generator أو list[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم توليد كائن latents عن طريق الاستخراج باستخدام 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: 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 أو tuple

إذا كان return_dict هو True، يُعاد ImagePipelineOutput، وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة

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

أمثلة:

>>> 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

< >

( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 300**kwargs )

المعاملات

  • 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) — أقصى طول تسلسل يُستخدم للموجّه.

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

Update on GitHub