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 adalah sampler bergaya Euler yang dirancang untuk model difusi yang telah melalui distilasi flow-map. Model flow-map mempelajari transisi dengan interval sembarang zt→zr\mathbf{z}_t \to \mathbf{z}_r alih-alih pemetaan tetap zt→z0\mathbf{z}_t \to \mathbf{z}_0 pada model konsistensi. Kedua ujung langkah disediakan oleh pemanggil, yang memungkinkan sampling dengan jumlah langkah apa pun: satu checkpoint hasil distilasi dapat dievaluasi pada 1, 2, 4, 8, 16… NFE tanpa pelatihan ulang.

Scheduler diperkenalkan dalam AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation dan disertakan bersama integrasi AnyFlowPipeline dan AnyFlowFARPipeline, tetapi tidak khusus untuk AnyFlow — checkpoint flow-map-distilled mana pun dapat menggunakannya.

FlowMapEulerDiscreteScheduler

kelas diffusers.FlowMapEulerDiscreteScheduler

< >

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

Parameter

  • num_train_timesteps (int, defaultnya 1000) — Jumlah langkah difusi yang digunakan untuk melatih model flow-map yang mendasarinya.
  • shift (float, default 1.0) — Pergeseran langkah waktu multiplikatif yang diterapkan pada jadwal inferensi. shift=1.0 adalah identitas; nilai lebih besar dari 1.0 mendorong jadwal ke arah lebih banyak denoising pada langkah-langkah akhir (misalnya, shift=5 sesuai dengan default Wan2.1).

Sampler bergaya Euler untuk model difusi yang telah didistilasi melalui flow-map.

Model flow-map mempelajari transisi dengan interval sembarangzt→zrz_t \to z_r alih-alih pemetaan tetapzt→z0z_t \to z_0 pada model consistency, sehingga satu checkpoint yang telah didistilasi dapat dievaluasi pada 1, 2, 4, 8, … NFE tanpa pelatihan ulang. Metode step memajukan sampel dari timestep ke r_timestep sepanjang kecepatan yang diprediksi.

Diperkenalkan dalam AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation oleh Yuchao Gu, Guian Fang, dkk.

Scheduler ini mewarisi dari [SchedulerMixin] dan [ConfigMixin]. Periksa dokumentasi superclass untuk metode generik yang diimplementasikan untuk semua scheduler (pemuatan, penyimpanan, dll.).

apply_shift

< >

( sigmas: Tensor )

Terapkan transformasi pergeseran yang dikonfigurasi ke tensor sigma.

index_for_timestep

< >

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

Kembalikan indeks dari timestep pada jadwal saat ini, atau None jika di luar jadwal.

Lookup dilakukan terhadap self.timesteps dengan toleransi fp yang kecil. Digunakan untuk memulihkan sigma yang sesuai tanpa mengasumsikan hubungan linear timesteps = sigmas * num_train_timesteps — dengan cara ini, jadwal kustom (misalnya pergeseran non-linear, timesteps yang diatur secara manual) tetap dapat diselesaikan dengan benar.

scale_model_input

< >

( sample: Tensor*args**kwargs )

Skala identitas no-op. Disediakan untuk kompatibilitas API dengan scheduler Diffusers lainnya.

scale_noise

< >

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

Interpolasi linear sample menuju noise sesuai dengan timestep yang dinormalisasi.

set_begin_index

< >

( begin_index: int = 0 )

Atur indeks awal untuk scheduler. Pipeline yang dimulai di tengah jadwal (misalnya image-to-image) memanggil ini antara set_timesteps dan step pertama untuk mengaitkan rollout.

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 )

Parameter

  • num_inference_steps (int, opsional) — Jumlah langkah inferensi. Jika None, Anda harus meneruskan sigmas atau timesteps.
  • device (str atau torch.device, opsional) — Perangkat target untuk self.sigmas / self.timesteps.
  • sigmas (List[float], opsional) — Jadwal sigma kustom dengan panjang num_inference_steps. Sigma terminal 0 ditambahkan secara otomatis. shift yang dikonfigurasi diterapkan di atasnya.
  • timesteps (List[float], opsional) — Jadwal timestep kustom dengan panjang num_inference_steps, dalam satuan yang sama dengan self.timesteps (yaitu diskalakan oleh num_train_timesteps). Dikonversi menjadi sigma secara internal. Jika sigmas dan timesteps keduanya diteruskan, panjangnya harus sama.

Bangun jadwal timestep inferensi.

Secara internal melacak self.sigmas dengan panjang num_inference_steps + 1 (shift yang dikonfigurasi diterapkan pada linspace dari 1.0 ke 0.0 secara default); self.timesteps mengekspos num_inference_steps sigma pertama yang diskalakan oleh num_train_timesteps — yaitu satu timestep per langkah inferensi, sesuai dengan FlowMatchEulerDiscreteScheduler. Sigma terakhir (0) adalah r-endpoint implisit dari langkah terakhir dan ditambahkan secara otomatis ketika sigmas / timesteps disediakan oleh pengguna.

langkah

< >

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

Parameter

  • model_output (torch.Tensor) — Output langsung dari model flow-map (kecepatan rata-rata yang diprediksi).
  • timestep (float atau torch.Tensor) — Timestep sumber t dalam satuan yang sama dengan self.timesteps.
  • sample (torch.Tensor) — Current sample{@html "ztz_tzt​"}.
  • r_timestep (float atau torch.Tensor, opsional) — Timestep target r. Bawaan adalah timestep berikutnya pada jadwal ketika None; berikan nilai eksplisit untuk any-step sampling. r_timestep == timestep adalah no-op.
  • return_dict (bool, defaultnya True) — Apakah akan mengembalikan [FlowMapEulerDiscreteSchedulerOutput] (default) atau tuple biasa.

Mengembalikan

[FlowMapEulerDiscreteSchedulerOutput] atau tuple

Ketika return_dict=True, mengembalikan [FlowMapEulerDiscreteSchedulerOutput] yang prev_sample-nya adalah{@html "zrz_rzr​"}. Jika tidak, mengembalikan 1-tuple (prev_sample,).

Majukan sample dari timestep ke r_timestep menggunakan kecepatan yang diprediksi model.

Berbeda dengan penjadwal Euler standar, kedua ujung interval dapat disediakan oleh pemanggil sehingga pengambilan sampel langkah apa pun menjadi mungkin: satu panggilan model dapat melangkah dari t ke target r yang dipilih (termasuk r=0 untuk generasi sekali jalan). Ketika r_timestep diabaikan, nilainya secara default adalah langkah waktu berikutnya pada penjadwalan (sesuai dengan semantik FlowMatchEulerDiscreteScheduler).

Secara internal, sigma sumber dan target dipulihkan dengan mengindeks self.sigmas melalui index_for_timestep, bukan dengan membagi timestep input oleh num_train_timesteps, sehingga jadwal apa pun yang memiliki hubungan timestep / sigma non-linear (misalnya pergeseran kustom) tetap akurat. Untuk r_timestep di luar jadwal, scheduler kembali ke r_timestep / num_train_timesteps sehingga pengambilan sampel di langkah apa pun di luar jadwal tetap didukung.

Update on GitHub