Diffusers documentation
DPMSolverSinglestepScheduler
DPMSolverSinglestepScheduler
DPMSolverSinglestepScheduler adalah scheduler satu langkah 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.
Implementasi asli dapat ditemukan di LuChengTHU/dpm-solver.
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.
DPMSolverSinglestepScheduler
kelas diffusers.DPMSolverSinglestepScheduler
< source >( 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['dpmsolver', 'dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: 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']] = Noneuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )
Parameter
- num_train_timesteps (
int, defaultnya1000) — Jumlah langkah difusi untuk melatih model. - beta_start (
float, defaultnya0.0001) — Nilaibetaawal untuk inferensi. - beta_end (
float, defaultnya0.02) — Nilaibetaakhir. - beta_schedule (
"linear","scaled_linear", atau"squaredcos_cap_v2", defaultnya"linear") — Jadwal beta, pemetaan dari rentang beta ke urutan beta untuk melangkahkan model. Pilih darilinear,scaled_linear, atausquaredcos_cap_v2. - trained_betas (
np.ndarrayataulist[float], opsional) — Lewatibeta_startdanbeta_enddengan meneruskan array betas langsung ke konstruktor. - solver_order (
int, defaultnya2) — Urutan DPMSolver yang dapat berupa1atau2atau3. Disarankan untuk menggunakansolver_order=2untuk sampling terpandu, dansolver_order=3untuk sampling tanpa syarat. - prediction_type (
"epsilon","sample","v_prediction", or"flow_prediction", defaults to"epsilon") — Prediction type of the scheduler function; can beepsilon(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, defaultnyaFalse) — Apakah akan menggunakan metode “dynamic thresholding”. Metode ini tidak cocok untuk model difusi ruang laten seperti Stable Diffusion. - dynamic_thresholding_ratio (
float, defaultnya0.995) — Rasio untuk metode thresholding dinamis. Hanya valid ketikathresholding=True. - sample_max_value (
float, defaultnya1.0) — Nilai ambang untuk thresholding dinamis. Hanya valid ketikathresholding=Truedanalgorithm_type="dpmsolver++". - algorithm_type (
"dpmsolver","dpmsolver++", atau"sde-dpmsolver++", defaultnya"dpmsolver++") — Jenis algoritma untuk solver; bisa berupadpmsolver,dpmsolver++, atausde-dpmsolver++. Jenisdpmsolvermengimplementasikan algoritma dalam paper DPMSolver, dan jenisdpmsolver++mengimplementasikan algoritma dalam paper DPMSolver++. Disarankan untuk menggunakandpmsolver++atausde-dpmsolver++dengansolver_order=2untuk guided sampling seperti pada Stable Diffusion. - solver_type (
"midpoint"atau"heun", defaultnya"midpoint") — Jenis solver untuk solver orde kedua; bisa berupamidpointatauheun. Jenis solver sedikit memengaruhi kualitas sampel, terutama untuk jumlah langkah yang kecil. Disarankan untuk menggunakan solvermidpoint. - lower_order_final (
bool, defaultnyaFalse) — 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. - use_karras_sigmas (
bool, opsional, defaultFalse) — Apakah akan menggunakan Karras sigmas untuk ukuran langkah dalam jadwal noise selama proses sampling. JikaTrue, sigma ditentukan berdasarkan urutan tingkat noise {σi}. - use_exponential_sigmas (
bool, opsional, defaultFalse) — Apakah akan menggunakan sigma eksponensial untuk ukuran langkah dalam jadwal noise selama proses sampling. - use_beta_sigmas (
bool, opsional, defaultFalse) — 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, defaultFalse) — Apakah akan menggunakan flow sigmas untuk ukuran langkah dalam jadwal noise selama proses sampling. - flow_shift (
float, opsional, default1.0) — Parameter flow shift untuk model berbasis flow. - final_sigmas_type (
"zero"atau"sigma_min", opsional, default"zero") — Nilaisigmaakhir 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 darilambda(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. - use_dynamic_shifting (
bool, defaultnyaFalse) — Apakah akan menggunakan pergeseran dinamis untuk jadwal noise. - time_shift_type (
"exponential", defaultnya"exponential") — Jenis pergeseran waktu yang akan diterapkan.
DPMSolverSinglestepScheduler 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
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Tambahkan noise ke sampel asli sesuai dengan jadwal noise pada timestep yang ditentukan.
convert_model_output
< source >( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
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
< source >( 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. - 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. - noise (
torch.Tensor, opsional) — Noise acak yang digunakan oleh varian solver stokastik (sde-*). Wajib diisi ketikaalgorithm_typedisetel 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 orde pertama (setara dengan DDIM).
get_order_list
< source >( num_inference_steps: int ) → list[int]
Menghitung urutan solver pada setiap langkah waktu.
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Cari indeks untuk timestep tertentu dalam jadwal.
scale_model_input
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
Memastikan interoperabilitas dengan scheduler yang perlu menskalakan input model denoising berdasarkan timestep saat ini.
set_begin_index
< source >( begin_index: int = 0 )
Menetapkan indeks awal untuk penjadwal. Fungsi ini harus dijalankan dari pipeline sebelum inferensi.
set_timesteps
< source >( 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 (
stratautorch.device, opsional) — Perangkat tempat timesteps harus dipindahkan. JikaNone, timesteps tidak dipindahkan. - mu (
float, opsional) — Eksponen untuk pergeseran waktu dinamis. Memerlukanuse_dynamic_shiftingdantime_shift_typebernilai"exponential"; jika diberikan,flow_shiftdiatur keexp(mu). - timesteps (
list[int], opsional) — Timesteps kustom yang digunakan untuk mendukung spasi arbitrer antar timesteps. JikaNone, maka strategi spasi timestep default dengan spasi yang sama antar timesteps schedule akan digunakan. Jikatimestepsdilewatkan,num_inference_stepsharusNone.
Menetapkan langkah waktu diskrit yang digunakan untuk rantai difusi (untuk dijalankan sebelum inferensi).
singlestep_dpm_solver_second_order_update
< source >( 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. - timestep (
int) — Timestep diskrit saat ini dan terakhir 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. - noise (
torch.Tensor, opsional) — Noise acak yang digunakan oleh varian solver stokastik (sde-*). Wajib diisi ketikaalgorithm_typedisetel 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 singlestep orde kedua yang menghitung solusi pada waktu prev_timestep dari waktu timestep_list[-2].
singlestep_dpm_solver_third_order_update
< source >( 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. - timestep (
int) — Timestep diskrit saat ini dan terakhir 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. - noise (
torch.Tensor, opsional) — Noise acak yang digunakan oleh varian solver stokastik (sde-*). Wajib diisi ketikaalgorithm_typedisetel 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 singlestep orde ketiga yang menghitung solusi pada waktu prev_timestep dari waktu timestep_list[-3].
singlestep_dpm_solver_update
< source >( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Noneorder: int = 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. - timestep (
int) — Timestep diskrit saat ini dan terakhir 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. - order (
int) — Urutan solver pada langkah ini. - noise (
torch.Tensor, opsional) — Noise acak yang digunakan oleh varian solver stokastik (sde-*). Wajib diisi ketikaalgorithm_typedisetel 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 singlestep.
langkah
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
Parameter
- model_output (
torch.Tensor) — Output langsung dari model difusi yang dipelajari. - timestep (
intatautorch.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 untuk pengambilan sampel stokastik. - return_dict (
bool, defaultnyaTrue) — Apakah akan mengembalikan SchedulerOutput atautuple.
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.
Prediksikan sampel dari langkah waktu sebelumnya dengan membalikkan SDE. Fungsi ini menyebarkan sampel dengan DPMSolver singlestep.
SchedulerOutput
kelas diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Kelas dasar untuk keluaran dari fungsi step sebuah scheduler.