Diffusers documentation
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler هو صياغة Karras لـ DPMSolverMultistepScheduler، وهو مجدول متعدد الخطوات من DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps و DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models من تأليف Cheng Lu و Yuhao Zhou و Fan Bao و Jianfei Chen و Chongxuan Li و Jun Zhu.
DPMSolver (والنسخة المحسّنة DPMSolver++) هو محلل سريع مخصص من الرتبة العالية لمعادلات التفاضلية العادية للانتشار، مع ضمان لرتبة التقارب. عملياً، يمكن لعينة DPMSolver باستخدام 20 خطوة فقط أن تولّد عينات عالية الجودة، كما يمكنها توليد عينات جيدة جداً حتى في 10 خطوات.
EDMDPMSolverMultistepScheduler
فئة diffusers.EDMDPMSolverMultistepScheduler
< source >( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
المعاملات
- sigma_min (
float، اختياري، القيمة الافتراضية 0.002) — أدنى مقدار للضوضاء في جدول سيجما. تم ضبطه على 0.002 في ورقة EDM [1]؛ والنطاق المعقول هو [0، 10]. - sigma_max (
float، اختياري، القيمة الافتراضية 80.0) — أقصى قيمة لضوضاء في جدول sigma. تم ضبطها على 80.0 في ورقة EDM [1]؛ النطاق المعقول هو [0.2, 80.0]. - sigma_data (
float، اختياري، القيمة الافتراضية 0.5) — انحراف المعيار لتوزيع البيانات. تم ضبطه على 0.5 في ورقة EDM [1]. - sigma_schedule (
str، اختياري، القيمة الافتراضيةkarras) — جدول سيجما لحسابsigmas. بشكل افتراضي، نستخدم الجدول المقدم في ورقة EDM (https://huggingface.co/papers/2206.00364). القيمة المقبولة الأخرى هي “exponential”. تم دمج الجدول الأسي في هذا النموذج: https://huggingface.co/stabilityai/cosxl. - num_train_timesteps (
int، القيمة الافتراضية 1000) — عدد خطوات الانتشار لتدريب النموذج. - prediction_type (
str, defaults toepsilon, optional) — 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). - rho (
float، اختياري، القيمة الافتراضية 7.0) — معامل rho في جدول Karras sigma. تم ضبطه على 7.0 في ورقة EDM [1]. - solver_order (
int، القيمة الافتراضية 2) — ترتيب DPMSolver الذي يمكن أن يكون1أو2أو3. يُوصى باستخدامsolver_order=2للعينة الموجَّهة، وsolver_order=3للعينة غير المشروطة. - thresholding (
bool، الافتراضيFalse) — ما إذا كان سيتم استخدام طريقة “العتبة الديناميكية”. هذه الطريقة غير مناسبة لنماذج الانتشار في الفضاء الكامن مثل Stable Diffusion. - dynamic_thresholding_ratio (
float) — النسبة المستخدمة في طريقة العتبة الديناميكية. تكون صالحة فقط عندما يكونthresholding=True. - sample_max_value (
float، القيمة الافتراضية 1.0) — القيمة العتبة للتعتيب الديناميكي. صالحة فقط عندما يكونthresholding=Trueوalgorithm_type="dpmsolver++". - algorithm_type (
str، القيمة الافتراضيةdpmsolver++) — نوع الخوارزمية للمُحلِّل؛ يمكن أن يكونdpmsolver++أوsde-dpmsolver++. ينفّذ النوعdpmsolver++الخوارزميات الواردة في ورقة DPMSolver++. يوصى باستخدامdpmsolver++أوsde-dpmsolver++معsolver_order=2لأخذ العينات الموجَّهة كما في Stable Diffusion. - solver_type (
str، القيمة الافتراضيةmidpoint) — نوع المُحلِّل للمُحلِّل من الرتبة الثانية؛ يمكن أن يكونmidpointأوheun. يؤثر نوع المُحلِّل بشكل طفيف على جودة العينة، خاصةً عند استخدام عدد صغير من الخطوات. يُوصى باستخدام مُحلِّلاتmidpoint. - lower_order_final (
bool، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام محللات من رتبة أدنى في الخطوات النهائية. صالح فقط لعدد خطوات الاستدلال < 15. يمكن أن يثبّت أخذ العينات في DPMSolver للخطوات < 15، خاصةً للخطوات <= 10. - euler_at_final (
bool، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام طريقة أويلر في الخطوة الأخيرة. إنها موازنة بين الاستقرار العددي وغنى التفاصيل. يمكن أن يثبّت هذا عملية أخذ العينات لنسخة DPMSolver المعتمدة على المعادلات التفاضلية العشوائية (SDE) عند استخدام عدد صغير من خطوات الاستدلال، لكنه قد يؤدي أحياناً إلى ضبابية في الصورة. - final_sigmas_type (
str، القيمة الافتراضية"zero") — قيمةsigmaالنهائية لجدول الضوضاء أثناء عملية أخذ العينات. إذا كانت"sigma_min"، فإن قيمة sigma النهائية هي نفسها آخر قيمة sigma في جدول التدريب. إذا كانتzero، تُضبط قيمة sigma النهائية على 0.
يُنفّذ EDMDPMSolverMultistepScheduler في صياغة EDM كما وردت في Karras et al. 2022 [1]. يُعدّ EDMDPMSolverMultistepScheduler محلّلاً عالي الترتيب مخصصاً وسريعاً لمعادلات ODE الانتشارية.
[1] كاراس، تيرو، وآخرون. “إيضاح مساحة التصميم للنماذج التوليدية القائمة على الانتشار.” https://huggingface.co/papers/2206.00364
يرث هذا النموذج من SchedulerMixin و ConfigMixin. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدوليات الوقت مثل التحميل والحفظ.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
المعاملات
- original_samples (
torch.Tensor) — العينات الأصلية التي سيتم إضافة الضوضاء إليها. - noise (
torch.Tensor) — مصفوفة الضوضاء التي تُضاف إلى العينات الأصلية. - timesteps (
torch.Tensor) — خطوات الزمن التي يُضاف عندها الضوضاء، والتي تحدد مستوى الضوضاء من الجدول الزمني.
يعيد
torch.Tensor
العينات الضوضائية مع ضوضاء مضافة مُقيّمة وفقًا لجدول خطوات الزمن.
أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.
convert_model_output
< source >( model_output: Tensorsample: Tensor ) → torch.Tensor
تحويل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية DPMSolver/DPMSolver++. صُمِّم DPM-Solver لتقطيع تكامل نموذج التنبؤ بالضوضاء، بينما صُمِّم DPM-Solver++ لتقطيع تكامل نموذج التنبؤ بالبيانات.
> خوارزمية ونوع النموذج منفصلان. يمكنك استخدام DPMSolver أو DPMSolver++ لكلٍّ من نماذج التنبؤ بالضوضاء ونماذج التنبؤ بالبيانات.
dpm_solver_first_order_update
< source >( model_output: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
خطوة واحدة لحلّ DPMSolver من الدرجة الأولى (المكافئ لـ DDIM).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
حدد فهرس خطوة زمنية معينة في الجدول الزمني.
multistep_dpm_solver_second_order_update
< source >( model_output_list: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
المعاملات
- model_output_list (
list[torch.Tensor]) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار. - noise (
torch.Tensor، اختياري) — مصفوفة الضوضاء التي تُضاف إلى العينات الأصلية.
يعيد
torch.Tensor
المصفوفة العينة عند خطوة الزمن السابقة.
خطوة واحدة لحلّ DPMSolver متعدد الخطوات من الدرجة الثانية.
multistep_dpm_solver_third_order_update
< source >( model_output_list: listsample: Tensor ) → torch.Tensor
خطوة واحدة لحلّ DPMSolver متعدد الخطوات من الرتبة الثالثة.
precondition_inputs
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
جهّز عينة الإدخال مسبقًا عن طريق تحجيمها وفقًا لصياغة EDM.
precondition_noise
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
قم بتكييف مستوى الضوضاء من خلال تطبيق تحويل لوغاريتمي.
precondition_outputs
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
قم بإعداد مخرجات النموذج مسبقاً وفقاً لصياغة EDM.
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
قم بتوسيع مدخلات نموذج إزالة الضوضاء لتتوافق مع خوارزمية Euler. يضمن ذلك إمكانية الاستبدال مع المجدولات التي تحتاج إلى توسيع مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.
set_begin_index
< source >( begin_index: int = 0 )
يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device, NoneType] = None )
يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).
خطوة
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
المعاملات
- model_output (
torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم. - timestep (
int) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار. - generator (
torch.Generator، اختياري) — مولّد أرقام عشوائية. - return_dict (
bool) — ما إذا كان يجب إرجاع SchedulerOutput أوtuple.
يعيد
SchedulerOutput أو tuple
إذا كانت True هي قيمة return_dict، يُعاد SchedulerOutput، وإلا يُعاد tuple حيث يكون العنصر الأول هو tensor العينة.
تنبّأ بالعيّنة من خطوة الزمن السابقة عن طريق عكس معادلة ستوكستك التفاضلية (SDE). تنقل هذه الدالة العيّنة باستخدام multistep DPMSolver.
SchedulerOutput
فئة diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
الفئة الأساسية لمخرجات دالة step في المجدول.