Buckets:

mishig's picture
|
download
raw
11.4 kB
# 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](https://huggingface.co/papers/2111.14822) 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[[diffusers.VQDiffusionScheduler]]
#### diffusers.VQDiffusionScheduler[[diffusers.VQDiffusionScheduler]]
```python
diffusers.VQDiffusionScheduler(num_vec_classes: int, num_train_timesteps: int = 100, alpha_cum_start: float = 0.99999, alpha_cum_end: float = 9e-06, gamma_cum_start: float = 9e-06, gamma_cum_end: float = 0.99999)
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L142)
**Parameter:**
num_vec_classes (`int`) : Jumlah kelas dari vektor embedding 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](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin) dan [ConfigMixin](/docs/diffusers/main/id/api/configuration#diffusers.ConfigMixin). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan pustaka ini untuk semua scheduler, seperti pemuatan dan penyimpanan.
#### apply_cumulative_transitions[[diffusers.VQDiffusionScheduler.apply_cumulative_transitions]]
```python
apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L491)
**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`) : timestep 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[[diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class]]
```python
log_Q_t_transitioning_to_known_class(t: typing.Union[int, torch.Tensor], x_t: LongTensor, log_onehot_x_t: Tensor, cumulative: bool)
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L392)
**Parameter:**
t (`int` atau `torch.Tensor`) : timestep 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)
```
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})
```
Menghitung log probabilitas dari baris matriks transisi (kumulatif atau non-kumulatif) untuk setiap piksel laten dalam `x_t`.
#### q_posterior[[diffusers.VQDiffusionScheduler.q_posterior]]
```python
q_posterior(log_p_x_0: Tensor, x_t: LongTensor, t: typing.Union[int, torch.Tensor])
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L281)
**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`) : timestep 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[[diffusers.VQDiffusionScheduler.set_timesteps]]
```python
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device, NoneType] = None)
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L214)
**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 dan parameter proses difusi (alpha, beta, gamma) harus dipindahkan.
Menetapkan langkah waktu diskrit yang digunakan untuk rantai difusi (untuk dijalankan sebelum inferensi).
#### langkah[[diffusers.VQDiffusionScheduler.step]]
```python
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: LongTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L236)
**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 latent pixel 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](/docs/diffusers/main/id/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) atau `tuple`.
**Mengembalikan:** [VQDiffusionSchedulerOutput](/docs/diffusers/main/id/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) atau `tuple[torch.LongTensor]`
If return_dict is `True`, [VQDiffusionSchedulerOutput](/docs/diffusers/main/id/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.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()](/docs/diffusers/main/id/api/schedulers/vq_diffusion#diffusers.VQDiffusionScheduler.q_posterior) untuk detail lebih lanjut tentang bagaimana distribusi tersebut dihitung.
## VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]
#### diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]
```python
diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput(prev_sample: LongTensor)
```
[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L27)
**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.

Xet Storage Details

Size:
11.4 kB
·
Xet hash:
1d48cfaa367c8d152e0c8f2823efc2fa22b4909626e45b26bfa8ae381e2df463

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