Diffusers documentation

UniPCMultistepScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

UniPCMultistepScheduler

UniPCMultistepScheduler هو إطار عمل لا يتطلب تدريبًا، مصمم لأخذ عينات سريعة من نماذج الانتشار. تم تقديمه في UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models بواسطة Wenliang Zhao وLujia Bai وYongming Rao وJie Zhou وJiwen Lu.

يتألف من مُصحِّح (UniC) ومُتنبِّئ (UniP) يتشاركان في شكل تحليلي موحّد ويدعمان رتبًا عشوائية. صُمِّم UniPC ليكون مستقلاً عن النموذج، ويدعم نماذج DPM في فضاء البكسلات/فضاء الكمون على العينة غير الشرطية/الشرطية. كما يمكن تطبيقه على كلا نموذجي التنبؤ بالضوضاء والتنبؤ بالبيانات. ويمكن تطبيق المُصحِّح UniC أيضاً بعد أي محللات جاهزة الاستخدام لزيادة رتبة الدقة.

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

أثبتت النماذج الاحتمالية الانتشارية (DPMs) قدرة واعدة للغاية في تركيب الصور عالية الدقة. ومع ذلك، فإن العينة من DPM مُدرَّب مسبقًا تستغرق وقتًا طويلاً بسبب التقييمات المتعددة لشبكة إزالة الضوضاء، مما يجعل تسريع أخذ العينات من DPMs أمرًا مهمًا بشكل متزايد. على الرغم من التقدم الأخير في تصميم عيّنات سريعة، لا تزال الطرق الحالية غير قادرة على توليد صور مرضية في العديد من التطبيقات التي يُفضَّل فيها عدد أقل من الخطوات (مثل <10). في هذه الورقة، نطوّر مُصحِّحًا موحَّدًا (UniC) يمكن تطبيقه بعد أي عيّنة DPM موجودة لزيادة رتبة الدقة دون تقييمات نموذج إضافية، ونشتق مُتنبئًا موحَّدًا (UniP) يدعم أي رتبة كمنتج ثانوي. وبدمج UniP وUniC، نقترح إطارًا موحَّدًا للتنبؤ والتصحيح يُسمى UniPC لأخذ عينات سريعة من DPMs، والذي يمتلك شكلًا تحليليًا موحَّدًا لأي رتبة ويمكنه تحسين جودة أخذ العينات بشكل كبير مقارنة بالطرق السابقة، خاصةً في عدد خطوات قليل للغاية. نقيّم طرقنا من خلال تجارب شاملة تشمل أخذ عينات غير مشروطة ومشروطة باستخدام DPMs في فضاء البكسل وفضاء الكمون. يمكن لـUniPC الخاص بنا تحقيق 3.87 FID على CIFAR10 (غير مشروط) و7.51 FID على ImageNet 256×256 (مشروط) باستخدام 10 تقييمات دالة فقط. الكود متاح في هذا الرابط.

نصائح

يُوصى بإعداد solver_order إلى 2 لعينة الدليل، وsolver_order=3 للعينة غير الشرطية.

يُؤيَّد العتبة الديناميكية من Imagen، ولنماذج الانتشار في فضاء البكسلات، يمكنك ضبط كل من predict_x0=True وthresholding=True لاستخدام العتبة الديناميكية. ومن غير المناسب استخدام طريقة العتبة هذه لنماذج الانتشار في فضاء الكمون مثل Stable Diffusion.

UniPCMultistepScheduler

فئة diffusers.UniPCMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list[int] = []solver_p: SchedulerMixin = Noneuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )

المعاملات

  • num_train_timesteps (int، القيمة الافتراضية 1000) — عدد خطوات الانتشار لتدريب النموذج.
  • beta_start (float، القيمة الافتراضية 0.0001) — قيمة beta الابتدائية للاستدلال.
  • beta_end (float، القيمة الافتراضية 0.02) — قيمة beta النهائية.
  • beta_schedule ("linear"، "scaled_linear"، أو "squaredcos_cap_v2"، الافتراضي هو "linear") — جدول بيتا، وهو إسقاط من نطاق بيتا إلى تسلسل من قيم بيتا لخطوات النموذج. اختر من بين linear، scaled_linear، أو squaredcos_cap_v2.
  • trained_betas (np.ndarray، اختياري) — مرر مصفوفة من قيم بيتا مباشرةً إلى منشئ الكائن لتجاوز beta_start وbeta_end.
  • solver_order (int، القيمة الافتراضية 2) — ترتيب UniPC الذي يمكن أن يكون أي عدد صحيح موجب. الترتيب الفعلي للدقة هو solver_order + 1 بسبب UniC. يُوصى باستخدام solver_order=2 للعينة الموجَّهة، وsolver_order=3 للعينة غير المشروطة.
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon", optional) — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.
  • thresholding (bool، الافتراضي False) — ما إذا كان سيتم استخدام طريقة “العتبة الديناميكية”. هذه الطريقة غير مناسبة لنماذج الانتشار في الفضاء الكامن مثل Stable Diffusion.
  • dynamic_thresholding_ratio (float) — النسبة المستخدمة في طريقة العتبة الديناميكية. تكون صالحة فقط عندما يكون thresholding=True.
  • sample_max_value (float، القيمة الافتراضية 1.0) — القيمة العتبة للتعتيب الديناميكي. صالحة فقط عندما يكون thresholding=True وpredict_x0=True.
  • predict_x0 (bool، القيمة الافتراضية True) — ما إذا كان سيتم استخدام خوارزمية التحديث على x0 المتوقعة.
  • solver_type ("bh1" أو "bh2"، الافتراضي هو "bh2") — نوع المُحلِّل لـ UniPC. يُوصى باستخدام bh1 للعينة غير الشرطية عندما يكون عدد الخطوات < 10، وbh2 في الحالات الأخرى.
  • lower_order_final (bool، الافتراضي True) — ما إذا كان سيتم استخدام محللات من رتبة أدنى في الخطوات النهائية. صالح فقط لعدد خطوات الاستدلال < 15. يمكن أن يثبّت أخذ العينات في DPMSolver للخطوات < 15، خاصةً للخطوات <= 10.
  • disable_corrector (list، الافتراضي []) — يحدد الخطوة التي يجب تعطيل المُصحِّح فيها للتخفيف من عدم التوافق بين epsilon_theta(x_t, c) و epsilon_theta(x_t^c, c) والذي قد يؤثر على التقارب عند استخدام مقياس توجيه كبير. عادةً ما يُعطَّل المُصحِّح خلال الخطوات الأولى القليلة.
  • solver_p (SchedulerMixin، الافتراضي None) — أي جدولة أخرى، فإذا تم تحديدها يصبح الخوارزمية solver_p + UniC.
  • use_karras_sigmas (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام Karras sigmas لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات. إذا كانت True، فإن قيم sigmas تُحدَّد وفقاً لسلسلة من مستويات الضوضاء {σi}.
  • use_exponential_sigmas (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام قيم sigmas أسّية لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات.
  • use_beta_sigmas (bool, optional, defaults to False) — Whether to use beta sigmas for step sizes in the noise schedule during the sampling process. Refer to Beta Sampling is All You Need for more information.
  • use_flow_sigmas (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم استخدام قيم flow sigmas لحساب أحجام الخطوات في جدول الضوضاء أثناء عملية أخذ العينات.
  • timestep_spacing ("linspace"، "leading"، أو "trailing"، الافتراضي هو "linspace") — طريقة توسيع خطوات الزمن. راجع الجدول 2 في جداول ضوضاء الانتشار الشائعة وخطوات العينة معيبة لمزيد من المعلومات.
  • steps_offset (int، القيمة الافتراضية 0) — إزاحة تُضاف إلى خطوات الاستدلال، كما تتطلبها بعض عائلات النماذج.
  • final_sigmas_type ("zero" أو "sigma_min"، الافتراضي هو "zero") — قيمة sigma النهائية لجدول الضوضاء أثناء عملية أخذ العينات. إذا كانت "sigma_min"، فإن قيمة sigma النهائية هي نفسها آخر قيمة sigma في جدول التدريب. أما إذا كانت zero، فتُضبط قيمة sigma النهائية على 0.
  • rescale_betas_zero_snr (bool، القيمة الافتراضية False) — ما إذا كان يجب إعادة مقياس معاملات بيتا (betas) بحيث تكون نسبة الإشارة إلى الضوضاء النهائية (terminal SNR) صفرًا. يتيح هذا للنموذج توليد عينات ساطعة جدًا ومظلمة جدًا بدلاً من تقييده بتوليد عينات بإضاءة متوسطة. يرتبط ارتباطًا فضفاضًا بـ --offset_noise.

UniPCMultistepScheduler هو إطار عمل لا يتطلب تدريبًا، مصمم لأخذ عينات سريعة من نماذج الانتشار.

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

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

المعاملات

  • original_samples (torch.Tensor) — العينات الأصلية دون ضوضاء.
  • noise (torch.Tensor) — الضوضاء التي يجب إضافتها إلى العينات.
  • timesteps (torch.IntTensor) — خطوات الزمن التي يُضاف عندها الضوضاء إلى العينات.

يعيد

torch.Tensor

العينات الضجيجية.

أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.

convert_model_output

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

المعاملات

  • model_output (torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم.
  • timestep (int) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار.
  • sample (torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار.

يعيد

torch.Tensor

مخرجات النموذج المحوّل.

حوّل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية UniPC.

index_for_timestep

< >

( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

المعاملات

  • timestep (int أو torch.Tensor) — خطوة الزمن التي سيتم إيجاد فهرسها.
  • schedule_timesteps (torch.Tensor، اختياري) — جدول الخطوات الزمنية للبحث فيه. إذا كان None، يتم استخدام self.timesteps.

يعيد

int

مؤشر خطوة الزمن في الجدول الزمني.

حدد فهرس خطوة زمنية معينة في الجدول الزمني.

multistep_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

المعاملات

  • this_model_output (torch.Tensor) — مخرجات النموذج عند x_t.
  • this_timestep (int) — خطوة الزمن الحالية t.
  • last_sample (torch.Tensor) — العينة المولّدة قبل آخر متنبئ x_{t-1}.
  • this_sample (torch.Tensor) — العينة المولّدة بعد آخر متنبئ x_{t}.
  • order (int) — قيمة p في UniC-p عند هذه الخطوة. يجب أن يكون ترتيب الدقة الفعّال order + 1.

يعيد

torch.Tensor

المصفوفة العينة المُصحَّحة عند خطوة الزمن الحالية.

خطوة واحدة لنموذج UniC (نسخة B(h)).

multistep_uni_p_bh_update

< >

( model_output: Tensor*argssample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

المعاملات

  • model_output (torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوة الزمن الحالية.
  • prev_timestep (int) — خطوة الزمن المنفصلة السابقة في سلسلة الانتشار.
  • sample (torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار.
  • order (int) — ترتيب UniP في خطوة الزمن هذه (يتوافق مع p في UniPC-p).

يعيد

torch.Tensor

المصفوفة العينة عند خطوة الزمن السابقة.

خطوة واحدة لنموذج UniP (نسخة B(h)). أو يُستخدم self.solver_p إذا تم تحديد ذلك.

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

المعاملات

  • sample (torch.Tensor) — العينة المدخلة.

يعيد

torch.Tensor

عينة إدخال مُقيّمة.

يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.

set_begin_index

< >

( begin_index: int = 0 )

المعاملات

  • begin_index (int، القيمة الافتراضية 0) — الفهرس الابتدائي للمجدول.

يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.

set_timesteps

< >

( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: list[float] | None = Nonemu: bool | None = None )

المعاملات

  • num_inference_steps (int) — عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.
  • device (str أو torch.device، اختياري) — الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كان None، فلن يتم نقل خطوات الزمن.
  • sigmas (List[float]، اختياري) — قيم مخصصة لـ sigmas تُستخدم لكل خطوة من خطوات الانتشار. إذا كانت None، تُحسب قيم sigmas تلقائيًا.
  • mu (float، اختياري) — معامل mu اختياري للإزاحة الديناميكية عند استخدام نوع الإزاحة الزمنية الأسية.

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

خطوة

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorreturn_dict: bool = True ) → SchedulerOutput or tuple

المعاملات

  • model_output (torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم.
  • timestep (int أو torch.Tensor) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار.
  • sample (torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار.
  • return_dict (bool، القيمة الافتراضية True) — ما إذا كان يجب إرجاع SchedulerOutput أو tuple.

يعيد

SchedulerOutput أو tuple

إذا كانت True هي قيمة return_dict، يُعاد SchedulerOutput، وإلا يُعاد tuple حيث يكون العنصر الأول هو tensor العينة.

تنبّأ بالعيّنة من خطوة الزمن السابقة عن طريق عكس معادلة ستوكستك التفاضلية (SDE). تنقل هذه الدالة العيّنة باستخدام UniPC متعدد الخطوات.

stretch_shift_to_terminal

< >

( t: Tensor ) → torch.Tensor

المعاملات

  • t (torch.Tensor) — مصفوفة (Tensor) لخطوات الزمن (timesteps) التي سيتم تمديدها وإزاحتها.

يعيد

torch.Tensor

مصفوفة (Tensor) من خطوات الزمن المُعدَّلة بحيث تكون القيمة النهائية مساوية لـ self.config.shift_terminal.

يمدّ جدول خطوات الزمن ويحرّكه لضمان أنه ينتهي عند قيمة الإعداد shift_terminal المُحدَّدة.

مرجع: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

المعاملات

  • mu (float) — معامل mu الخاص بإزاحة الوقت.
  • sigma (float) — معامل sigma الخاص بإزاحة الوقت.
  • t (torch.Tensor) — خطوات الإدخال الزمنية.

يعيد

torch.Tensor

خطوات الزمن المُزاحة.

طبّق إزاحةً زمنية على قيم sigmas.

SchedulerOutput

فئة diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

المعاملات

  • prev_sample (torch.Tensor من الشكل (batch_size, num_channels, height, width) للصور) — العينة المحسوبة (x_{t-1}) لخطوة الزمن السابقة. يجب استخدام prev_sample كمدخل للنموذج التالي في حلقة إزالة الضوضاء.

الفئة الأساسية لمخرجات دالة step في المجدول.

Update on GitHub