Diffusers documentation

DPMSolverMultistepScheduler

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

DPMSolverMultistepScheduler

DPMSolverMultistepScheduler adalah penjadwal multistep dari DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps dan DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models oleh Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li, dan Jun Zhu.

DPMSolver (dan versi yang ditingkatkan, DPMSolver++) adalah solver ordo tinggi khusus yang cepat untuk ODE difusi dengan jaminan ordo konvergensi. Secara empiris, pengambilan sampel DPMSolver dengan hanya 20 langkah dapat menghasilkan sampel berkualitas tinggi, dan dapat menghasilkan sampel yang cukup baik bahkan dalam 10 langkah.

Tips

Disarankan untuk mengatur solver_order ke 2 untuk guide sampling, dan solver_order=3 untuk unconditional sampling.

Thresholding dinamis dari Imagen didukung, dan untuk model difusi ruang piksel, Anda dapat mengatur algorithm_type="dpmsolver++" dan thresholding=True untuk menggunakan thresholding dinamis. Metode thresholding ini tidak cocok untuk model difusi ruang laten seperti Stable Diffusion.

Varian SDE dari DPMSolver dan DPM-Solver++ juga didukung, tetapi hanya untuk solver orde pertama dan kedua. Ini adalah solver SDE yang cepat untuk SDE difusi terbalik. Disarankan untuk menggunakan sde-dpmsolver++ orde kedua.

DPMSolverMultistepScheduler

kelas diffusers.DPMSolverMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = '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['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_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.
  • trained_betas (np.ndarray, opsional) — Lewati beta_start dan beta_end dengan meneruskan array betas langsung ke konstruktor.
  • solver_order (int, defaultnya 2) — Urutan DPMSolver yang dapat berupa 1 atau 2 atau 3. Disarankan untuk menggunakan solver_order=2 untuk sampling terpandu, dan solver_order=3 untuk sampling tanpa syarat.
  • prediction_type ("epsilon", "sample", "v_prediction", atau "flow_prediction", defaultnya "epsilon") — Jenis prediksi dari fungsi scheduler. epsilon memprediksi noise dari proses difusi, sample secara langsung memprediksi sampel ber-noise, v_prediction memprediksi kecepatan (lihat bagian 2.4 dari paper Imagen Video), dan flow_prediction memprediksi aliran.
  • 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, default 0.995) — Rasio untuk metode thresholding dinamis. Hanya valid ketika thresholding=True.
  • sample_max_value (float, defaultnya 1.0) — Nilai ambang untuk pengambangan dinamis. Hanya valid ketika thresholding=True dan algorithm_type="dpmsolver++".
  • algorithm_type ("dpmsolver", "dpmsolver++", "sde-dpmsolver", atau "sde-dpmsolver++", defaultnya "dpmsolver++") — Jenis algoritma untuk solver. Tipe dpmsolver mengimplementasikan algoritma dalam paper DPMSolver, dan tipe dpmsolver++ mengimplementasikan algoritma dalam paper DPMSolver++. Disarankan untuk menggunakan dpmsolver++ atau sde-dpmsolver++ dengan solver_order=2 untuk guided sampling seperti pada Stable Diffusion.
  • solver_type ("midpoint" atau "heun", defaultnya "midpoint") — Jenis solver untuk solver orde kedua. Jenis solver sedikit memengaruhi kualitas sampel, terutama untuk jumlah langkah yang kecil. Disarankan untuk menggunakan solver midpoint.
  • lower_order_final (bool, defaultnya True) — Apakah akan menggunakan solver orde rendah pada langkah-langkah akhir. Hanya valid untuk < 15 langkah inferensi. Hal ini dapat menstabilkan sampling DPMSolver untuk langkah < 15, terutama untuk langkah <= 10.
  • euler_at_final (bool, defaultnya False) — Apakah akan menggunakan metode Euler pada langkah terakhir. Ini adalah pertukaran antara stabilitas numerik dan kekayaan detail. Hal ini dapat menstabilkan sampling dari varian SDE dari DPMSolver untuk jumlah langkah inferensi yang kecil, tetapi terkadang dapat menyebabkan hasil yang buram.
  • 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_lu_lambdas (bool, opsional, default False) — Apakah akan menggunakan uniform-logSNR untuk ukuran langkah yang diusulkan oleh DPM-Solver Lu dalam jadwal noise selama proses sampling. Jika True, sigmas dan langkah waktu ditentukan berdasarkan urutan lambda(t).
  • 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) — Nilai pergeseran untuk jadwal timestep pada flow matching.
  • final_sigmas_type ("zero" atau "sigma_min", opsional, default "zero") — Nilai sigma akhir untuk jadwal noise selama proses sampling. Jika "sigma_min", sigma akhir sama dengan sigma terakhir dalam jadwal pelatihan. Jika "zero", sigma akhir diatur ke 0.
  • lambda_min_clipped (float, defaultnya -inf) — Ambang pemotongan untuk nilai minimum dari lambda(t) demi stabilitas numerik. Hal ini sangat penting untuk jadwal noise cosine (squaredcos_cap_v2).
  • variance_type ("learned" atau "learned_range", opsional) — Atur ke "learned" atau "learned_range" untuk model difusi yang memprediksi varians. Jika diatur, output model berisi varians Gaussian yang diprediksi.
  • 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.
  • rescale_betas_zero_snr (bool, defaultnya False) — Apakah akan menskalakan ulang betas agar memiliki SNR terminal nol. Hal ini memungkinkan model untuk menghasilkan sampel yang sangat terang dan gelap, alih-alih membatasi pada sampel dengan kecerahan sedang. Terkait secara longgar dengan --offset_noise.
  • use_dynamic_shifting (bool, defaultnya False) — Apakah akan menggunakan pergeseran dinamis untuk jadwal timestep.
  • time_shift_type ("exponential", defaultnya "exponential") — Jenis pergeseran waktu yang diterapkan saat menggunakan pergeseran dinamis.

DPMSolverMultistepScheduler adalah solver ordo tinggi khusus yang cepat untuk 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: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Parameter

  • model_output (torch.Tensor) — Output langsung dari model difusi yang dipelajari.
  • sample (torch.Tensor, opsional) — 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 dengan kebutuhan algoritma DPMSolver/DPMSolver++. DPM-Solver dirancang untuk mendiskritisasi integral dari model prediksi noise, dan DPM-Solver++ dirancang untuk mendiskritisasi integral dari model prediksi data.

> Algoritma dan tipe model dipisahkan. Anda dapat menggunakan DPMSolver atau DPMSolver++ untuk model prediksi noise > dan model prediksi data.

dpm_solver_first_order_update

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Parameter

  • model_output (torch.Tensor) — Output langsung dari model difusi yang dipelajari.
  • sample (torch.Tensor, opsional) — Instans saat ini dari sampel yang dibuat oleh proses difusi.
  • noise (torch.Tensor, opsional) — Tensor noise.

Mengembalikan

torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

Satu langkah untuk DPMSolver 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_dpm_solver_second_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.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, opsional) — Instans saat ini dari sampel yang dibuat oleh proses difusi.
  • noise (torch.Tensor, opsional) — Noise acak yang digunakan oleh varian solver stokastik (sde-*). Wajib diisi ketika algorithm_type disetel ke salah satu dari varian tersebut, dan tidak digunakan dalam kasus lainnya.

Mengembalikan

torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

Satu langkah untuk DPMSolver multistep orde kedua.

multistep_dpm_solver_third_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.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, opsional) — Instans saat ini dari sampel yang dibuat oleh proses difusi.
  • noise (torch.Tensor, opsional) — Tensor noise.

Mengembalikan

torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

Satu langkah untuk DPMSolver 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: int = Nonedevice: typing.Union[str, torch.device] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )

Parameter

  • num_inference_steps (int, opsional) — 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) — Eksponen untuk pergeseran waktu dinamis. Memerlukan use_dynamic_shifting dan time_shift_type bernilai "exponential"; jika diberikan, flow_shift diatur ke exp(mu).
  • timesteps (list[int], opsional) — Timesteps kustom yang digunakan untuk mendukung jadwal timesteps arbitrer. Jika None, timesteps akan dihasilkan berdasarkan atribut timestep_spacing. Jika timesteps diberikan, num_inference_steps dan sigmas harus berupa None, dan atribut timestep_spacing akan diabaikan.

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

langkah

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_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.
  • generator (torch.Generator, opsional) — Generator angka acak.
  • variance_noise (torch.Tensor, opsional) — Alternatif untuk menghasilkan noise dengan generator dengan langsung menyediakan noise untuk varians itu sendiri. Berguna untuk metode seperti LEdits++.
  • return_dict (bool, defaultnya True) — Apakah akan mengembalikan SchedulerOutput atau tuple.

Mengembalikan

SchedulerOutput atau tuple

Jika return_dict adalah True, SchedulerOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah tensor sampel.

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

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