Diffusers documentation

FlowMapEulerDiscreteScheduler

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

FlowMapEulerDiscreteScheduler

FlowMapEulerDiscreteScheduler هو مُعيّن بأسلوب أويلر مصمَّم لنماذج الانتشار المُقطَّرة عبر خرائط التدفق. تتعلَّم نماذج خرائط التدفق انتقالات بفواصل زمنية اختيارية zt→zr\mathbf{z}_t \to \mathbf{z}_r بدلًا من zt→z0\mathbf{z}_t \to \mathbf{z}_0 التعيين الثابت في نماذج الاتساق. كلا طرفَي الخطوة يُحدَّدان من قِبل المُستدعي، وهو ما يُتيح العيّنات بأي عدد من الخطوات: يمكن تقييم نقطة تفتيش مُقطَّرة واحدة عند 1 أو 2 أو 4 أو 8 أو 16… NFE دون إعادة تدريب.

تم تقديم المجدول في AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation ويُشحن مع تكاملات AnyFlowPipeline وAnyFlowFARPipeline، لكنه ليس خاصًا بـ AnyFlow — إذ يمكن لأي نقطة تحقق مُقطّرة عبر خريطة التدفق استخدامه.

FlowMapEulerDiscreteScheduler

فئة diffusers.FlowMapEulerDiscreteScheduler

< >

( num_train_timesteps: int = 1000shift: float = 1.0 )

المعاملات

  • num_train_timesteps (int، القيمة الافتراضية 1000) — عدد خطوات الانتشار المستخدمة لتدريب نموذج خريطة التدفق الأساسي.
  • shift (float، القيمة الافتراضية 1.0) — إزاحة توقيتية ضربية تُطبَّق على جدول الاستدلال. shift=1.0 هو الهوية؛ والقيم الأكبر من 1.0 تدفع الجدول نحو إزالة المزيد من الضوضاء في الخطوات اللاحقة (على سبيل المثال، shift=5 يتطابق مع القيمة الافتراضية في Wan2.1).

مُعيّن بأسلوب أويلر لنماذج الانتشار المُقطّرة عبر خرائط التدفق.

تتعلم نماذج Flow-map انتقالات بفواصل زمنية اختياريةzt→zrz_t \to z_r بدلاً منzt→z0z_t \to z_0 التعيين الثابت لنماذج الاتساق، مما يتيح تقييم نقطة تفتيش واحدة مُصغَّرة عند 1، 2، 4، 8، … NFE دون إعادة تدريب. يقوم خطوة طريقة خطوة زمنية إلى خطوة زمنية r على طول السرعة المتوقعة.

تم تقديمه في AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation بواسطة Yuchao Gu وGuian Fang وآخرون.

يرث هذا المجدول من [SchedulerMixin] و [ConfigMixin]. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع المجدولات (التحميل، الحفظ، إلخ).

apply_shift

< >

( sigmas: Tensor )

تطبيق تحويل الإزاحة المُهيّأ على متجه سيجما.

index_for_timestep

< >

( timestep: typing.Union[float, torch.FloatTensor] )

أعد فهرس timestep على الجدول الزمني الحالي، أو None إذا كان خارج الجدول.

يتم البحث في self.timesteps مع تسامح بسيط في الفاصلة العائمة. يُستخدم لاستعادة قيمة sigma المقابلة دون افتراض العلاقة الخطية timesteps = sigmas * num_train_timesteps — وبذلك تُحلّ الجداول الزمنية المخصصة (مثل الإزاحة غير الخطية، أو الخطوات الزمنية المُعيّنة يدويًا) بشكل صحيح.

scale_model_input

< >

( sample: Tensor*args**kwargs )

تصعيد هوية بلا تأثير. يُوفَّر من أجل توافق واجهة البرمجة مع مجدولات Diffusers الأخرى.

scale_noise

< >

( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )

استيفاء خطي لـsample نحو noise وفقًا لـtimestep المُعايَر.

set_begin_index

< >

( begin_index: int = 0 )

حدد فهرس البداية للمجدول. تستدعي خطوط الأنابيب التي تبدأ في منتصف الجدول (مثل image-to-image) هذه الدالة بين set_timesteps وأول step لتثبيت مسار التنفيذ.

set_timesteps

< >

( num_inference_steps: typing.Optional[int] = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = None )

المعاملات

  • num_inference_steps (int، اختياري) — عدد خطوات الاستدلال. إذا كانت None، يجب تمرير sigmas أو timesteps.
  • device (str أو torch.device، اختياري) — الجهاز المستهدف لـ self.sigmas / self.timesteps.
  • sigmas (List[float], اختياري) — جدول سيجما مخصص بطول num_inference_steps. يُضاف سيجما النهائي 0 تلقائيًا. يُطبَّق shift المُعدّ فوق ذلك.
  • timesteps (List[float], اختياري) — جدول مخصص لخطوات الزمن بطول num_inference_steps، بنفس وحدات self.timesteps (أي مُقيَّس بواسطة num_train_timesteps). يتم تحويله إلى قيم sigmas داخلياً. إذا تم تمرير كل من sigmas و timesteps، فيجب أن يتطابق طولهما.

أنشئ جدول خطوات الاستدلال.

يتتبع داخليًا self.sigmas بطول num_inference_steps + 1 (الإزاحة المُعدّة المطبّقة على linspace من 1.0 إلى 0.0 افتراضيًا)؛ يعرض self.timesteps أول num_inference_steps قيم sigma مُقيّسة بواسطة num_train_timesteps — أي خطوة زمنية واحدة لكل خطوة استنتاج، بما يتوافق مع FlowMatchEulerDiscreteScheduler. القيمة النهائية لـ sigma (0) هي نقطة النهاية الضمنية لـ r للخطوة الأخيرة وتُضاف تلقائيًا عند تقديم sigmas / timesteps من قِبل المستخدم.

خطوة

< >

( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorr_timestep: typing.Union[float, torch.FloatTensor, NoneType] = Nonereturn_dict: bool = True ) → [FlowMapEulerDiscreteSchedulerOutput] or tuple

المعاملات

  • model_output (torch.Tensor) — المخرجات المباشرة من نموذج flow-map (متوسط السرعة المتوقع).
  • timestep (float أو torch.Tensor) — خطوة الزمن المصدر t بنفس وحدات self.timesteps.
  • sample (torch.Tensor) — Current sample{@html "ztz_tzt​"}.
  • r_timestep (float أو torch.Tensor، اختياري) — خطوة الزمن المستهدفة r. الافتراضي هو الخطوة التالية في الجدول الزمني عند None؛ مرّر قيمة صريحة لأي خطوة أخذ عينات. r_timestep == timestep لا يؤدي إلى أي تغيير.
  • return_dict (bool، القيمة الافتراضية True) — ما إذا كان يجب إرجاع [FlowMapEulerDiscreteSchedulerOutput] (الافتراضي) أو مجرد tuple.

يعيد

[FlowMapEulerDiscreteSchedulerOutput] أو tuple

عندما يكون return_dict=True، تُرجع كائنًا من نوع [FlowMapEulerDiscreteSchedulerOutput] يكون حقله prev_sample هو{@html "zrz_rzr​"}. وإلا تُرجع مجموعة من عنصر واحد (prev_sample,).

تقدّم sample من timestep إلى r_timestep باستخدام السرعة المتوقعة من النموذج.

على عكس مُجدول أويلر القياسي، يمكن أن يوفر المُستدعي كلا طرفَي الفترة، مما يجعل أخذ العينات بأي عدد من الخطوات ممكنًا: فمكالمة نموذج واحدة يمكنها الانتقال من t إلى أي هدف r مُختار (بما في ذلك r=0 لتوليد دفعة واحدة). عند إغفال r_timestep، يكون الافتراضي هو الخطوة الزمنية التالية على الجدول (مطابقًا لدلالات FlowMatchEulerDiscreteScheduler).

داخليًا، يتم استرجاع قيم سيجما للمصدر والهدف عن طريق فهرسة self.sigmas عبر index_for_timestep بدلاً من قسمة خطوات الزمن المدخلة على num_train_timesteps، وبالتالي تبقى أي جدولة تكون العلاقة بين خطوة الزمن وسيغما فيها غير خطية (مثل إزاحة مخصصة) صحيحة. أما بالنسبة لـ r_timestep خارج الجدولة، فإن المجدول يلجأ إلى r_timestep / num_train_timesteps بحيث تبقى عملية أخذ العينات لأي خطوة خارج الجدولة مدعومة.

Update on GitHub