Diffusers documentation
DPMSolverSinglestepScheduler
DPMSolverSinglestepScheduler
DPMSolverSinglestepScheduler هو مجدول خطوة واحدة من 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 من تأليف تشينغ لو، ويهاو تشو، فان باو، جيانفي تشن، تشونغشوان لي، وجون تشو.
DPMSolver (والنسخة المحسّنة DPMSolver++) هو محلل سريع مخصص من الرتبة العالية لمعادلات التفاضلية العادية للانتشار، مع ضمان لرتبة التقارب. عملياً، يمكن لعينة DPMSolver باستخدام 20 خطوة فقط أن تولّد عينات عالية الجودة، كما يمكنها توليد عينات جيدة جداً حتى في 10 خطوات.
يمكن العثور على التنفيذ الأصلي في LuChengTHU/dpm-solver.
نصائح
يُوصى بإعداد solver_order إلى 2 لعينة الدليل، وsolver_order=3 للعينة غير الشرطية.
يُؤيَّد العتبة الديناميكية من Imagen، ولنماذج الانتشار في فضاء البكسلات، يمكنك ضبط كل من algorithm_type="dpmsolver++" وthresholding=True لاستخدام العتبة الديناميكية. ومن غير المناسب استخدام طريقة العتبات هذه لنماذج الانتشار في فضاء الكمون مثل Stable Diffusion.
DPMSolverSinglestepScheduler
فئة diffusers.DPMSolverSinglestepScheduler
< 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['dpmsolver', 'dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Noneuse_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) — ترتيب DPMSolver الذي يمكن أن يكون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="dpmsolver++". - algorithm_type (
"dpmsolver"، أو"dpmsolver++"، أو"sde-dpmsolver++"، القيمة الافتراضية هي"dpmsolver++") — نوع الخوارزمية للمُحلِّل؛ يمكن أن يكونdpmsolverأوdpmsolver++أوsde-dpmsolver++. يُطبِّق النوعdpmsolverالخوارزميات الواردة في ورقة DPMSolver، بينما يُطبِّق النوعdpmsolver++الخوارزميات الواردة في ورقة DPMSolver++. يُوصى باستخدامdpmsolver++أوsde-dpmsolver++معsolver_order=2لأخذ العينات الموجَّهة كما في Stable Diffusion. - solver_type (
"midpoint"أو"heun"، الافتراضي هو"midpoint") — نوع المُحلِّل للمُحلِّل من الرتبة الثانية؛ يمكن أن يكونmidpointأوheun. يؤثر نوع المُحلِّل بشكل طفيف على جودة العينة، خاصةً عند استخدام عدد صغير من الخطوات. يُوصى باستخدام مُحلِّلاتmidpoint. - lower_order_final (
bool، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام محللات من رتبة أدنى في الخطوات النهائية. صالح فقط لعدد خطوات الاستدلال < 15. يمكن أن يثبّت أخذ العينات في DPMSolver للخطوات < 15، خاصةً للخطوات <= 10. - 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) للنماذج القائمة على التدفق. - final_sigmas_type (
"zero"أو"sigma_min"، اختياري، القيمة الافتراضية"zero") — قيمةsigmaالنهائية لجدول الضوضاء أثناء عملية أخذ العينات. إذا كانت"sigma_min"، فإن قيمة sigma النهائية هي نفسها آخر قيمة sigma في جدول التدريب. أما إذا كانت"zero"، فتُضبط قيمة sigma النهائية على 0. - lambda_min_clipped (
float، القيمة الافتراضية-inf) — حدّ القصّ للقيمة الدنيا لـlambda(t)من أجل الاستقرار العددي. وهذا أمر بالغ الأهمية لجدول الضوضاء الجيبية (squaredcos_cap_v2). - variance_type (
"learned"أو"learned_range"، اختياري) — يُضبط على"learned"أو"learned_range"لنماذج الانتشار التي تتنبأ بالتباين. إذا تم ضبطه، فإن مخرجات النموذج تتضمن التباين الغاوسي المتوقع. - use_dynamic_shifting (
bool، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام الإزاحة الديناميكية لجدول الضوضاء. - time_shift_type (
"exponential"، الافتراضي"exponential") — نوع إزاحة الوقت المراد تطبيقه.
DPMSolverSinglestepScheduler هو محلل سريع مخصص من الرتبة العالية لمعادلات التفاضلية العادية للانتشار.
يرث هذا النموذج من SchedulerMixin و ConfigMixin. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدوليات الوقت مثل التحميل والحفظ.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.
convert_model_output
< source >( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
تحويل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية DPMSolver/DPMSolver++. صُمِّم DPM-Solver لتقطيع تكامل نموذج التنبؤ بالضوضاء، بينما صُمِّم DPM-Solver++ لتقطيع تكامل نموذج التنبؤ بالبيانات.
> خوارزمية ونوع النموذج منفصلان. يمكنك استخدام DPMSolver أو DPMSolver++ لكلٍّ من نماذج التنبؤ بالضوضاء ونماذج التنبؤ بالبيانات.
dpm_solver_first_order_update
< source >( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
المعاملات
- model_output (
torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم. - timestep (
int) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار. - prev_timestep (
int) — خطوة الزمن المنفصلة السابقة في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار. - noise (
torch.Tensor، اختياري) — ضوضاء عشوائية تُستخدم في متغيرات المُحلِّل العشوائي (sde-*). يُشترط توفيره عند ضبطalgorithm_typeعلى أحد هذه المتغيرات، ولا يُستخدم في الحالات الأخرى.
يعيد
torch.Tensor
المصفوفة العينة عند خطوة الزمن السابقة.
خطوة واحدة لحلّ DPMSolver من الدرجة الأولى (المكافئ لـ DDIM).
get_order_list
< source >( num_inference_steps: int ) → list[int]
يُحسب ترتيب المُحلِّل في كل خطوة زمنية.
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
حدد فهرس خطوة زمنية معينة في الجدول الزمني.
scale_model_input
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.
set_begin_index
< source >( begin_index: int = 0 )
يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )
المعاملات
- num_inference_steps (
int, اختياري) — عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا. - device (
strأوtorch.device، اختياري) — الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كانNone، فلن يتم نقل خطوات الزمن. - mu (
float، اختياري) — أسّ للإزاحة الديناميكية للزمن. يتطلبuse_dynamic_shiftingوقيمةtime_shift_typeتساوي"exponential"؛ عند تمريره، يُضبطflow_shiftعلىexp(mu). - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة تُستخدم لدعم تباعد تعسفي بين الخطوات الزمنية. إذا كانتNone، فسيتم استخدام استراتيجية التباعد الافتراضية للجدول الزمني للخطوات الزمنية، وهي التباعد المتساوي بين الخطوات الزمنية. إذا تم تمريرtimesteps، فيجب أن تكونnum_inference_stepsهيNone.
يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).
singlestep_dpm_solver_second_order_update
< source >( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
المعاملات
- model_output_list (
list[torch.Tensor]) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة. - timestep (
int) — خطوة الزمن المنفصلة الحالية والأخيرة في سلسلة الانتشار. - prev_timestep (
int) — خطوة الزمن المنفصلة السابقة في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار. - noise (
torch.Tensor، اختياري) — ضوضاء عشوائية تُستخدم في متغيرات المُحلِّل العشوائي (sde-*). يُشترط توفيره عند ضبطalgorithm_typeعلى أحد هذه المتغيرات، ولا يُستخدم في الحالات الأخرى.
يعيد
torch.Tensor
المصفوفة العينة عند خطوة الزمن السابقة.
خطوة واحدة لحلّ DPMSolver أحادي الخطوة من الدرجة الثانية الذي يحسب الحل عند الزمن prev_timestep انطلاقاً من الزمن timestep_list[-2].
singlestep_dpm_solver_third_order_update
< source >( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
المعاملات
- model_output_list (
list[torch.Tensor]) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة. - timestep (
int) — خطوة الزمن المنفصلة الحالية والأخيرة في سلسلة الانتشار. - prev_timestep (
int) — خطوة الزمن المنفصلة السابقة في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار. - noise (
torch.Tensor، اختياري) — ضوضاء عشوائية تُستخدم في متغيرات المُحلِّل العشوائي (sde-*). يُشترط توفيره عند ضبطalgorithm_typeعلى أحد هذه المتغيرات، ولا يُستخدم في الحالات الأخرى.
يعيد
torch.Tensor
المصفوفة العينة عند خطوة الزمن السابقة.
خطوة واحدة لحلّ DPMSolver أحادي الخطوة من الرتبة الثالثة الذي يحسب الحل عند الزمن prev_timestep انطلاقاً من الزمن timestep_list[-3].
singlestep_dpm_solver_update
< source >( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Noneorder: int = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
المعاملات
- model_output_list (
list[torch.Tensor]) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم عند خطوات الزمن الحالية واللاحقة. - timestep (
int) — خطوة الزمن المنفصلة الحالية والأخيرة في سلسلة الانتشار. - prev_timestep (
int) — خطوة الزمن المنفصلة السابقة في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار. - order (
int) — ترتيب المُحلِّل في هذه الخطوة. - noise (
torch.Tensor، اختياري) — ضوضاء عشوائية تُستخدم في متغيرات المُحلِّل العشوائي (sde-*). يُشترط توفيره عند ضبطalgorithm_typeعلى أحد هذه المتغيرات، ولا يُستخدم في الحالات الأخرى.
يعيد
torch.Tensor
المصفوفة العينة عند خطوة الزمن السابقة.
خطوة واحدة لحلّ DPMSolver أحادي الخطوة.
خطوة
< 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أوtorch.Tensor) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار. - sample (
torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار. - generator (
torch.Generator، اختياري) — مولّد أرقام عشوائية للعينة العشوائية. - return_dict (
bool، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع SchedulerOutput أوtuple.
يعيد
SchedulerOutput أو tuple
إذا كانت True هي قيمة return_dict، يُعاد SchedulerOutput، وإلا يُعاد tuple حيث يكون العنصر الأول هو tensor العينة.
تنبّأ بالعيّنة من خطوة الزمن السابقة عن طريق عكس معادلة ستوكستك التفاضلية (SDE). تنقل هذه الدالة العيّنة باستخدام singlestep DPMSolver.
SchedulerOutput
فئة diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
الفئة الأساسية لمخرجات دالة step في المجدول.