Buckets:

mishig's picture
|
download
raw
12.8 kB
# VQDiffusionScheduler
`VQDiffusionScheduler` chuyển đổi đầu ra của mô hình transformer thành một mẫu cho ảnh chưa nhiễu ở bước thời gian khuếch tán trước đó. Nó được giới thiệu trong [Vector Quantized Diffusion Model for Text-to-Image Synthesis](https://huggingface.co/papers/2111.14822) của Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.
Tóm tắt từ bài báo là:
*Chúng tôi trình bày mô hình khuếch tán lượng tử hóa vector (VQ-Diffusion) cho việc tạo ảnh từ văn bản. Phương pháp này dựa trên một autoencoder biến phân lượng tử hóa vector (VQ-VAE) mà không gian ẩn của nó được mô hình hóa bởi một biến thể có điều kiện của Mô hình Xác suất Khuếch tán Khử nhiễu (DDPM) mới được phát triển gần đây. Chúng tôi nhận thấy rằng phương pháp không gian ẩn này rất phù hợp cho các tác vụ tạo ảnh từ văn bản vì nó không chỉ loại bỏ thiên kiến một chiều so với các phương pháp hiện có mà còn cho phép chúng tôi tích hợp chiến lược khuếch tán che mặt nạ và thay thế để tránh sự tích lũy sai số, vốn là một vấn đề nghiêm trọng của các phương pháp hiện tại. Các thí nghiệm của chúng tôi cho thấy VQ-Diffusion tạo ra kết quả tạo ảnh từ văn bản tốt hơn đáng kể so với các mô hình tự hồi quy (AR) thông thường có cùng số lượng tham số. So với các phương pháp tạo ảnh từ văn bản dựa trên GAN trước đây, VQ-Diffusion của chúng tôi có thể xử lý các cảnh phức tạp hơn và cải thiện chất lượng ảnh tổng hợp một cách đáng kể. Cuối cùng, chúng tôi chỉ ra rằng tính toán tạo ảnh trong phương pháp của chúng tôi có thể được thực hiện hiệu quả cao nhờ tái tham số hóa. Với các phương pháp AR truyền thống, thời gian tạo ảnh từ văn bản tăng tuyến tính theo độ phân giải của ảnh đầu ra và do đó khá tốn thời gian ngay cả với các ảnh có kích thước thông thường. VQ-Diffusion cho phép chúng tôi đạt được sự đánh đổi tốt hơn giữa chất lượng và tốc độ. Các thí nghiệm của chúng tôi chỉ ra rằng mô hình VQ-Diffusion với tái tham số hóa nhanh gấp mười lăm lần so với các phương pháp AR truyền thống trong khi vẫn đạt được chất lượng ảnh tốt hơn.*
## 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)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L142)
**Tham số:**
num_vec_classes (`int`) : Số lượng lớp của các vector nhúng của các pixel tiềm ẩn. Bao gồm cả lớp cho pixel tiềm ẩn bị che.
num_train_timesteps (`int`, mặc định là `100`) : Số bước khuếch tán để huấn luyện mô hình.
alpha_cum_start (`float`, mặc định là `0.99999`) : Giá trị alpha tích lũy ban đầu.
alpha_cum_end (`float`, mặc định là `0.000009`) : Giá trị alpha tích lũy cuối cùng.
gamma_cum_start (`float`, mặc định là `0.000009`) : Giá trị gamma tích lũy ban đầu.
gamma_cum_end (`float`, mặc định là `0.99999`) : Giá trị gamma tích lũy cuối cùng.
Bộ lập lịch cho khuếch tán lượng tử hóa vector.
Mô hình này kế thừa từ [SchedulerMixin](/docs/diffusers/main/vi/api/schedulers/overview#diffusers.SchedulerMixin) và [ConfigMixin](/docs/diffusers/main/vi/api/configuration#diffusers.ConfigMixin). Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các scheduler, chẳng hạn như tải và lưu.
#### apply_cumulative_transitions[[diffusers.VQDiffusionScheduler.apply_cumulative_transitions]]
```python
apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L491)
**Tham số:**
q (`torch.Tensor` có hình dạng `(batch size, num classes - 1, num latent pixels)`) : Các xác suất log trên các lớp pixel tiềm ẩn không bị che.
t (`int` hoặc `torch.Tensor`) : Bước thời gian xác định ma trận chuyển tiếp tích lũy nào được sử dụng.
**Trả về:** `torch.Tensor` có hình dạng `(batch size, num classes, num latent pixels)`
Các xác suất log đã chuyển tiếp với các xác suất lớp mặt nạ được nối thêm vào.
Áp dụng ma trận chuyển tiếp tích lũy tại một bước thời gian lên các xác suất log của các lớp không bị che.
#### 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)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L392)
**Tham số:**
t (`int` hoặc `torch.Tensor`) : Bước thời gian xác định ma trận chuyển tiếp nào được sử dụng.
x_t (`torch.LongTensor` có hình dạng `(batch size, num latent pixels)`) : Các lớp của mỗi pixel tiềm ẩn tại thời điểm `t`.
log_onehot_x_t (`torch.Tensor` có hình dạng `(batch size, num classes, num latent pixels)`) : Các vector log one-hot của `x_t`.
cumulative (`bool`) : Nếu cumulative là `False`, ma trận chuyển tiếp đơn bước `t-1`->`t` sẽ được sử dụng. Nếu cumulative là `True`, ma trận chuyển tiếp tích lũy `0`->`t` sẽ được sử dụng.
**Trả về:** `torch.Tensor`
Mỗi _cột_ của ma trận trả về là một _dòng_ các log xác suất của ma trận chuyển tiếp xác suất đầy đủ. Tensor có hình dạng `(batch size, num classes - 1, num latent pixels)` khi `cumulative` là `True` và hình dạng `(batch size, num classes, num latent pixels)` trong các trường hợp khác.
Khi tích lũy, tensor có ít hơn một hàng vì pixel tiềm năng ban đầu không thể bị che.
Trong đó:
- `q_n` là phân phối xác suất cho quá trình tiến của pixel tiềm ẩn thứ `n`.
- C_0 là một lớp của nhúng pixel tiềm ẩn
- C_k là lớp của pixel tiềm ẩn bị che
kết quả không tích lũy (bỏ qua logarit):
```
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)
```
kết quả tích lũy (bỏ qua logarit):
```
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})
```
Tính toán xác suất log của các hàng từ ma trận chuyển tiếp (tích lũy hoặc không tích lũy) cho mỗi pixel ẩn trong `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])
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L281)
**Tham số:**
log_p_x_0 (`torch.Tensor` có hình dạng `(batch size, num classes - 1, num latent pixels)`) : Xác suất log cho các lớp được dự đoán của các pixel tiềm năng ban đầu. Không bao gồm dự đoán cho lớp bị che (masked) vì ảnh không nhiễu ban đầu không thể bị che.
x_t (`torch.LongTensor` có hình dạng `(batch size, num latent pixels)`) : Các lớp của mỗi pixel tiềm ẩn tại thời điểm `t`.
t (`int` hoặc `torch.Tensor`) : Bước thời gian xác định ma trận chuyển tiếp nào được sử dụng.
**Trả về:** `torch.Tensor` có hình dạng `(batch size, num classes, num latent pixels)`
Xác suất log của các lớp được dự đoán cho hình ảnh tại bước thời gian `t-1`.
Tính toán xác suất log cho các lớp được dự đoán của hình ảnh tại bước thời gian `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)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L214)
**Tham số:**
num_inference_steps (`int`) : Số bước khuếch tán được sử dụng khi tạo mẫu bằng một mô hình đã được huấn luyện trước.
device (`str` hoặc `torch.device`, *tuỳ chọn*) : Thiết bị mà các bước thời gian và các tham số của quá trình khuếch tán (alpha, beta, gamma) sẽ được chuyển đến.
Đặt các bước thời gian rời rạc được sử dụng cho chuỗi khuếch tán (cần chạy trước khi suy luận).
#### bước[[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)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L236)
**Tham số:**
model_output (`torch.Tensor` có hình dạng `(batch size, num classes - 1, num latent pixels)`) : Xác suất log cho các lớp được dự đoán của các pixel tiềm năng ban đầu. Không bao gồm dự đoán cho lớp bị che (masked) vì ảnh không nhiễu ban đầu không thể bị che.
timestep (`int` hoặc `torch.Tensor`) : Bước thời gian xác định các ma trận chuyển tiếp nào sẽ được sử dụng.
sample (`torch.LongTensor` có hình dạng `(batch size, num latent pixels)`) : Các lớp của mỗi pixel tiềm ẩn tại bước thời gian hiện tại.
generator (`torch.Generator`, *tuỳ chọn*) : Bộ tạo số ngẫu nhiên cho nhiễu được áp dụng lên `p(x_{t-1} | x_t)` trước khi lấy mẫu từ phân phối này.
return_dict (`bool`, mặc định là `True`) : Có nên trả về một [VQDiffusionSchedulerOutput](/docs/diffusers/main/vi/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) hay `tuple` hay không.
**Trả về:** [VQDiffusionSchedulerOutput](/docs/diffusers/main/vi/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) hoặc `tuple[torch.LongTensor]`
If return_dict is `True`, [VQDiffusionSchedulerOutput](/docs/diffusers/main/vi/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.
Dự đoán mẫu từ bước thời gian trước đó bằng phân phối chuyển tiếp ngược. Xem [q_posterior()](/docs/diffusers/main/vi/api/schedulers/vq_diffusion#diffusers.VQDiffusionScheduler.q_posterior) để biết thêm chi tiết về cách phân phối được tính toán.
## 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)
```
[Nguồn](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L27)
**Tham số:**
prev_sample (`torch.LongTensor` có shape `(batch size, num latent pixels)`) : Mẫu được tính ở bước thời gian trước đó. `prev_sample` nên được dùng làm đầu vào mô hình tiếp theo trong vòng lặp khử nhiễu.
Lớp đầu ra cho kết quả của hàm bước của trình lập lịch.

Xet Storage Details

Size:
12.8 kB
·
Xet hash:
55b32b30e15909b9e2407f34676f1ae2680a71e2e55dcc7739eb448159ffd73b

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