Diffusers documentation

EDMDPMSolverMultistepScheduler

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

EDMDPMSolverMultistepScheduler

EDMDPMSolverMultistepScheduler adalah formulasi Karras dari DPMSolverMultistepScheduler, sebuah scheduler 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.

EDMDPMSolverMultistepScheduler

kelas diffusers.EDMDPMSolverMultistepScheduler

< >

( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )

Parameter

  • sigma_min (float, opsional, default 0.002) — Magnitudo noise minimum dalam jadwal sigma. Nilai ini diatur ke 0.002 dalam paper EDM [1]; rentang yang wajar adalah [0, 10].
  • sigma_max (float, opsional, default 80.0) — Magnitudo noise maksimum dalam jadwal sigma. Nilai ini diatur ke 80.0 dalam paper EDM [1]; rentang yang wajar adalah [0.2, 80.0].
  • sigma_data (float, opsional, default 0.5) — Standar deviasi dari distribusi data. Nilai ini diatur ke 0.5 dalam paper EDM [1].
  • sigma_schedule (str, opsional, defaultnya karras) — Jadwal sigma untuk menghitung sigmas. Secara default, kami menggunakan jadwal yang diperkenalkan dalam paper EDM (https://huggingface.co/papers/2206.00364). Nilai lain yang dapat diterima adalah “exponential”. Jadwal eksponensial ini diintegrasikan ke dalam model ini: https://huggingface.co/stabilityai/cosxl.
  • num_train_timesteps (int, defaultnya 1000) — Jumlah langkah difusi untuk melatih model.
  • prediction_type (str, defaults to epsilon, optional) — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample) or v_prediction` (see section 2.4 of Imagen Video paper).
  • rho (float, opsional, default 7.0) — Parameter rho dalam jadwal sigma Karras. Nilai ini diset ke 7.0 dalam paper EDM [1].
  • 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.
  • 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 (str, defaultnya dpmsolver++) — Jenis algoritma untuk solver; bisa berupa dpmsolver++ atau sde-dpmsolver++. Jenis 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 (str, 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 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.
  • final_sigmas_type (str, 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.

Menerapkan DPMSolverMultistepScheduler dalam formulasi EDM seperti yang disajikan dalam Karras et al. 2022 [1]. EDMDPMSolverMultistepScheduler adalah solver ordo tinggi khusus yang cepat untuk ODE difusi.

[1] Karras, Tero, dkk. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364

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: Tensor ) → torch.Tensor

Parameter

  • original_samples (torch.Tensor) — Sampel asli yang akan ditambahkan dengan noise.
  • noise (torch.Tensor) — Tensor noise yang akan ditambahkan ke sampel asli.
  • timesteps (torch.Tensor) — Timesteps untuk menambahkan noise, yang menentukan tingkat noise dari jadwal.

Mengembalikan

torch.Tensor

Sampel berisik dengan tambahan noise yang diskalakan sesuai dengan jadwal timestep.

Tambahkan noise ke sampel asli sesuai dengan jadwal noise pada timestep yang ditentukan.

convert_model_output

< >

( model_output: Tensorsample: Tensor ) → torch.Tensor

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, 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: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor

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.
  • noise (torch.Tensor, opsional) — Tensor noise yang akan ditambahkan ke sampel asli.

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: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → 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.
  • noise (torch.Tensor, opsional) — Tensor noise yang akan ditambahkan ke sampel asli.

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: listsample: Tensor ) → 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 DPMSolver multistep orde ketiga.

precondition_inputs

< >

( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parameter

  • sample (torch.Tensor) — Tensor sampel input untuk preconditioning.
  • sigma (float atau torch.Tensor) — Nilai sigma (tingkat noise) saat ini.

Mengembalikan

torch.Tensor

Contoh input yang diskalakan.

Lakukan pra-kondisi pada sampel input dengan menskalakannya sesuai dengan formulasi EDM.

precondition_noise

< >

( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parameter

  • sigma (float atau torch.Tensor) — Nilai sigma (level noise) yang akan diprecondition.

Mengembalikan

torch.Tensor

Nilai noise preconditioned yang dihitung sebagai 0.25 * log(sigma).

Prakondisikan tingkat noise dengan menerapkan transformasi logaritmik.

precondition_outputs

< >

( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parameter

  • sample (torch.Tensor) — Tensor sampel input.
  • model_output (torch.Tensor) — Output langsung dari model difusi yang dipelajari.
  • sigma (float atau torch.Tensor) — Nilai sigma (tingkat noise) saat ini.

Mengembalikan

torch.Tensor

Contoh yang telah dinoised yang dihitung dengan menggabungkan koneksi lompatan dan penskalaan output.

Prakondisikan keluaran model sesuai dengan formulasi EDM.

scale_model_input

< >

( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor

Parameter

  • sample (torch.Tensor) — Tensor sampel input.
  • timestep (float atau torch.Tensor) — Langkah waktu saat ini dalam rantai difusi.

Mengembalikan

torch.Tensor

Contoh input yang diskalakan.

Skalakan input model denoising agar sesuai dengan algoritma Euler. Menjamin interoperabilitas dengan scheduler yang memerlukan penskalaan 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, NoneType] = None )

Parameter

  • num_inference_steps (int) — 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.

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] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple

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.
  • generator (torch.Generator, opsional) — Generator angka acak.
  • return_dict (bool) — Apakah akan mengembalikan SchedulerOutput atau tuple.

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 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