Buckets:

mishig's picture
|
download
raw
15.5 kB

TCDScheduler

Trajectory Consistency Distillation oleh Jianbin Zheng, Minghui Hu, Zhongyi Fan, Chaoyue Wang, Changxing Ding, Dacheng Tao, dan Tat-Jen Cham memperkenalkan Strategic Stochastic Sampling (Algorithm 4) yang mampu menghasilkan sampel yang baik dalam jumlah langkah yang sedikit. Sebagai iterasi lanjutan dari penjadwal multistep (Algorithm 1) dalam Consistency Models, Strategic Stochastic Sampling secara khusus disesuaikan untuk fungsi konsistensi trajektori.

Abstrak dari makalah tersebut adalah:

Latent Consistency Model (LCM) memperluas Consistency Model ke ruang laten dan memanfaatkan teknik guided consistency distillation untuk mencapai kinerja yang mengesankan dalam mempercepat sintesis teks-ke-gambar. Namun, kami mengamati bahwa LCM kesulitan menghasilkan gambar yang memiliki kejelasan sekaligus kerincian detail. Untuk mengatasi keterbatasan ini, kami pertama kali menyelidiki dan menguraikan penyebab dasarnya. Investigasi kami mengidentifikasi bahwa masalah utama berasal dari kesalahan di tiga area yang berbeda. Oleh karena itu, kami memperkenalkan Trajectory Consistency Distillation (TCD), yang mencakup fungsi konsistensi lintasan dan pengambilan sampel stokastik strategis. Fungsi konsistensi lintasan mengurangi kesalahan distilasi dengan memperluas cakupan kondisi batas self-consistency dan memberikan TCD kemampuan untuk menelusuri seluruh lintasan Probability Flow ODE secara akurat. Selain itu, pengambilan sampel stokastik strategis dirancang khusus untuk menghindari kesalahan kumulatif yang melekat pada pengambilan sampel konsistensi multi-langkah, yang disesuaikan dengan cermat untuk melengkapi model TCD. Eksperimen menunjukkan bahwa TCD tidak hanya secara signifikan meningkatkan kualitas gambar pada NFE rendah, tetapi juga menghasilkan hasil yang lebih detail dibandingkan model guru pada NFE tinggi.

Kodebase asli dapat ditemukan di jabir-zheng/TCD.

TCDScheduler[[diffusers.TCDScheduler]]

diffusers.TCDScheduler[[diffusers.TCDScheduler]]

diffusers.TCDScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.00085, beta_end: float = 0.012, beta_schedule: str = 'scaled_linear', trained_betas: numpy.ndarray | list[float] | None = None, original_inference_steps: int = 50, clip_sample: bool = False, clip_sample_range: float = 1.0, set_alpha_to_one: bool = True, steps_offset: int = 0, prediction_type: str = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, timestep_spacing: str = 'leading', timestep_scaling: float = 10.0, rescale_betas_zero_snr: bool = False)

Sumber

Parameter:

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

beta_start (float, defaultnya 0.00085) : Nilai awal beta untuk inferensi.

beta_end (float, defaultnya 0.012) : Nilai beta akhir.

beta_schedule (str, defaultnya "scaled_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.

original_inference_steps (int, defaultnya 50) : Jumlah langkah inferensi default yang digunakan untuk menghasilkan jadwal timestep yang tersebar secara linear, yang dari sana pada akhirnya akan diambil num_inference_steps timestep yang tersebar merata untuk membentuk jadwal timestep final.

clip_sample (bool, defaultnya False) : Memotong sampel prediksi untuk stabilitas numerik.

clip_sample_range (float, defaultnya 1.0) : Magnitudo maksimum untuk pemotongan sampel. Hanya valid ketika clip_sample=True.

set_alpha_to_one (bool, defaultnya True) : Setiap langkah difusi menggunakan nilai produk alfa pada langkah tersebut dan pada langkah sebelumnya. Untuk langkah terakhir, tidak ada alfa sebelumnya. Ketika opsi ini True, produk alfa sebelumnya ditetapkan ke 1, selain itu menggunakan nilai alfa pada langkah 0.

steps_offset (int, defaultnya 0) : Offset yang ditambahkan ke langkah inferensi, sesuai dengan kebutuhan beberapa keluarga model.

prediction_type (str, 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) or v_prediction` (see section 2.4 of Imagen Video paper).

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.

timestep_spacing (str, defaultnya "leading") : Cara timestep harus diskalakan. Lihat Tabel 2 dari Common Diffusion Noise Schedules and Sample Steps are Flawed untuk informasi lebih lanjut.

timestep_scaling (float, defaultnya 10.0) : Faktor yang akan dikalikan dengan timesteps saat menghitung kondisi batas model konsistensi c_skip dan c_out. Meningkatkan nilai ini akan mengurangi error aproksimasi (meskipun error aproksimasi pada nilai default 10.0 sudah cukup kecil).

rescale_betas_zero_snr (bool, defaultnya False) : Apakah akan melakukan penskalaan ulang betas agar memiliki SNR terminal nol. Hal ini memungkinkan model untuk menghasilkan sampel yang sangat terang dan gelap, alih-alih membatasi pada sampel dengan kecerahan sedang. Terkait secara longgar dengan --offset_noise.

TCDScheduler mengintegrasikan Strategic Stochastic Sampling yang diperkenalkan oleh makalah Trajectory Consistency Distillation, memperluas Multistep Consistency Sampling asli untuk memungkinkan penelusuran lintasan tanpa batasan.

Kode ini didasarkan pada repositori resmi TCD(https://github.com/jabir-zheng/TCD).

Model ini mewarisi dari SchedulerMixin dan ConfigMixin. ~ConfigMixin menangani penyimpanan semua atribut konfigurasi yang diteruskan dalam fungsi __init__ scheduler, seperti num_train_timesteps. Atribut tersebut dapat diakses melalui scheduler.config.num_train_timesteps. SchedulerMixin menyediakan fungsionalitas pemuatan dan penyimpanan umum melalui fungsi SchedulerMixin.save_pretrained() dan from_pretrained().

add_noise[[diffusers.TCDScheduler.add_noise]]

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

Sumber

Parameter:

original_samples (torch.Tensor) : Sampel asli yang akan ditambahkan dengan noise.

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

timesteps (torch.IntTensor) : Langkah waktu yang menunjukkan tingkat noise untuk setiap sampel.

Mengembalikan: torch.Tensor

Sampel yang bising.

Tambahkan noise ke sampel asli sesuai dengan magnitudo noise pada setiap timestep (ini adalah proses difusi maju).

get_velocity[[diffusers.TCDScheduler.get_velocity]]

get_velocity(sample: Tensor, noise: Tensor, timesteps: IntTensor)

Sumber

Parameter:

sample (torch.Tensor) : Sampel input.

noise (torch.Tensor) : Tensor noise.

timesteps (torch.IntTensor) : Langkah waktu untuk komputasi kecepatan.

Mengembalikan: torch.Tensor

Kecepatan yang dihitung.

Hitung prediksi kecepatan dari sampel dan noise sesuai dengan rumus kecepatan.

index_for_timestep[[diffusers.TCDScheduler.index_for_timestep]]

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

Sumber

Parameter:

timestep (float atau torch.Tensor) : Nilai timestep yang akan dicari dalam jadwal.

schedule_timesteps (torch.Tensor, opsional) : Jadwal timestep untuk dicari. Jika None, menggunakan self.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.

previous_timestep[[diffusers.TCDScheduler.previous_timestep]]

previous_timestep(timestep: int)

Sumber

Parameter:

timestep (int) : Langkah waktu saat ini.

Mengembalikan: int atau torch.Tensor

Langkah waktu sebelumnya.

Hitung langkah waktu sebelumnya dalam rantai difusi.

scale_model_input[[diffusers.TCDScheduler.scale_model_input]]

scale_model_input(sample: Tensor, timestep: typing.Union[int, torch.Tensor, NoneType] = None)

Sumber

Parameter:

sample (torch.Tensor) : Sampel input.

timestep (int atau torch.Tensor, opsional) : Langkah waktu (timestep) saat ini dalam rantai difusi.

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.TCDScheduler.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.TCDScheduler.set_timesteps]]

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

Sumber

Parameter:

num_inference_steps (int, opsional) : Jumlah langkah difusi yang digunakan saat menghasilkan sampel dengan model terlatih. Jika digunakan, timesteps harus None.

device (str atau torch.device, opsional) : Perangkat tempat timestep harus dipindahkan. Jika None, timestep tidak dipindahkan.

original_inference_steps (int, opsional) : Jumlah langkah inferensi asli, yang akan digunakan untuk menghasilkan jadwal timestep yang tersebar secara linear (yang berbeda dari implementasi diffusers standar). Kami kemudian akan mengambil num_inference_steps timestep dari jadwal ini, yang tersebar merata dalam hal indeks, dan menggunakannya sebagai jadwal timestep akhir. Jika tidak diatur, ini akan secara default menggunakan atribut original_inference_steps.

timesteps (list[int], opsional) : Timesteps kustom yang digunakan untuk mendukung spasi arbitrer antar timesteps. Jika None, maka strategi spasi timestep default berupa spasi yang sama antar timesteps pada jadwal timestep pelatihan/distilasi akan digunakan. Jika timesteps diteruskan, num_inference_steps harus None.

strength (float, defaultnya 1.0) : Digunakan untuk menentukan jumlah timestep yang dipakai untuk inferensi saat menggunakan img2img, inpaint, dll.

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

langkah[[diffusers.TCDScheduler.step]]

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

eta (float, defaultnya 0.3) : Parameter stokastik (disebut gamma dalam makalah) yang digunakan untuk mengendalikan tingkat keacakan pada setiap langkah. Ketika eta = 0, ini mewakili pengambilan sampel deterministik, sedangkan eta = 1 menunjukkan pengambilan sampel sepenuhnya stokastik.

generator (torch.Generator, opsional) : Generator angka acak.

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

Mengembalikan: TCDSchedulerOutput atau tuple[torch.Tensor, torch.Tensor]

If return_dict is True, TCDSchedulerOutput is returned, otherwise a tuple is returned containing the previous sample and the predicted noised sample.

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

TCDSchedulerOutput[[diffusers.schedulers.scheduling_tcd.TCDSchedulerOutput]]

diffusers.schedulers.scheduling_tcd.TCDSchedulerOutput[[diffusers.schedulers.scheduling_tcd.TCDSchedulerOutput]]

diffusers.schedulers.scheduling_tcd.TCDSchedulerOutput(prev_sample: Tensor, pred_noised_sample: typing.Optional[torch.Tensor] = None)

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.

pred_noised_sample (torch.Tensor dengan bentuk (batch_size, num_channels, height, width) untuk gambar, opsional) : Sampel berisik yang diprediksi (x_{s}) berdasarkan output model dari timestep saat ini.

Kelas output untuk output fungsi step scheduler.

Xet Storage Details

Size:
15.5 kB
·
Xet hash:
b9dad2367b2cf580e38a466e75bcae858ecc354bd09ab09e00c5ac44f7157659

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