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 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]]

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

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 và 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]]

apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])

Nguồn

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]]

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

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]]

q_posterior(log_p_x_0: Tensor, x_t: LongTensor, t: typing.Union[int, torch.Tensor])

Nguồn

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]]

set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device, NoneType] = None)

Nguồn

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]]

step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: LongTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)

Nguồn

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 hay tuple hay không.

Trả về: VQDiffusionSchedulerOutput hoặc tuple[torch.LongTensor]

If return_dict is True, 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() để 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]]

diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput(prev_sample: LongTensor)

Nguồn

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.