Diffusers documentation
CMStochasticIterativeScheduler
CMStochasticIterativeScheduler
Consistency Models oleh Yang Song, Prafulla Dhariwal, Mark Chen, dan Ilya Sutskever memperkenalkan penjadwal multistep dan onestep (Algorithm 1) yang mampu menghasilkan sampel yang baik dalam satu langkah atau sejumlah kecil langkah.
Abstrak dari makalah tersebut adalah:
Model difusi telah mendorong kemajuan signifikan di bidang generasi gambar, audio, dan video, tetapi mereka bergantung pada proses sampling iteratif yang menyebabkan generasi lambat. Untuk mengatasi keterbatasan ini, kami mengusulkan model konsistensi, sebuah keluarga model baru yang menghasilkan sampel berkualitas tinggi dengan memetakan noise langsung ke data. Mereka mendukung generasi satu langkah yang cepat secara desain, sambil tetap memungkinkan sampling multi-langkah untuk menukar komputasi dengan kualitas sampel. Mereka juga mendukung pengeditan data zero-shot, seperti inpainting gambar, pewarnaan, dan super-resolusi, tanpa memerlukan pelatihan eksplisit pada tugas-tugas tersebut. Model konsistensi dapat dilatih baik dengan mendistilasi model difusi yang sudah terlatih, maupun sebagai model generatif mandiri sepenuhnya. Melalui eksperimen yang luas, kami menunjukkan bahwa mereka melampaui teknik distilasi yang ada untuk model difusi dalam sampling satu langkah dan beberapa langkah, mencapai FID state-of-the-art baru sebesar 3,55 pada CIFAR-10 dan 6,20 pada ImageNet 64x64 untuk generasi satu langkah. Ketika dilatih secara terpisah, model konsistensi menjadi keluarga model generatif baru yang dapat melampaui model generatif satu langkah, non-adversarial yang ada pada benchmark standar seperti CIFAR-10, ImageNet 64x64, dan LSUN 256x256.
Kodebase asli dapat ditemukan di openai/consistency_models.
CMStochasticIterativeScheduler
kelas diffusers.CMStochasticIterativeScheduler
< source >( num_train_timesteps: int = 40sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5s_noise: float = 1.0rho: float = 7.0clip_denoised: bool = True )
Parameter
- num_train_timesteps (
int, defaultnya 40) — Jumlah langkah difusi untuk melatih model. - sigma_min (
float, defaultnya 0.002) — Magnitudo noise minimum dalam jadwal sigma. Defaultnya 0.002 dari implementasi asli. - sigma_max (
float, defaultnya 80.0) — Magnitudo noise maksimum dalam jadwal sigma. Defaultnya 80.0 dari implementasi asli. - sigma_data (
float, defaultnya 0.5) — Standar deviasi dari distribusi data pada paper EDM. Defaultnya 0.5 dari implementasi asli. - s_noise (
float, defaultnya 1.0) — Jumlah noise tambahan untuk mengompensasi hilangnya detail selama sampling. Rentang yang wajar adalah [1.000, 1.011]. Defaultnya 1.0 dari implementasi asli. - rho (
float, defaultnya 7.0) — Parameter untuk menghitung jadwal sigma Karras dari makalah EDM. Defaultnya 7.0 dari implementasi asli. - clip_denoised (
bool, defaultnyaTrue) — Apakah akan memotong (clip) output denoised ke(-1, 1). - timesteps (
listataunp.ndarrayatautorch.Tensor, opsional) — Jadwal timestep eksplisit yang dapat ditentukan secara opsional. Timestep diharapkan berada dalam urutan menaik.
Sampling multistep dan onestep untuk model konsistensi.
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: 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.
get_scalings
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
Menghitung faktor penskalaan untuk output model konsistensi.
get_scalings_for_boundary_condition
< source >( sigma: Tensor ) → tuple[torch.Tensor, torch.Tensor]
Mendapatkan penskalaan yang digunakan dalam parameterisasi model konsistensi (dari Lampiran C makalah) untuk menegakkan kondisi batas.
>
epsilondalam persamaan untukc_skipdanc_outdiatur kesigma_min.
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Parameter
- timestep (
floatatautorch.Tensor) — Nilai timestep yang akan dicari dalam jadwal. - schedule_timesteps (
torch.Tensor, opsional) — Jadwal timestep yang akan dicari. JikaNone, gunakanself.timesteps.
Mengembalikan
int
Indeks timestep dalam jadwal. Untuk langkah pertama, mengembalikan indeks kedua jika ada beberapa kecocokan untuk menghindari pengabaian sigma saat memulai di tengah jadwal (misalnya, untuk image-to-image).
Cari indeks dari timestep tertentu dalam jadwal timestep.
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
Menskala input model konsistensi dengan (sigma**2 + sigma_data**2) ** 0.5.
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 | None = Nonedevice: typing.Union[str, torch.device] = 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. - 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 digunakan. Jikatimestepsdiberikan,num_inference_stepsharusNone.
Menetapkan langkah waktu yang digunakan untuk rantai difusi (untuk dijalankan sebelum inferensi).
sigma_to_t
< source >( sigmas: float | numpy.ndarray ) → np.ndarray
Mendapatkan langkah waktu yang diskalakan dari sigma Karras untuk input ke model konsistensi.
langkah
< source >( model_output: Tensortimestep: typing.Union[float, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → CMStochasticIterativeSchedulerOutput or tuple
Parameter
- model_output (
torch.Tensor) — Output langsung dari model difusi yang dipelajari. - timestep (
floatatautorch.Tensor) — Langkah waktu 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, defaultnyaTrue) — Apakah akan mengembalikan CMStochasticIterativeSchedulerOutput atautuple.
Mengembalikan
CMStochasticIterativeSchedulerOutput atau tuple
Jika return_dict adalah True,
CMStochasticIterativeSchedulerOutput dikembalikan,
sebaliknya sebuah tuple dikembalikan di mana elemen pertama adalah tensor sampel.
Prediksi sampel dari langkah waktu sebelumnya dengan membalik SDE. Fungsi ini menyebarkan proses difusi dari keluaran model yang dipelajari (paling sering berupa noise yang diprediksi).
CMStochasticIterativeSchedulerOutput
kelas diffusers.schedulers.scheduling_consistency_models.CMStochasticIterativeSchedulerOutput
< source >( prev_sample: Tensor )
Kelas output untuk fungsi step penjadwal.