Diffusers documentation
VQDiffusionScheduler
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
< source >( 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
< source >( 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
< source >( 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 هي فئة البكسل الكامن المقنّع
النتيجة غير التراكمية (مع استبعاد اللوغاريتمات):
النتيجة التراكمية (مع استبعاد اللوغاريتمات):
يحسب احتمالات اللوغاريتمية للصفوف من مصفوفة الانتقال (تراكمية أو غير تراكمية) لكل بكسل كامن في x_t.
q_posterior
< source >( 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.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).
خطوة
< source >( 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
< source >( prev_sample: LongTensor )
فئة الإخراج لدالة خطوة المجدول.