Diffusers documentation

DEISMultistepScheduler

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

DEISMultistepScheduler

Diffusion Exponential Integrator Sampler (DEIS) diusulkan dalam Fast Sampling of Diffusion Models with Exponential Integrator oleh Qinsheng Zhang dan Yongxin Chen. DEISMultistepScheduler adalah solver orde tinggi yang cepat untuk persamaan diferensial biasa (ODE) difusi.

Implementasi ini memodifikasi rumus penyesuaian polinomial dalam ruang log-rho, bukan ruang t linear asli dalam paper DEIS. Modifikasi ini memiliki koefisien bentuk tertutup untuk pembaruan multistep eksponensial, alih-alih mengandalkan solver numerik.

Abstrak dari makalah tersebut adalah:

Beberapa tahun terakhir telah menyaksikan kesuksesan besar model Difusi~(DM) dalam menghasilkan sampel ber-fidelitas tinggi pada tugas pemodelan generatif. Keterbatasan utama DM adalah prosedur sampling-nya yang terkenal lambat, yang biasanya membutuhkan ratusan hingga ribuan langkah diskretisasi waktu dari proses difusi yang dipelajari untuk mencapai akurasi yang diinginkan. Tujuan kami adalah mengembangkan metode sampling cepat untuk DM dengan jumlah langkah yang jauh lebih sedikit sambil mempertahankan kualitas sampel yang tinggi. Untuk tujuan ini, kami menganalisis secara sistematis prosedur sampling pada DM dan mengidentifikasi faktor-faktor kunci yang memengaruhi kualitas sampel, di mana metode diskretisasi adalah yang paling krusial. Dengan memeriksa secara cermat proses difusi yang dipelajari, kami mengusulkan Diffusion Exponential Integrator Sampler~(DEIS). Metode ini didasarkan pada Exponential Integrator yang dirancang untuk mendiskretisasi persamaan diferensial biasa (ODE) dan memanfaatkan struktur semi-linear dari proses difusi yang dipelajari untuk mengurangi kesalahan diskretisasi. Metode yang diusulkan dapat diterapkan pada DM apa pun dan dapat menghasilkan sampel ber-fidelitas tinggi dalam hanya 10 langkah. Dalam eksperimen kami, dibutuhkan sekitar 3 menit pada satu GPU A6000 untuk menghasilkan 50k gambar dari CIFAR10. Selain itu, dengan menggunakan DM yang telah dilatih sebelumnya secara langsung, kami mencapai kinerja sampling state-of-the-art ketika jumlah evaluasi fungsi skor~(NFE) dibatasi, misalnya, FID 4,17 dengan 10 NFE, FID 3,37, dan IS 9,74 dengan hanya 15 NFE pada CIFAR10. Kode tersedia di URL https ini.

Tips

Disarankan untuk mengatur solver_order ke 2 atau 3, sedangkan solver_order=1 setara dengan DDIMScheduler.

Thresholding dinamis dari Imagen didukung, dan untuk model difusi ruang piksel, Anda dapat mengatur thresholding=True untuk menggunakan thresholding dinamis.

DEISMultistepScheduler

kelas diffusers.DEISMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = '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.0algorithm_type: typing.Literal['deis'] = 'deis'solver_type: typing.Literal['logrho'] = 'logrho'lower_order_final: bool = Trueuse_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 = 0use_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )

Parameter

  • num_train_timesteps (int, defaultnya 1000) — Jumlah langkah difusi untuk melatih model.
  • beta_start (float, defaultnya 0.0001) — Nilai beta awal untuk inferensi.
  • beta_end (float, defaultnya 0.02) — Nilai beta akhir.
  • beta_schedule ("linear", "scaled_linear", atau "squaredcos_cap_v2", defaultnya "linear") — Jadwal beta, pemetaan dari rentang beta ke urutan beta untuk melangkahkan model. Pilih dari linear, scaled_linear, atau squaredcos_cap_v2.
  • trained_betas (np.ndarray atau list[float], opsional) — Lewati beta_start dan beta_end dengan meneruskan array betas langsung ke konstruktor.
  • solver_order (int, defaultnya 2) — Urutan DEIS yang dapat berupa 1 atau 2 atau 3. Disarankan untuk menggunakan solver_order=2 untuk guided sampling, dan solver_order=3 untuk unconditional sampling.
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") — Prediction type of the scheduler function; can be epsilon (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, defaultnya False) — Apakah akan menggunakan metode “dynamic thresholding”. Metode ini tidak cocok untuk model difusi ruang laten seperti Stable Diffusion.
  • dynamic_thresholding_ratio (float, defaultnya 0.995) — Rasio untuk metode thresholding dinamis. Hanya valid ketika thresholding=True.
  • sample_max_value (float, defaultnya 1.0) — Nilai ambang untuk thresholding dinamis. Hanya valid ketika thresholding=True.
  • algorithm_type ("deis", defaultnya "deis") — Jenis algoritma untuk solver.
  • solver_type ("logrho", defaultnya "logrho") — Jenis solver untuk DEIS.
  • lower_order_final (bool, defaultnya True) — Apakah akan menggunakan solver orde rendah pada langkah-langkah akhir. Hanya valid untuk < 15 langkah inferensi.
  • use_karras_sigmas (bool, opsional, default False) — Apakah akan menggunakan Karras sigmas untuk ukuran langkah dalam jadwal noise selama proses sampling. Jika True, sigma ditentukan berdasarkan urutan tingkat noise {σi}.
  • use_exponential_sigmas (bool, opsional, default False) — Apakah akan menggunakan sigma eksponensial untuk ukuran langkah dalam jadwal noise selama proses sampling.
  • use_beta_sigmas (bool, opsional, default False) — Apakah akan menggunakan beta sigmas untuk ukuran langkah dalam jadwal noise selama proses sampling. Lihat Beta Sampling is All You Need untuk informasi lebih lanjut.
  • use_flow_sigmas (bool, opsional, default False) — Apakah akan menggunakan flow sigmas untuk ukuran langkah dalam jadwal noise selama proses sampling.
  • flow_shift (float, opsional, default 1.0) — Parameter flow shift untuk model berbasis flow.
  • timestep_spacing ("linspace", "leading", atau "trailing", defaultnya "linspace") — Cara timestep harus diskalakan. Lihat Tabel 2 dari Common Diffusion Noise Schedules and Sample Steps are Flawed untuk informasi lebih lanjut.
  • steps_offset (int, defaultnya 0) — Offset yang ditambahkan ke langkah inferensi, sesuai kebutuhan beberapa keluarga model.
  • use_dynamic_shifting (bool, defaultnya False) — Apakah akan menggunakan pergeseran dinamis untuk jadwal noise.
  • time_shift_type ("exponential", defaultnya "exponential") — Jenis pergeseran waktu yang akan diterapkan.

DEISMultistepScheduler adalah solver orde tinggi yang cepat untuk persamaan diferensial biasa (ODE) difusi.

Model ini mewarisi dari SchedulerMixin dan ConfigMixin. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan pustaka ini untuk semua scheduler, seperti pemuatan dan penyimpanan.

add_noise

< >

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

Parameter

  • original_samples (torch.Tensor) — Sampel asli tanpa noise.
  • noise (torch.Tensor) — Noise yang akan ditambahkan ke sampel.
  • timesteps (torch.IntTensor) — Timesteps di mana noise akan ditambahkan ke sampel.

Mengembalikan

torch.Tensor

Sampel yang bising.

Tambahkan noise ke sampel asli sesuai dengan jadwal noise pada timestep yang ditentukan.

convert_model_output

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Parameter

  • model_output (torch.Tensor) — Output langsung dari model difusi yang dipelajari.
  • timestep (int) — Timestep diskrit saat ini dalam rantai difusi.
  • sample (torch.Tensor) — Instans saat ini dari sampel yang dibuat oleh proses difusi.

Mengembalikan

torch.Tensor

Output model yang telah dikonversi.

Konversi keluaran model ke tipe yang sesuai yang dibutuhkan oleh algoritma DEIS.

deis_first_order_update

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Parameter

  • model_output (torch.Tensor) — Output langsung dari model difusi yang dipelajari.
  • timestep (int) — Timestep diskrit saat ini dalam rantai difusi.
  • prev_timestep (int) — Langkah waktu diskrit sebelumnya dalam rantai difusi.
  • sample (torch.Tensor) — Instans saat ini dari sampel yang dibuat oleh proses difusi.

Mengembalikan

torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

Satu langkah untuk DEIS orde pertama (setara dengan DDIM).

index_for_timestep

< >

( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

Parameter

  • timestep (int atau torch.Tensor) — Timestep yang akan dicari indeksnya.
  • schedule_timesteps (torch.Tensor, opsional) — Jadwal timestep yang akan dicari. Jika None, gunakan self.timesteps.

Mengembalikan

int

Indeks timestep dalam jadwal.

Cari indeks untuk timestep tertentu dalam jadwal.

multistep_deis_second_order_update

< >

( model_output_list: list*argssample: Tensor = None**kwargs ) → torch.Tensor

Parameter

  • model_output_list (list[torch.Tensor]) — Output langsung dari model difusi yang dipelajari pada timestep saat ini dan timestep berikutnya.
  • sample (torch.Tensor) — Instans saat ini dari sampel yang dibuat oleh proses difusi.

Mengembalikan

torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

Satu langkah untuk DEIS multistep orde kedua.

multistep_deis_third_order_update

< >

( model_output_list: list*argssample: Tensor = None**kwargs ) → torch.Tensor

Parameter

  • model_output_list (list[torch.Tensor]) — Output langsung dari model difusi yang dipelajari pada timestep saat ini dan timestep berikutnya.
  • sample (torch.Tensor) — Instans saat ini dari sampel yang dibuat oleh proses difusi.

Mengembalikan

torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

Satu langkah untuk DEIS multistep orde ketiga.

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

Parameter

  • sample (torch.Tensor) — Contoh input.

Mengembalikan

torch.Tensor

Contoh input yang diskalakan.

Memastikan interoperabilitas dengan scheduler yang perlu menskalakan input model denoising berdasarkan timestep saat ini.

set_begin_index

< >

( begin_index: int = 0 )

Parameter

  • begin_index (int, defaultnya 0) — Indeks awal untuk scheduler.

Menetapkan indeks awal untuk penjadwal. Fungsi ini harus dijalankan dari pipeline sebelum inferensi.

set_timesteps

< >

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

Parameter

  • num_inference_steps (int) — Jumlah langkah difusi yang digunakan saat menghasilkan sampel dengan model terlatih.
  • device (str atau torch.device, opsional) — Perangkat tempat timesteps harus dipindahkan. Jika None, timesteps tidak dipindahkan.
  • mu (float, opsional) — Parameter mu untuk pergeseran dinamis. Hanya digunakan ketika use_dynamic_shifting=True dan time_shift_type="exponential".

Menetapkan langkah waktu diskrit yang digunakan untuk rantai difusi (untuk dijalankan sebelum inferensi).

langkah

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorreturn_dict: bool = True ) → SchedulerOutput or tuple

Parameter

  • model_output (torch.Tensor) — Output langsung dari model difusi yang dipelajari.
  • timestep (int atau torch.Tensor) — Langkah waktu diskret saat ini dalam rantai difusi.
  • sample (torch.Tensor) — Instans saat ini dari sampel yang dibuat oleh proses difusi.
  • return_dict (bool, defaultnya True) — Apakah akan mengembalikan SchedulerOutput atau tuple.

Mengembalikan

SchedulerOutput atau tuple

If return_dict is True, SchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

Prediksi sampel dari langkah waktu sebelumnya dengan membalikkan SDE. Fungsi ini menyebarkan sampel dengan DEIS multistep.

SchedulerOutput

kelas diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

Parameter

  • prev_sample (torch.Tensor dengan bentuk (batch_size, num_channels, height, width) untuk gambar) — Contoh yang dihitung (x_{t-1}) dari langkah waktu sebelumnya. prev_sample harus digunakan sebagai input model berikutnya dalam loop denoising.

Kelas dasar untuk keluaran dari fungsi step sebuah scheduler.

Update on GitHub