Diffusers documentation

DDIMScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DDIMScheduler

نماذج الانتشار الضمنية غير الضجيج (DDIM) من تأليف جيامينغ سونغ وتشينلين منغ وستيفانو إيرمون.

ملخص الورقة البحثية هو:

حققت نماذج الانتشار الاحتمالية لإزالة الضوضاء (DDPMs) توليد صور عالية الجودة دون تدريب عدائي، لكنها تتطلب محاكاة سلسلة ماركوف لعدد كبير من الخطوات لإنتاج عينة. لتسريع عملية أخذ العينات، نقدم نماذج الانتشار الضمنية لإزالة الضوضاء (DDIMs)، وهي فئة أكثر كفاءة من النماذج الاحتمالية الضمنية التكرارية تتميز بنفس إجراء التدريب المستخدم في DDPMs. في DDPMs، يُعرَّف العملية التوليدية على أنها عكس عملية انتشار ماركوفية. نبني فئة من عمليات الانتشار غير الماركوفية التي تؤدي إلى هدف تدريب متطابق، لكن عملية العكس فيها يمكن أن تكون أسرع بكثير في أخذ العينات. نُظهر تجريبيًا أن DDIMs يمكنها إنتاج عينات عالية الجودة أسرع بمقدار 10 إلى 50 مرة من حيث الوقت الفعلي مقارنة بـ DDPMs، وتتيح لنا الموازنة بين الحساب وجودة العينة، كما يمكنها تنفيذ استيفاء دلالي ذي معنى للصور مباشرةً في الفضاء الكامن.

يمكن العثور على قاعدة الكود الأصلية لهذا الورقة البحثية في ermongroup/ddim، ويمكنك التواصل مع المؤلف عبر tsong.me.

نصائح

The paper Common Diffusion Noise Schedules and Sample Steps are Flawed claims that a mismatch between the training and inference settings leads to suboptimal inference generation results for Stable Diffusion. To fix this, the authors propose:

🧪 هذه ميزة تجريبية!

  1. إعادة مقياس جدول الضوضاء لفرض نسبة إشارة إلى ضوضاء نهائية صفرية (SNR)
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, rescale_betas_zero_snr=True)
  1. train a model with v_prediction (add the following argument to the train_text_to_image.py or train_text_to_image_lora.py scripts)
--prediction_type="v_prediction"
  1. غيّر المُعيّن (sampler) ليبدأ دائمًا من خطوة الزمن (timestep) الأخيرة
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")
  1. إعادة تحجيم التوجيه الحر من التصنيف لمنع الإفراط في التعرض
image = pipe(prompt, guidance_rescale=0.7).images[0]

على سبيل المثال:

from diffusers import DiffusionPipeline, DDIMScheduler
import torch

pipe = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2", dtype=torch.float16)
pipe.scheduler = DDIMScheduler.from_config(
    pipe.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing"
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
image = pipe(prompt, guidance_rescale=0.7).images[0]
image

DDIMScheduler

فئة diffusers.DDIMScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Noneclip_sample: bool = Trueset_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995clip_sample_range: float = 1.0sample_max_value: float = 1.0timestep_spacing: typing.Literal['leading', 'trailing', 'linspace'] = 'leading'rescale_betas_zero_snr: bool = False )

المعاملات

  • num_train_timesteps (int، القيمة الافتراضية 1000) — عدد خطوات الانتشار لتدريب النموذج.
  • beta_start (float، القيمة الافتراضية 0.0001) — قيمة beta الابتدائية للاستدلال.
  • beta_end (float، القيمة الافتراضية 0.02) — قيمة beta النهائية.
  • beta_schedule (Literal["linear", "scaled_linear", "squaredcos_cap_v2"]، القيمة الافتراضية "linear") — جدول بيتا، وهو إسقاط من نطاق بيتا إلى تسلسل من قيم بيتا لتخطي النموذج. يجب أن يكون أحد "linear" أو "scaled_linear" أو "squaredcos_cap_v2".
  • trained_betas (np.ndarray، اختياري) — مرر مصفوفة من قيم بيتا مباشرةً إلى منشئ الكائن لتجاوز beta_start وbeta_end.
  • clip_sample (bool، القيمة الافتراضية True) — يقوم بقص العينة المتوقعة من أجل الاستقرار العددي.
  • clip_sample_range (float، القيمة الافتراضية 1.0) — الحد الأقصى لشدة قص العينات. صالح فقط عندما يكون clip_sample=True.
  • set_alpha_to_one (bool، القيمة الافتراضية True) — يستخدم كل خطوة من خطوات الانتشار قيمة حاصل ضرب الألفا في تلك الخطوة وفي الخطوة السابقة. لا توجد ألفا سابقة للخطوة الأخيرة. عند تعيين هذا الخيار إلى True يتم تثبيت حاصل ضرب الألفا السابقة على 1، وإلا فإنه يستخدم قيمة الألفا في الخطوة 0.
  • steps_offset (int، القيمة الافتراضية 0) — إزاحة تُضاف إلى خطوات الاستدلال، كما تتطلبها بعض عائلات النماذج.
  • prediction_type (Literal["epsilon", "sample", "v_prediction"]، القيمة الافتراضية "epsilon") — نوع التنبؤ لدالة المجدول. يجب أن يكون أحد "epsilon" (يتنبض بضوضاء عملية الانتشار)، أو "sample" (يتنبأ مباشرةً بالعينة الضوضائية)، أو "v_prediction" (انظر القسم 2.4 من ورقة Imagen Video).
  • thresholding (bool، الافتراضي False) — ما إذا كان سيتم استخدام طريقة “العتبة الديناميكية”. هذه الطريقة غير مناسبة لنماذج الانتشار في الفضاء الكامن مثل Stable Diffusion.
  • dynamic_thresholding_ratio (float) — النسبة المستخدمة في طريقة العتبة الديناميكية. تكون صالحة فقط عندما يكون thresholding=True.
  • sample_max_value (float، القيمة الافتراضية 1.0) — القيمة العتبة للتعتيب الديناميكي. صالحة فقط عندما يكون thresholding=True.
  • timestep_spacing (Literal["leading", "trailing", "linspace"], defaults to "leading") — The way the timesteps should be scaled. Must be one of "leading", "trailing", or "linspace". Refer to Table 2 of the Common Diffusion Noise Schedules and Sample Steps are Flawed for more information.
  • rescale_betas_zero_snr (bool، القيمة الافتراضية False) — ما إذا كان يجب إعادة مقياس معاملات بيتا (betas) بحيث تكون نسبة الإشارة إلى الضوضاء النهائية (terminal SNR) صفرًا. يتيح هذا للنموذج توليد عينات ساطعة جدًا ومظلمة جدًا بدلاً من تقييده بتوليد عينات بإضاءة متوسطة. يرتبط ارتباطًا فضفاضًا بـ --offset_noise.

يمتد DDIMScheduler على إجراء إزالة الضوضاء المُقدَّم في نماذج الانتشار الاحتمالية لإزالة الضوضاء (DDPMs) مع توجيه غير ماركوفي.

يرث هذا النموذج من SchedulerMixin و ConfigMixin. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدوليات الوقت مثل التحميل والحفظ.

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

المعاملات

  • original_samples (torch.Tensor) — العينات الأصلية التي سيتم إضافة الضوضاء إليها.
  • noise (torch.Tensor) — الضوضاء التي يجب إضافتها إلى العينات.
  • timesteps (torch.IntTensor) — خطوات الزمن التي تشير إلى مستوى الضوضاء لكل عينة.

يعيد

torch.Tensor

العينات الضجيجية.

أضف الضوضاء إلى العينات الأصلية وفقًا لحجم الضوضاء في كل خطوة زمنية (وهذا هو عملية الانتشار الأمامية).

get_velocity

< >

( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

المعاملات

  • sample (torch.Tensor) — العينة المدخلة.
  • noise (torch.Tensor) — مصفوفة الضوضاء.
  • timesteps (torch.IntTensor) — خطوات الزمن لحساب السرعة.

يعيد

torch.Tensor

السرعة المحسوبة.

احسب تنبؤ السرعة من العينة والضوضاء وفقًا لصيغة السرعة.

scale_model_input

< >

( sample: Tensortimestep: int = None ) → torch.Tensor

المعاملات

  • sample (torch.Tensor) — العينة المدخلة.
  • timestep (int، اختياري) — خطوة الزمن الحالية في سلسلة الانتشار.

يعيد

torch.Tensor

عينة إدخال مُقيّمة.

يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.

set_timesteps

< >

( num_inference_steps: intdevice: typing.Union[str, torch.device] = None )

المعاملات

  • num_inference_steps (int) — عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.
  • device (str | torch.device، اختياري) — الجهاز الذي سيتم استخدامه لخطوات الزمن.

يرفع

ValueError

  • ValueError — إذا كان num_inference_steps أكبر من self.config.num_train_timesteps.

يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).

خطوة

< >

( model_output: Tensortimestep: intsample: Tensoreta: float = 0.0use_clipped_model_output: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → DDIMSchedulerOutput or tuple

المعاملات

  • model_output (torch.Tensor) — المخرجات المباشرة من نموذج الانتشار المُتعلَّم.
  • timestep (int) — خطوة الزمن المنفصلة الحالية في سلسلة الانتشار.
  • sample (torch.Tensor) — نسخة حالية من العينة التي أنشأها عملية الانتشار.
  • eta (float، اختياري، القيمة الافتراضية 0.0) — وزن الضوضاء المضافة في خطوة الانتشار. القيمة 0 تقابل DDIM (حتمي) والقيمة 1 تقابل DDPM (عشوائي بالكامل).
  • use_clipped_model_output (bool، اختياري، القيمة الافتراضية False) — إذا كانت True، يتم حساب model_output “المصحح” من العينة الأصلية المتوقعة المقصوصة. هذا ضروري لأن العينة الأصلية المتوقعة تُقصّ إلى [-1, 1] عندما تكون self.config.clip_sample هي True. إذا لم يحدث أي قصّ، فإن model_output “المصحح” سيتطابق مع ذلك المُقدَّم كمدخل، ولا يكون لـuse_clipped_model_output أي تأثير.
  • generator (torch.Generator، اختياري) — مولّد أرقام عشوائية لأخذ عينات قابلة للتكرار.
  • variance_noise (torch.Tensor, اختياري) — بديل لتوليد الضوضاء باستخدام generator من خلال تقديم الضوضاء مباشرةً للتباين نفسه. مفيد لطرق مثل CycleDiffusion.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع DDIMSchedulerOutput أو tuple.

يعيد

DDIMSchedulerOutput أو tuple

إذا كانت True هي قيمة return_dict، يُعاد DDIMSchedulerOutput، وإلا فسيُعاد tuple يكون العنصر الأول فيه tensor العينة.

تنبّأ بالعيّنة من الخطوة الزمنية السابقة عن طريق عكس عملية المعادلة التفاضلية العشوائية (SDE). تنقل هذه الدالة عملية الانتشار من مخرجات النموذج المُتعلَّم (والتي تكون في الغالب الضوضاء المتنبَّأ بها).

DDIMSchedulerOutput

فئة diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput

< >

( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )

المعاملات

  • prev_sample (torch.Tensor من الشكل (batch_size, num_channels, height, width) للصور) — العينة المحسوبة (x_{t-1}) لخطوة الزمن السابقة. يجب استخدام prev_sample كمدخل للنموذج التالي في حلقة إزالة الضوضاء.
  • pred_original_sample (torch.Tensor من الشكل (batch_size, num_channels, height, width) للصور) — العينة المُتنبَّأ بها بعد إزالة الضوضاء (x_{0}) بناءً على مخرجات النموذج من خطوة الزمن الحالية. يمكن استخدام pred_original_sample لمعاينة التقدم أو للتوجيه.

فئة الإخراج لدالة step الخاصة بالجدول الزمني.

Update on GitHub