Diffusers documentation
DEISMultistepScheduler
DEISMultistepScheduler
يُقترح مُدمج التكامل الأُسّي للتشتت (DEIS) في Fast Sampling of Diffusion Models with Exponential Integrator من قِبل Qinsheng Zhang وYongxin Chen. يُعدّ DEISMultistepScheduler حلاً سريعاً عالي الرتبة لمعادلات التفاضل العادية (ODEs) الخاصة بالتشتت.
تعديل هذه الصيغة الرياضية في فضاء log-rho بدلاً من فضاء t الخطي الأصلي في ورقة DEIS. ويتمتع هذا التعديل بمعاملات بصيغة مغلقة لتحديث متعدد الخطوات الأسي بدلاً من الاعتماد على الحل العددي.
ملخص الورقة البحثية هو:
شهدت السنوات الأخيرة نجاحًا كبيرًا لنماذج الانتشار~(DMs) في توليد عينات عالية الدقة في مهام النمذجة التوليدية. يُعدّ أحد القيود الرئيسية لنماذج الانتشار بطء إجراء التوليد الشهير، والذي يتطلب عادةً مئات إلى آلاف خطوات التقطيع الزمني للعملية الانتشارية المتعلمة للوصول إلى الدقة المطلوبة. هدفنا هو تطوير طريقة توليد سريعة لنماذج الانتشار بعدد خطوات أقل بكثير مع الحفاظ على جودة عالية للعينات. لتحقيق ذلك، قمنا بتحليل منهجي لإجراء التوليد في نماذج الانتشار وتحديد العوامل الرئيسية التي تؤثر على جودة العينة، حيث تُعدّ طريقة التقطيع هي الأهم بينها. من خلال فحص دقيق للعملية الانتشارية المتعلمة، نقترح عيّّاد التكامل الأسي للانتشار~(DEIS). يعتمد هذا العيّّاد على مُكامل أسي مصمم لتقطيع المعادلات التفاضلية العادية (ODEs) ويستفيد من البنية شبه الخطية للعملية الانتشارية المتعلمة لتقليل خطأ التقطيع. يمكن تطبيق الطريقة المقترحة على أي نماذج انتشار وتوليد عينات عالية الدقة في ما لا يقل عن 10 خطوات. في تجاربنا، يستغرق الأمر حوالي 3 دقائق على وحدة معالجة رسومات واحدة من نوع A6000 لتوليد 50 ألف صورة من CIFAR10. علاوة على ذلك، من خلال استخدام نماذج انتشار مُدرَّبة مسبقًا مباشرةً، حققنا أداءً في التوليد يُعدّ من الأفضل في فئته عندما يكون عدد تقييمات دالة التدرج~(NFE) محدودًا، مثلًا، 4.17 FID مع 10 NFEs، و3.37 FID، و9.74 IS مع 15 NFEs فقط على CIFAR10. الكود متاح في هذا الرابط.
نصائح
يُوصى بإعداد solver_order إلى 2 أو 3، بينما solver_order=1 يعادل DDIMScheduler.
يُؤمَّن دعم العتبة الديناميكية من Imagen، ولنماذج الانتشار في فضاء البكسلات، يمكنك تعيين thresholding=True لاستخدام العتبة الديناميكية.
DEISMultistepScheduler
فئة diffusers.DEISMultistepScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = '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.0algorithm_type: typing.Literal['deis'] = 'deis'solver_type: typing.Literal['logrho'] = 'logrho'lower_order_final: bool = Trueuse_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 = 0use_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )
المعاملات
- 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أوlist[float]، اختياري) — مرر مصفوفة من قيم بيتا مباشرةً إلى منشئ الكائن لتجاوزbeta_startوbeta_end. - solver_order (
int، القيمة الافتراضية2) — ترتيب DEIS الذي يمكن أن يكون1أو2أو3. يُوصى باستخدامsolver_order=2للعينة الموجَّهة، وsolver_order=3للعينة غير المشروطة. - prediction_type (
"epsilon","sample","v_prediction", or"flow_prediction", defaults to"epsilon") — Prediction type of the scheduler function; can beepsilon(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، القيمة الافتراضية0.995) — النسبة المستخدمة في طريقة العتبة الديناميكية. تكون صالحة فقط عندما يكونthresholding=True. - sample_max_value (
float، القيمة الافتراضية1.0) — قيمة العتبة الخاصة بالتعتيم الديناميكي. صالحة فقط عندما يكونthresholding=True. - algorithm_type (
"deis"، الافتراضي"deis") — نوع الخوارزمية لحلّ المعادلات. - solver_type (
"logrho"، الافتراضي"logrho") — نوع المُحلِّل لـ DEIS. - lower_order_final (
bool، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام محللات من رتبة أدنى في الخطوات النهائية. صالح فقط لعدد خطوات الاستدلال أقل من 15. - use_karras_sigmas (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام Karras sigmas لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات. إذا كانتTrue، فإن قيم sigmas تُحدَّد وفقاً لسلسلة من مستويات الضوضاء {σi}. - use_exponential_sigmas (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام قيم sigmas أسّية لحجم الخطوات في جدول الضوضاء أثناء عملية أخذ العينات. - use_beta_sigmas (
bool, optional, defaults toFalse) — 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 لحساب أحجام الخطوات في جدول الضوضاء أثناء عملية أخذ العينات. - flow_shift (
float، اختياري، القيمة الافتراضية1.0) — معامل الإزاحة التدفقي (flow shift) للنماذج القائمة على التدفق. - timestep_spacing (
"linspace"،"leading"، أو"trailing"، الافتراضي هو"linspace") — طريقة توسيع خطوات الزمن. راجع الجدول 2 في جداول ضوضاء الانتشار الشائعة وخطوات العينة معيبة لمزيد من المعلومات. - steps_offset (
int، القيمة الافتراضية0) — إزاحة تُضاف إلى خطوات الاستدلال، كما تتطلبها بعض عائلات النماذج. - use_dynamic_shifting (
bool، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام الإزاحة الديناميكية لجدول الضوضاء. - time_shift_type (
"exponential"، الافتراضي"exponential") — نوع إزاحة الوقت المراد تطبيقه.
DEISMultistepScheduler هو محلل سريع من الرتبة العالية لمعادلات التفاضل العادية (ODEs) في عمليات الانتشار.
يرث هذا النموذج من SchedulerMixin و ConfigMixin. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدوليات الوقت مثل التحميل والحفظ.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.
convert_model_output
< source >( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor
حوّل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية DEIS.
deis_first_order_update
< source >( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor
المعاملات
- model_output (
torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم. - timestep (
int) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار. - prev_timestep (
int) — خطوة الزمن المنفصلة السابقة في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار.
يعيد
torch.Tensor
المصفوفة العينة عند خطوة الزمن السابقة.
خطوة واحدة لمعادلة تفاضلية من الرتبة الأولى (DEIS) (تعادل DDIM).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
حدد فهرس خطوة زمنية معينة في الجدول الزمني.
multistep_deis_second_order_update
< source >( model_output_list: list*argssample: Tensor = None**kwargs ) → torch.Tensor
خطوة واحدة لخوارزمية DEIS متعددة الخطوات من الدرجة الثانية.
multistep_deis_third_order_update
< source >( model_output_list: list*argssample: Tensor = None**kwargs ) → torch.Tensor
خطوة واحدة لخوارزمية DEIS متعددة الخطوات من الرتبة الثالثة.
scale_model_input
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.
set_begin_index
< source >( begin_index: int = 0 )
يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device] = Nonemu: float | None = None )
المعاملات
- num_inference_steps (
int) — عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا. - device (
strأوtorch.device، اختياري) — الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كانNone، فلن يتم نقل خطوات الزمن. - mu (
float، اختياري) — معامل mu للإزاحة الديناميكية. يُستخدم فقط عندما يكونuse_dynamic_shifting=Trueوtime_shift_type="exponential".
يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).
خطوة
< source >( 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). تنقل هذه الدالة العيّنة باستخدام DEIS متعدد الخطوات.
SchedulerOutput
فئة diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
الفئة الأساسية لمخرجات دالة step في المجدول.