Buckets:

hf-doc-build/doc / diffusers /main /id /api /schedulers /singlestep_dpm_solver.md
mishig's picture
|
download
raw
20.3 kB

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, sampling 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.

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

DPMSolverSinglestepScheduler[[diffusers.DPMSolverSinglestepScheduler]]

diffusers.DPMSolverSinglestepScheduler[[diffusers.DPMSolverSinglestepScheduler]]

diffusers.DPMSolverSinglestepScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++', solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint', lower_order_final: bool = False, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero', lambda_min_clipped: float = -inf, variance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = None, use_dynamic_shifting: bool = False, time_shift_type: typing.Literal['exponential'] = 'exponential')

Sumber

Parameter:

num_train_timesteps (int, defaultnya 1000) : Jumlah langkah difusi untuk melatih model.

beta_start (float, defaultnya 0.0001) : Nilai awal beta 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 melangkah model. Pilih dari linear, scaled_linear, atau squaredcos_cap_v2.

trained_betas (np.ndarray atau list[float], opsional) : Teruskan array beta secara langsung ke konstruktor untuk melewati beta_start dan beta_end.

solver_order (int, defaultnya 2) : Urutan DPMSolver 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 ambang 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++", atau "sde-dpmsolver++", defaultnya "dpmsolver++") : Jenis algoritma untuk solver; bisa berupa dpmsolver, dpmsolver++, atau sde-dpmsolver++. 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; bisa berupa midpoint atau heun. Jenis solver sedikit memengaruhi kualitas sampel, terutama untuk jumlah langkah yang kecil. Disarankan untuk menggunakan solver midpoint.

lower_order_final (bool, defaultnya False) : Apakah akan menggunakan solver orde lebih 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, defaultnya False) : Apakah akan menggunakan Karras sigmas untuk ukuran langkah dalam jadwal noise selama proses sampling. Jika True, sigmas ditentukan berdasarkan urutan tingkat noise {σi}.

use_exponential_sigmas (bool, opsional, defaultnya False) : Apakah akan menggunakan sigma eksponensial untuk ukuran langkah dalam jadwal noise selama proses sampling.

use_beta_sigmas (bool, opsional, defaultnya 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, defaultnya 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.

final_sigmas_type ("zero" atau "sigma_min", opsional, defaultnya "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 kosinus (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, defaultnya False) : Apakah akan menggunakan pergeseran dinamis untuk jadwal noise.

time_shift_type ("exponential", defaultnya "exponential") : Jenis pergeseran waktu yang 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[[diffusers.DPMSolverSinglestepScheduler.add_noise]]

add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)

Sumber

Parameter:

original_samples (torch.Tensor) : Sampel asli tanpa noise.

noise (torch.Tensor) : Kebisingan yang akan ditambahkan ke sampel.

timesteps (torch.IntTensor) : Langkah waktu 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[[diffusers.DPMSolverSinglestepScheduler.convert_model_output]]

convert_model_output(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, **kwargs)

Sumber

Parameter:

model_output (torch.Tensor) : Output langsung dari model difusi yang dipelajari.

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 dengan kebutuhan algoritma DPMSolver/DPMSolver++. DPM-Solver dirancang untuk mendiskritisasi integral dari model prediksi noise, sedangkan DPM-Solver++ dirancang untuk mendiskritisasi integral dari model prediksi data.

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

dpm_solver_first_order_update[[diffusers.DPMSolverSinglestepScheduler.dpm_solver_first_order_update]]

dpm_solver_first_order_update(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Sumber

Parameter:

model_output (torch.Tensor) : Output langsung dari model difusi yang dipelajari.

timestep (int) : Langkah waktu diskret 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) : Kebisingan acak yang digunakan oleh varian solver stokastik (sde-*). Diperlukan ketika algorithm_type diatur 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[[diffusers.DPMSolverSinglestepScheduler.get_order_list]]

get_order_list(num_inference_steps: int)

Sumber

Parameter:

num_inference_steps (int) : Jumlah langkah difusi yang digunakan saat menghasilkan sampel dengan model terlatih sebelumnya.

Mengembalikan: list[int]

Daftar urutan solver untuk setiap timestep.

Menghitung urutan solver pada setiap langkah waktu.

index_for_timestep[[diffusers.DPMSolverSinglestepScheduler.index_for_timestep]]

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

Sumber

Parameter:

timestep (int atau torch.Tensor) : timestep yang akan dicari indeksnya.

schedule_timesteps (torch.Tensor, opsional) : Jadwal timestep untuk dicari. Jika None, menggunakan self.timesteps.

Mengembalikan: int

Indeks timestep dalam jadwal.

Cari indeks untuk timestep tertentu dalam jadwal.

scale_model_input[[diffusers.DPMSolverSinglestepScheduler.scale_model_input]]

scale_model_input(sample: Tensor, *args, **kwargs)

Sumber

Parameter:

sample (torch.Tensor) : Sampel 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[[diffusers.DPMSolverSinglestepScheduler.set_begin_index]]

set_begin_index(begin_index: int = 0)

Sumber

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[[diffusers.DPMSolverSinglestepScheduler.set_timesteps]]

set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, mu: float | None = None, timesteps: list[int] | None = None)

Sumber

Parameter:

num_inference_steps (int, opsional) : Jumlah langkah difusi yang digunakan saat menghasilkan sampel dengan model terlatih sebelumnya.

device (str atau torch.device, opsional) : Perangkat tempat timestep harus dipindahkan. Jika None, timestep 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 spasi arbitrer antar timesteps. Jika None, maka strategi spasi timestep default dengan spasi yang sama antar timesteps schedule digunakan. Jika timesteps diteruskan, num_inference_steps harus None.

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

singlestep_dpm_solver_second_order_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_second_order_update]]

singlestep_dpm_solver_second_order_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Sumber

Parameter:

model_output_list (list[torch.Tensor]) : Output langsung dari model difusi yang telah dipelajari pada timestep saat ini dan timestep berikutnya.

timestep (int) : Langkah waktu diskret 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) : Kebisingan acak yang digunakan oleh varian solver stokastik (sde-*). Diperlukan ketika algorithm_type diatur 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[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_third_order_update]]

singlestep_dpm_solver_third_order_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Sumber

Parameter:

model_output_list (list[torch.Tensor]) : Output langsung dari model difusi yang telah dipelajari pada timestep saat ini dan timestep berikutnya.

timestep (int) : Langkah waktu diskret 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) : Kebisingan acak yang digunakan oleh varian solver stokastik (sde-*). Diperlukan ketika algorithm_type diatur 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[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_update]]

singlestep_dpm_solver_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, order: int = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Sumber

Parameter:

model_output_list (list[torch.Tensor]) : Output langsung dari model difusi yang telah dipelajari pada timestep saat ini dan timestep berikutnya.

timestep (int) : Langkah waktu diskret 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) : Kebisingan acak yang digunakan oleh varian solver stokastik (sde-*). Diperlukan ketika algorithm_type diatur 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[[diffusers.DPMSolverSinglestepScheduler.step]]

step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)

Sumber

Parameter:

model_output (torch.Tensor) : Output langsung dari model difusi yang telah 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 untuk pengambilan sampel stokastik.

return_dict (bool, defaultnya True) : Apakah akan mengembalikan SchedulerOutput atau tuple.

Mengembalikan: SchedulerOutput atau tuple

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

Prediksikan sampel dari langkah waktu sebelumnya dengan membalikkan SDE. Fungsi ini menyebarkan sampel dengan DPMSolver singlestep.

SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)

Sumber

Parameter:

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

Kelas dasar untuk keluaran dari fungsi step sebuah scheduler.

Xet Storage Details

Size:
20.3 kB
·
Xet hash:
1ec9a9d5a7aeeb84863f6004e74530b0b153fe814148828cc281188f5fc7e421

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.