Diffusers documentation

VQDiffusionScheduler

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

VQDiffusionScheduler

VQDiffusionScheduler mengubah output model transformer menjadi sampel untuk gambar tanpa noise pada langkah difusi sebelumnya. Scheduler ini diperkenalkan dalam Vector Quantized Diffusion Model for Text-to-Image Synthesis oleh Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.

Abstrak dari makalah tersebut adalah:

Kami memperkenalkan model vector quantized diffusion (VQ-Diffusion) untuk generasi teks-ke-gambar. Metode ini didasarkan pada vector quantized variational autoencoder (VQ-VAE) yang ruang latennya dimodelkan oleh varian kondisional dari Denoising Diffusion Probabilistic Model (DDPM) yang baru dikembangkan. Kami menemukan bahwa metode ruang laten ini sangat cocok untuk tugas generasi teks-ke-gambar karena tidak hanya menghilangkan bias unidireksional pada metode yang ada, tetapi juga memungkinkan kami untuk mengintegrasikan strategi mask-and-replace diffusion untuk menghindari akumulasi kesalahan, yang merupakan masalah serius pada metode yang ada. Eksperimen kami menunjukkan bahwa VQ-Diffusion menghasilkan hasil generasi teks-ke-gambar yang jauh lebih baik dibandingkan dengan model autoregressive (AR) konvensional dengan jumlah parameter yang serupa. Dibandingkan dengan metode teks-ke-gambar berbasis GAN sebelumnya, VQ-Diffusion kami dapat menangani adegan yang lebih kompleks dan meningkatkan kualitas gambar yang disintesis secara signifikan. Terakhir, kami menunjukkan bahwa komputasi generasi gambar dalam metode kami dapat dibuat sangat efisien melalui reparameterization. Dengan metode AR tradisional, waktu generasi teks-ke-gambar meningkat secara linear dengan resolusi gambar keluaran dan karenanya cukup memakan waktu bahkan untuk gambar berukuran normal. VQ-Diffusion memungkinkan kami untuk mencapai kompromi yang lebih baik antara kualitas dan kecepatan. Eksperimen kami menunjukkan bahwa model VQ-Diffusion dengan reparameterization lima belas kali lebih cepat daripada metode AR tradisional sambil mencapai kualitas gambar yang lebih baik.

VQDiffusionScheduler

kelas diffusers.VQDiffusionScheduler

< >

( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )

Parameter

  • num_vec_classes (int) — Jumlah kelas dari embedding vektor piksel laten. Termasuk kelas untuk piksel laten yang dimasker.
  • num_train_timesteps (int, defaultnya 100) — Jumlah langkah difusi untuk melatih model.
  • alpha_cum_start (float, defaultnya 0.99999) — Nilai alpha kumulatif awal.
  • alpha_cum_end (float, defaultnya 0.000009) — Nilai alpha kumulatif akhir.
  • gamma_cum_start (float, defaultnya 0.000009) — Nilai gamma kumulatif awal.
  • gamma_cum_end (float, defaultnya 0.99999) — Nilai gamma kumulatif akhir.

Penjadwal untuk difusi kuantisasi vektor.

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.

apply_cumulative_transitions

< >

( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Parameter

  • q (torch.Tensor dengan bentuk (batch size, num classes - 1, num latent pixels)) — Probabilitas log atas kelas piksel laten non-mask.
  • t (int atau torch.Tensor) — Langkah waktu yang menentukan matriks transisi kumulatif mana yang digunakan.

Mengembalikan

torch.Tensor dengan bentuk (batch size, num classes, num latent pixels)

Probabilitas log yang telah ditransisikan dengan probabilitas kelas mask yang ditambahkan.

Terapkan matriks transisi kumulatif pada langkah waktu tertentu ke probabilitas log atas kelas yang tidak dimasker.

log_Q_t_transitioning_to_known_class

< >

( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor

Parameter

  • t (int atau torch.Tensor) — Langkah waktu yang menentukan matriks transisi mana yang digunakan.
  • x_t (torch.LongTensor dengan bentuk (batch size, num latent pixels)) — Kelas dari setiap piksel laten pada waktu t.
  • log_onehot_x_t (torch.Tensor dengan bentuk (batch size, num classes, num latent pixels)) — Vektor log one-hot dari x_t.
  • cumulative (bool) — Jika cumulative adalah False, matriks transisi langkah tunggal t-1->t digunakan. Jika cumulative adalah True, matriks transisi kumulatif 0->t digunakan.

Mengembalikan

torch.Tensor

Setiap kolom dari matriks yang dikembalikan adalah sebuah baris dari log probabilitas dari matriks transisi probabilitas lengkap. Tensor memiliki bentuk (batch size, num classes - 1, num latent pixels) ketika cumulative adalah True dan bentuk (batch size, num classes, num latent pixels) selain itu.

Saat kumulatif, tensor memiliki satu baris lebih sedikit karena piksel laten awal tidak dapat dimasker.

Di mana:

  • q_n adalah distribusi probabilitas untuk proses maju dari piksel laten ke-n.
  • C_0 adalah kelas dari embedding piksel laten
  • C_k adalah kelas dari piksel laten yang dimasker

hasil non-kumulatif (tanpa logaritma):

q_0(x_t | x_{t-1\} = C_0) ... q_n(x_t | x_{t-1\} = C_0) . . . . . . . . . q_0(x_t | x_{t-1\} = C_k) ... q_n(x_t | x_{t-1\} = C_k)`} lang="" wrap={false} />

hasil kumulatif (mengabaikan logaritma):

q_0_cumulative(x_t | x_0 = C_0) ... q_n_cumulative(x_t | x_0 = C_0) . . . . . . . . . q_0_cumulative(x_t | x_0 = C_{k-1\}) ... q_n_cumulative(x_t | x_0 = C_{k-1\})`} lang="" wrap={false} />

Menghitung log probabilitas dari baris matriks transisi (kumulatif atau non-kumulatif) untuk setiap piksel laten dalam x_t.

q_posterior

< >

( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Parameter

  • log_p_x_0 (torch.Tensor dengan bentuk (batch size, num classes - 1, num latent pixels)) — Probabilitas log untuk kelas yang diprediksi dari piksel laten awal. Tidak termasuk prediksi untuk kelas yang dimasker karena gambar awal tanpa noise tidak dapat dimasker.
  • x_t (torch.LongTensor dengan bentuk (batch size, num latent pixels)) — Kelas dari setiap piksel laten pada waktu t.
  • t (int atau torch.Tensor) — Langkah waktu yang menentukan matriks transisi mana yang digunakan.

Mengembalikan

torch.Tensor dengan bentuk (batch size, num classes, num latent pixels)

Probabilitas log untuk kelas yang diprediksi dari gambar pada langkah waktu t-1.

Menghitung log probabilitas untuk kelas yang diprediksi dari gambar pada timestep t-1:

p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )

set_timesteps

< >

( num_inference_steps: intdevice: 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 timestep dan parameter proses difusi (alpha, beta, gamma) harus dipindahkan.

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

langkah

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]

Parameter

  • model_output (torch.Tensor dengan bentuk (batch size, num classes - 1, num latent pixels)) — Probabilitas log untuk kelas yang diprediksi dari piksel laten awal. Tidak termasuk prediksi untuk kelas yang dimasker karena gambar awal tanpa noise tidak dapat dimasker.
  • timestep (int atau torch.Tensor) — Timestep yang menentukan matriks transisi mana yang digunakan.
  • sample (torch.LongTensor dengan bentuk (batch size, num latent pixels)) — Kelas dari setiap piksel laten pada timestep saat ini.
  • generator (torch.Generator, opsional) — Generator bilangan acak untuk noise yang diterapkan pada p(x_{t-1} | x_t) sebelum diambil sampelnya.
  • return_dict (bool, defaultnya True) — Apakah akan mengembalikan VQDiffusionSchedulerOutput atau tuple.

Mengembalikan

VQDiffusionSchedulerOutput atau tuple[torch.LongTensor]

If return_dict is True, VQDiffusionSchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

Prediksikan sampel dari timestep sebelumnya menggunakan distribusi transisi balik. Lihat q_posterior() untuk detail lebih lanjut tentang bagaimana distribusi tersebut dihitung.

VQDiffusionSchedulerOutput

kelas diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

Parameter

  • prev_sample (torch.LongTensor dengan bentuk (batch size, num latent pixels)) — Sampel yang dihitung pada timestep sebelumnya. prev_sample harus digunakan sebagai input model berikutnya dalam loop denoising.

Kelas output untuk output fungsi langkah penjadwal.

Update on GitHub