Buckets:

mishig's picture
|
download
raw
16.2 kB

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

diffusers.DEISMultistepScheduler[[diffusers.DEISMultistepScheduler]]

diffusers.DEISMultistepScheduler(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['deis'] = 'deis', solver_type: typing.Literal['logrho'] = 'logrho', lower_order_final: bool = True, 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, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0, 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) : Orde 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 ambang dinamis. Hanya valid ketika thresholding=True.

sample_max_value (float, defaultnya 1.0) : Nilai ambang untuk pengambangan 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 lebih rendah pada langkah-langkah akhir. Hanya valid untuk < 15 langkah inferensi.

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.

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 dengan 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 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[[diffusers.DEISMultistepScheduler.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.DEISMultistepScheduler.convert_model_output]]

convert_model_output(model_output: Tensor, *args, sample: 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.

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[[diffusers.DEISMultistepScheduler.deis_first_order_update]]

deis_first_order_update(model_output: Tensor, *args, sample: 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.

Mengembalikan: torch.Tensor

Tensor sampel pada langkah waktu sebelumnya.

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

index_for_timestep[[diffusers.DEISMultistepScheduler.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.

multistep_deis_second_order_update[[diffusers.DEISMultistepScheduler.multistep_deis_second_order_update]]

multistep_deis_second_order_update(model_output_list: list[torch.Tensor], *args, sample: 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.

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[[diffusers.DEISMultistepScheduler.multistep_deis_third_order_update]]

multistep_deis_third_order_update(model_output_list: list[torch.Tensor], *args, sample: 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.

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

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

Sumber

Parameter:

num_inference_steps (int) : 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) : 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[[diffusers.DEISMultistepScheduler.step]]

step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, 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.

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.

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

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:
16.2 kB
·
Xet hash:
e2f57ff27aad1224886ed83bb2f5d0396520429787f37e73dc0eba85cacc694d

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