Diffusers documentation

VQDiffusionScheduler

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

VQDiffusionScheduler

VQDiffusionScheduler يحوّل مخرجات نموذج الترانسفورمر إلى عينة لصورة غير مُضجِمة عند خطوة الانتشار السابقة. وقد تم تقديمه في Vector Quantized Diffusion Model for Text-to-Image Synthesis بواسطة Shuyang Gu وDong Chen وJianmin Bao وFang Wen وBo Zhang وDongdong Chen وLu Yuan وBaining Guo.

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

نقدّم نموذج الانتشار الكميّ المتجهي (VQ-Diffusion) لتوليد الصور من النص. يعتمد هذا الأسلوب على ترميز ذاتي تبايني كميّ متجهي (VQ-VAE) يُنمذج فضاءه الكامن بواسطة نسخة شرطية من نموذج الاحتمالات الانتشارية لإزالة الضوضاء (DDPM) الذي طُوّر مؤخراً. وجدنا أن أسلوب الفضاء الكامن هذا مناسب بشكل جيد لمهام توليد الصور من النص، لأنه لا يزيل فقط التحيز أحادي الاتجاه الموجود في الأساليب الحالية، بل يتيح لنا أيضاً دمج استراتيجية الانتشار بالإخفاء والاستبدال لتجنب تراكم الأخطاء، وهو مشكلة خطيرة في الأساليب الحالية. تُظهر تجاربنا أن VQ-Diffusion ينتج نتائج أفضل بكثير لتوليد الصور من النص عند مقارنته بنماذج التوليد الذاتي (AR) التقليدية ذات عدد معاملات مماثل. مقارنةً بأساليب توليد الصور من النص القائمة على GAN سابقاً، يمكن لـ VQ-Diffusion لدينا التعامل مع مشاهد أكثر تعقيداً وتحسين جودة الصور المُصنَّعة بفارق كبير. أخيراً، نُظهر أن حساب توليد الصور في أسلوبنا يمكن أن يكون فعالاً للغاية عن طريق إعادة التمثيل. في الأساليب التقليدية AR، يزداد زمن توليد الصور من النص خطياً مع دقة الصورة الناتجة، وبالتالي يكون استهلاكاً كبيراً للوقت حتى للصور ذات الحجم العادي. يتيح لنا VQ-Diffusion تحقيق توازن أفضل بين الجودة والسرعة. تشير تجاربنا إلى أن نموذج VQ-Diffusion مع إعادة التمثيل أسرع بخمسة عشر مرة من الأساليب التقليدية AR مع تحقيق جودة صورة أفضل.

VQDiffusionScheduler

فئة diffusers.VQDiffusionScheduler

< >

( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )

المعاملات

  • num_vec_classes (int) — عدد فئات التضمينات المتجهية للبيكسلات الكامنة. يتضمن فئة البيكسل الكامن المقنّع.
  • num_train_timesteps (int، القيمة الافتراضية 100) — عدد خطوات الانتشار (diffusion) لتدريب النموذج.
  • alpha_cum_start (float، القيمة الافتراضية 0.99999) — قيمة ألفا التراكمية الابتدائية.
  • alpha_cum_end (float، القيمة الافتراضية 0.000009) — القيمة التراكمية النهائية لـ alpha.
  • gamma_cum_start (float، القيمة الافتراضية 0.000009) — القيمة التراكمية الأولية لـ gamma.
  • gamma_cum_end (float، القيمة الافتراضية 0.99999) — قيمة غاما التراكمية النهائية.

جدولة لانتشار الكمّ المتجهي.

يرث هذا النموذج من SchedulerMixin و ConfigMixin. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدوليات الوقت مثل التحميل والحفظ.

apply_cumulative_transitions

< >

( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

المعاملات

  • q (torch.Tensor من الشكل (batch size, num classes - 1, num latent pixels)) — احتمالات السجل (log probabilities) لفئات بكسلات الكاميرا الكامنة غير المقنّعة.
  • t (int أو torch.Tensor) — خطوة الزمن التي تحدد أي مصفوفة انتقال تراكمية ستُستخدم.

يعيد

torch.Tensor من الشكل (batch size, num classes, num latent pixels)

احتمالات السجلات المُحوَّلة مع احتمالات فئة القناع المُلحقة بها.

طبّق مصفوفة الانتقال التراكمية عند خطوة زمنية على الاحتمالات اللوغاريتمية للفئات غير المقنّعة.

log_Q_t_transitioning_to_known_class

< >

( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor

المعاملات

  • t (int أو torch.Tensor) — خطوة الزمن التي تحدد مصفوفة الانتقال المستخدمة.
  • x_t (torch.LongTensor من الشكل (batch size, num latent pixels)) — فئات كل بكسل كامن في الزمن t.
  • log_onehot_x_t (torch.Tensor من الشكل (batch size, num classes, num latent pixels)) — متجهات log one-hot الخاصة بـx_t.
  • cumulative (bool) — إذا كانت cumulative تساوي False، تُستخدم مصفوفة الانتقال لخطوة واحدة t-1->t. أما إذا كانت cumulative تساوي True، فتُستخدم مصفوفة الانتقال التراكمية 0->t.

يعيد

torch.Tensor

كل عمود في المصفوفة المُعادَة هو صف من احتمالات اللوغاريتمية لمصفوفة الانتقال الاحتمالية الكاملة. يكون شكل الموتر (batch size, num classes - 1, num latent pixels) عندما يكون cumulative هو True، ويكون شكله (batch size, num classes, num latent pixels) في الحالات الأخرى.

عند التراكم، يكون للمصفوفة صف أقل واحدًا لأن بكسل الحالة الكامنة الأولي لا يمكن إخفاؤه.

حيث:

  • q_n هي توزيع الاحتمالات للعملية الأمامية للبيكسل الكامن رقم n.
  • C_0 هو فئة لتضمين بكسل كامن
  • C_k هي فئة البكسل الكامن المقنّع

النتيجة غير التراكمية (مع استبعاد اللوغاريتمات):

q_0(x_t | x_{t-1\} = C_0) ... q_n(x_t | x_{t-1\} = C_0) . . . . . . . . . q_0(x_t | x_{t-1\} = C_k) ... q_n(x_t | x_{t-1\} = C_k)`} lang="" wrap={false} />

النتيجة التراكمية (مع استبعاد اللوغاريتمات):

q_0_cumulative(x_t | x_0 = C_0) ... q_n_cumulative(x_t | x_0 = C_0) . . . . . . . . . q_0_cumulative(x_t | x_0 = C_{k-1\}) ... q_n_cumulative(x_t | x_0 = C_{k-1\})`} lang="" wrap={false} />

يحسب احتمالات اللوغاريتمية للصفوف من مصفوفة الانتقال (تراكمية أو غير تراكمية) لكل بكسل كامن في x_t.

q_posterior

< >

( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

المعاملات

  • log_p_x_0 (torch.Tensor من الشكل (batch size, num classes - 1, num latent pixels)) — احتمالات اللوغاريتمية للفئات المتوقعة للبيكسلات الكامنة الأولية. لا تتضمن توقعًا للفئة المقنّعة، حيث لا يمكن إخفاء الصورة الأولية غير الملوثة.
  • x_t (torch.LongTensor من الشكل (batch size, num latent pixels)) — فئات كل بكسل كامن في الزمن t.
  • t (int أو torch.Tensor) — خطوة الزمن التي تحدد مصفوفة الانتقال المستخدمة.

يعيد

torch.Tensor من الشكل (batch size, num classes, num latent pixels)

احتمالات السجل (log probabilities) للفئات المتوقعة للصورة عند خطوة الزمن t-1.

يُحسب احتمالات اللوغاريتمية للفئات المتوقعة للصورة عند خطوة الزمن t-1:

p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )

set_timesteps

< >

( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )

المعاملات

  • num_inference_steps (int) — عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.
  • device (str أو torch.device، اختياري) — الجهاز الذي يجب نقل خطوات الزمن (timesteps) ومعلمات عملية الانتشار (alpha، beta، gamma) إليه.

يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).

خطوة

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]

المعاملات

  • model_output (torch.Tensor من الشكل (batch size, num classes - 1, num latent pixels)) — احتمالات السجل (log probabilities) للفئات المتوقعة للبيكسلات الكامنة الأولية. لا تتضمن تنبؤًا للفئة المقنّعة (masked class) لأن الصورة الأولية غير المضافة إليها الضوضاء لا يمكن إخفاءها.
  • timestep (int أو torch.Tensor) — خطوة الزمن التي تحدد مصفوفات الانتقال المستخدمة.
  • sample (torch.LongTensor من الشكل (batch size, num latent pixels)) — فئات كل بكسل كامن في خطوة الزمن الحالية.
  • generator (torch.Generator، اختياري) — مولّد أرقام عشوائية للضوضاء المطبّقة على p(x_{t-1} | x_t) قبل أخذ العينة منه.
  • return_dict (bool، القيمة الافتراضية True) — ما إذا كان يجب إرجاع VQDiffusionSchedulerOutput أو tuple.

يعيد

VQDiffusionSchedulerOutput أو tuple[torch.LongTensor]

If return_dict is True, VQDiffusionSchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

تنبّأ بالعينة من الخطوة الزمنية السابقة باستخدام توزيع الانتقال العكسي. راجع q_posterior() لمزيد من التفاصيل حول كيفية حساب التوزيع.

VQDiffusionSchedulerOutput

فئة diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

المعاملات

  • prev_sample (torch.LongTensor من الشكل (batch size, num latent pixels)) — العينة المحسوبة عند خطوة الزمن السابقة. يجب استخدام prev_sample كمدخل للنموذج التالي في حلقة إزالة الضوضاء.

فئة الإخراج لدالة خطوة المجدول.

Update on GitHub