Diffusers documentation
DEISMultistepScheduler
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
< 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['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, 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 DEIS yang dapat berupa1atau2atau3. Disarankan untuk menggunakansolver_order=2untuk guided sampling, dansolver_order=3untuk unconditional sampling. - 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=True. - algorithm_type (
"deis", defaultnya"deis") — Jenis algoritma untuk solver. - solver_type (
"logrho", defaultnya"logrho") — Jenis solver untuk DEIS. - lower_order_final (
bool, defaultnyaTrue) — Apakah akan menggunakan solver orde rendah pada langkah-langkah akhir. Hanya valid untuk < 15 langkah inferensi. - 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. - 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, defaultnya0) — Offset yang ditambahkan ke langkah inferensi, sesuai kebutuhan beberapa keluarga model. - 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.
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
< 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: 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
< source >( 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
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Cari indeks untuk timestep tertentu dalam jadwal.
multistep_deis_second_order_update
< source >( 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
< source >( 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
< 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: 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 (
stratautorch.device, opsional) — Perangkat tempat timesteps harus dipindahkan. JikaNone, timesteps tidak dipindahkan. - mu (
float, opsional) — Parameter mu untuk pergeseran dinamis. Hanya digunakan ketikause_dynamic_shifting=Truedantime_shift_type="exponential".
Menetapkan langkah waktu diskrit yang digunakan untuk rantai difusi (untuk dijalankan sebelum inferensi).
langkah
< source >( 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 (
intatautorch.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, 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.
Prediksi sampel dari langkah waktu sebelumnya dengan membalikkan SDE. Fungsi ini menyebarkan sampel dengan DEIS multistep.
SchedulerOutput
kelas diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Kelas dasar untuk keluaran dari fungsi step sebuah scheduler.