Diffusers documentation
UniPCMultistepScheduler
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
< source >( 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 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) — النسبة المستخدمة في طريقة العتبة الديناميكية. تكون صالحة فقط عندما يكون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 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 لحساب أحجام الخطوات في جدول الضوضاء أثناء عملية أخذ العينات. - 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
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة.
convert_model_output
< source >( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor
حوّل مخرجات النموذج إلى النوع المقابل الذي يحتاجه خوارزمية UniPC.
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
حدد فهرس خطوة زمنية معينة في الجدول الزمني.
multistep_uni_c_bh_update
< source >( 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
< source >( 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
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.
set_begin_index
< source >( begin_index: int = 0 )
يحدد الفهرس الابتدائي للمجدول. يجب تشغيل هذه الدالة من خط الأنابيب قبل الاستدلال.
set_timesteps
< source >( 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 اختياري للإزاحة الديناميكية عند استخدام نوع الإزاحة الزمنية الأسية.
يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).
خطوة
< 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). تنقل هذه الدالة العيّنة باستخدام UniPC متعدد الخطوات.
stretch_shift_to_terminal
< source >( t: Tensor ) → torch.Tensor
يمدّ جدول خطوات الزمن ويحرّكه لضمان أنه ينتهي عند قيمة الإعداد shift_terminal المُحدَّدة.
time_shift
< source >( mu: floatsigma: floatt: Tensor ) → torch.Tensor
طبّق إزاحةً زمنية على قيم sigmas.
SchedulerOutput
فئة diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
الفئة الأساسية لمخرجات دالة step في المجدول.