Diffusers documentation
TCDScheduler
TCDScheduler
Trajectory Consistency Distillation by Jianbin Zheng, Minghui Hu, Zhongyi Fan, Chaoyue Wang, Changxing Ding, Dacheng Tao and Tat-Jen Cham introduced a Strategic Stochastic Sampling (Algorithm 4) that is capable of generating good samples in a small number of steps. Distinguishing it as an advanced iteration of the multistep scheduler (Algorithm 1) in the Consistency Models, Strategic Stochastic Sampling specifically tailored for the trajectory consistency function.
ملخص الورقة البحثية هو:
يمدّل نموذج الاتساق الكامن (LCM) نموذج الاتساق إلى الفضاء الكامن، ويستفيد من تقنية تقطير الاتساق الموجَّه لتحقيق أداء مثير للإعجاب في تسريع توليد الصور من النص. ومع ذلك، لاحظنا أن LCM يواجه صعوبة في توليد صور تجمع بين الوضوح والتفاصيل الدقيقة. لمعالجة هذه القيود، نتعمق أولاً في الأسباب الكامنة ونوضحها. حددت دراستنا أن المشكلة الرئيسية تنبع من أخطاء في ثلاث مناطق متميزة. ونتيجةً لذلك، نقدم تقطير الاتساق المساري (TCD)، الذي يشمل دالة اتساق المسار والعينة العشوائية الاستراتيجية. تقلل دالة اتساق المسار من أخطاء التقطير من خلال توسيع نطاق شرط الحد الذاتي الاتساق، ومنح TCD القدرة على تتبع مسار معادلة ODE لتدفق الاحتمال بالكامل بدقة. بالإضافة إلى ذلك، صُممت العينة العشوائية الاستراتيجية خصيصًا لتجاوز الأخطاء المتراكمة المتأصلة في العينة الاتساق متعددة الخطوات، وهي مصممة بعناية لتكميل نموذج TCD. تُظهر التجارب أن TCD لا يعزز جودة الصورة بشكل كبير عند قيم NFE المنخفضة فحسب، بل يُنتج أيضًا نتائج أكثر تفصيلًا مقارنةً بنموذج المعلم عند قيم NFE العالية.
يمكن العثور على قاعدة الكود الأصلية في jabir-zheng/TCD.
TCDScheduler
فئة diffusers.TCDScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.00085beta_end: float = 0.012beta_schedule: str = 'scaled_linear'trained_betas: numpy.ndarray | list[float] | None = Noneoriginal_inference_steps: int = 50clip_sample: bool = Falseclip_sample_range: float = 1.0set_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: str = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0timestep_spacing: str = 'leading'timestep_scaling: float = 10.0rescale_betas_zero_snr: bool = False )
المعاملات
- num_train_timesteps (
int، القيمة الافتراضية1000) — عدد خطوات الانتشار لتدريب النموذج. - beta_start (
float، القيمة الافتراضية0.00085) — قيمةbetaالابتدائية للاستدلال. - beta_end (
float، القيمة الافتراضية0.012) — القيمة النهائية لـbeta. - beta_schedule (
str، القيمة الافتراضية"scaled_linear") — جدول بيتا، وهو إسقاط من نطاق بيتا إلى تسلسل من قيم بيتا لتقدم النموذج خطوة بخطوة. اختر من بينlinearأوscaled_linearأوsquaredcos_cap_v2. - trained_betas (
np.ndarrayأوlist[float]، اختياري) — مرر مصفوفة من قيم بيتا مباشرةً إلى منشئ الكائن لتجاوزbeta_startوbeta_end. - original_inference_steps (
int)، القيمة الافتراضية50— عدد خطوات الاستدلال الافتراضي المستخدم لتوليد جدول أزمنة متباعد خطياً، حيث سنأخذ في النهايةnum_inference_stepsمن أزمنة متباعدة بالتساوي لتشكيل جدول الأزمنة النهائي. - clip_sample (
bool، القيمة الافتراضيةFalse) — قص العينة المتوقعة من أجل الاستقرار العددي. - clip_sample_range (
float، القيمة الافتراضية1.0) — الحد الأقصى لحجم قصّ العينة. صالح فقط عندما يكونclip_sample=True. - set_alpha_to_one (
bool، القيمة الافتراضيةTrue) — يستخدم كل خطوة من خطوات الانتشار قيمة حاصل ضرب الألفا في تلك الخطوة وفي الخطوة السابقة. لا توجد ألفا سابقة للخطوة الأخيرة. عند تعيين هذا الخيار إلىTrueيتم تثبيت حاصل ضرب الألفا السابقة على1، وإلا فإنه يستخدم قيمة الألفا في الخطوة 0. - steps_offset (
int، القيمة الافتراضية0) — إزاحة تُضاف إلى خطوات الاستدلال، كما تتطلبها بعض عائلات النماذج. - prediction_type (
str, defaults to"epsilon") — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - thresholding (
bool، الافتراضيFalse) — ما إذا كان سيتم استخدام طريقة “العتبة الديناميكية”. هذه الطريقة غير مناسبة لنماذج الانتشار في الفضاء الكامن مثل Stable Diffusion. - dynamic_thresholding_ratio (
float، القيمة الافتراضية0.995) — النسبة المستخدمة في طريقة العتبة الديناميكية. تكون صالحة فقط عندما يكونthresholding=True. - sample_max_value (
float، القيمة الافتراضية1.0) — قيمة العتبة الخاصة بالتعتيم الديناميكي. صالحة فقط عندما يكونthresholding=True. - timestep_spacing (
str، القيمة الافتراضية"leading") — طريقة توسيع خطوات الزمن. راجع الجدول 2 في جداول ضوضاء الانتشار الشائعة وخطوات العينات معيبة لمزيد من المعلومات. - timestep_scaling (
float، القيمة الافتراضية10.0) — المعامل الذي تُضرب به خطوات الزمن عند حساب شروط الحدود لنموذج الاتساقc_skipوc_out. زيادة هذا المعامل تقلل من خطأ التقريب (على الرغم من أن خطأ التقريب عند القيمة الافتراضية10.0صغير بالفعل). - rescale_betas_zero_snr (
bool، القيمة الافتراضيةFalse) — ما إذا كان يجب إعادة مقياس معاملات بيتا (betas) بحيث تكون نسبة الإشارة إلى الضوضاء النهائية (terminal SNR) صفرًا. يتيح هذا للنموذج توليد عينات ساطعة جدًا ومظلمة جدًا بدلاً من تقييده بتوليد عينات بإضاءة متوسطة. يرتبط ارتباطًا فضفاضًا بـ--offset_noise.
TCDScheduler يدمج Strategic Stochastic Sampling الذي قدمته ورقة Trajectory Consistency Distillation، ممتدًا من العينة الأصلية متعددة الخطوات Multistep Consistency Sampling لتمكين اجتياز المسار دون قيود.
يستند هذا الشيفرة إلى المستودع الرسمي لـ TCD(https://github.com/jabir-zheng/TCD).
يرث هذا النموذج من SchedulerMixin و ConfigMixin. يتولى ~ConfigMixin تخزين جميع سمات الإعدادات التي تُمرَّر في دالة __init__ الخاصة بالجدول الزمني، مثل num_train_timesteps. يمكن الوصول إليها عبر scheduler.config.num_train_timesteps. يوفر SchedulerMixin وظائف عامة للتحميل والحفظ عبر الدالتين SchedulerMixin.save_pretrained() و from_pretrained().
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
أضف الضوضاء إلى العينات الأصلية وفقًا لحجم الضوضاء في كل خطوة زمنية (وهذا هو عملية الانتشار الأمامية).
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
احسب تنبؤ السرعة من العينة والضوضاء وفقًا لصيغة السرعة.
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
المعاملات
- timestep (
floatأوtorch.Tensor) — قيمة الخطوة الزمنية التي يجب البحث عنها في الجدول الزمني. - schedule_timesteps (
torch.Tensor، اختياري) — جدول الخطوات الزمنية للبحث فيه. إذا كانNone، يتم استخدامself.timesteps.
يعيد
int
مؤشر خطوة الزمن في الجدول. بالنسبة للخطوة الأولى تمامًا، يُرجع المؤشر الثاني إذا كانت هناك تطابقات متعددة لتجنب تخطي قيمة سيجما عند البدء من منتصف الجدول (مثلًا، في تحويل الصورة إلى صورة).
ابحث عن فهرس خطوة زمنية محددة في جدول الخطوات الزمنية.
previous_timestep
< source >( timestep: int ) → int or torch.Tensor
احسب خطوة الزمن السابقة في سلسلة الانتشار.
scale_model_input
< source >( sample: Tensortimestep: typing.Union[int, torch.Tensor, NoneType] = None ) → torch.Tensor
يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.
set_begin_index
< source >( begin_index: int = 0 )
يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.
set_timesteps
< source >( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device, NoneType] = Noneoriginal_inference_steps: int | None = Nonetimesteps: list[int] | None = Nonestrength: float = 1.0 )
المعاملات
- num_inference_steps (
int, اختياري) — عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا. إذا تم استخدامه، يجب أن يكونtimestepsبقيمةNone. - device (
strأوtorch.device، اختياري) — الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كانNone، فلن يتم نقل خطوات الزمن. - original_inference_steps (
int, اختياري) — عدد خطوات الاستدلال الأصلية، الذي سيُستخدم لتوليد جدول أزمنة متباعد خطياً (وهو مختلف عن تطبيقdiffusersالقياسي). ثم سنأخذnum_inference_stepsمن أزمنة هذا الجدول، متباعدة بالتساوي من حيث الفهارس، ونستخدمها كجدول أزمنة نهائي. إذا لم يُضبط، فسيكون الافتراضي هو خاصيةoriginal_inference_steps. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة تُستخدم لدعم تباعد تعسفي بين الخطوات الزمنية. إذا كانتNone، فسيتم استخدام استراتيجية التباعد الافتراضية للخطوات الزمنية، وهي التباعد المتساوي بين الخطوات الزمنية على جدول الخطوات الزمنية للتدريب/التقطير. إذا تم تمريرtimesteps، يجب أن تكونnum_inference_stepsهيNone. - strength (
float، القيمة الافتراضية1.0) — تُستخدم لتحديد عدد خطوات الزمن المستخدمة للاستدلال عند استخدام img2img أو inpaint أو ما شابه ذلك.
يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).
خطوة
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensoreta: float = 0.3generator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → TCDSchedulerOutput or tuple[torch.Tensor, torch.Tensor]
المعاملات
- model_output (
torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم. - timestep (
intأوtorch.Tensor) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار. - eta (
float، القيمة الافتراضية0.3) — معامل عشوائي (يُشار إليه باسمgammaفي الورقة البحثية) يُستخدم للتحكم في درجة العشوائية في كل خطوة. عندما يكون eta = 0، فإنه يمثل أخذ عينات حتمي، بينما يشير eta = 1 إلى أخذ عينات عشوائي كامل. - generator (
torch.Generator، اختياري) — مولّد أرقام عشوائية. - return_dict (
bool، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع TCDSchedulerOutput أوtuple.
يعيد
TCDSchedulerOutput أو tuple[torch.Tensor, torch.Tensor]
If return_dict is True, TCDSchedulerOutput is returned, otherwise a
tuple is returned containing the previous sample and the predicted noised sample.
تنبّأ بالعيّنة من الخطوة الزمنية السابقة عن طريق عكس عملية المعادلة التفاضلية العشوائية (SDE). تنقل هذه الدالة عملية الانتشار من مخرجات النموذج المُتعلَّم (والتي تكون في الغالب الضوضاء المتنبَّأ بها).
TCDSchedulerOutput
فئة diffusers.schedulers.scheduling_tcd.TCDSchedulerOutput
< source >( prev_sample: Tensorpred_noised_sample: typing.Optional[torch.Tensor] = None )
المعاملات
- prev_sample (
torch.Tensorمن الشكل(batch_size, num_channels, height, width)للصور) — العينة المحسوبة(x_{t-1})لخطوة الزمن السابقة. يجب استخدامprev_sampleكمدخل للنموذج التالي في حلقة إزالة الضوضاء. - pred_noised_sample (
torch.Tensorمن الشكل(batch_size, num_channels, height, width)للصور، اختياري) — العينة الضجيجية المتوقعة(x_{s})بناءً على مخرجات النموذج من خطوة الزمن الحالية.
فئة الإخراج لدالة step الخاصة بالجدول الزمني.