Diffusers documentation
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler هو مُعيّن بأسلوب أويلر مصمَّم لنماذج الانتشار المُقطَّرة عبر خرائط التدفق. تتعلَّم نماذج خرائط التدفق انتقالات بفواصل زمنية اختيارية بدلًا من التعيين الثابت في نماذج الاتساق. كلا طرفَي الخطوة يُحدَّدان من قِبل المُستدعي، وهو ما يُتيح العيّنات بأي عدد من الخطوات: يمكن تقييم نقطة تفتيش مُقطَّرة واحدة عند 1 أو 2 أو 4 أو 8 أو 16… NFE دون إعادة تدريب.
تم تقديم المجدول في AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation ويُشحن مع تكاملات AnyFlowPipeline وAnyFlowFARPipeline، لكنه ليس خاصًا بـ AnyFlow — إذ يمكن لأي نقطة تحقق مُقطّرة عبر خريطة التدفق استخدامه.
FlowMapEulerDiscreteScheduler
فئة diffusers.FlowMapEulerDiscreteScheduler
< source >( 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 انتقالات بفواصل زمنية اختيارية بدلاً من التعيين الثابت لنماذج الاتساق، مما يتيح تقييم نقطة تفتيش واحدة مُصغَّرة عند 1، 2، 4، 8، … NFE دون إعادة تدريب. يقوم خطوة طريقة خطوة زمنية إلى خطوة زمنية r على طول السرعة المتوقعة.
تم تقديمه في AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation بواسطة Yuchao Gu وGuian Fang وآخرون.
يرث هذا المجدول من [SchedulerMixin] و [ConfigMixin]. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع المجدولات (التحميل، الحفظ، إلخ).
تطبيق تحويل الإزاحة المُهيّأ على متجه سيجما.
أعد فهرس timestep على الجدول الزمني الحالي، أو None إذا كان خارج الجدول.
يتم البحث في self.timesteps مع تسامح بسيط في الفاصلة العائمة. يُستخدم لاستعادة قيمة sigma المقابلة دون افتراض العلاقة الخطية timesteps = sigmas * num_train_timesteps — وبذلك تُحلّ الجداول الزمنية المخصصة (مثل الإزاحة غير الخطية، أو الخطوات الزمنية المُعيّنة يدويًا) بشكل صحيح.
تصعيد هوية بلا تأثير. يُوفَّر من أجل توافق واجهة البرمجة مع مجدولات Diffusers الأخرى.
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )
استيفاء خطي لـsample نحو noise وفقًا لـtimestep المُعايَر.
حدد فهرس البداية للمجدول. تستدعي خطوط الأنابيب التي تبدأ في منتصف الجدول (مثل image-to-image) هذه الدالة بين set_timesteps وأول step لتثبيت مسار التنفيذ.
set_timesteps
< source >( 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 من قِبل المستخدم.
خطوة
< source >( 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 "zt"}.
- 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 "zr"}. وإلا تُرجع مجموعة من عنصر واحد (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 بحيث تبقى عملية أخذ العينات لأي خطوة خارج الجدولة مدعومة.