Diffusers documentation
VQDiffusionScheduler
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
lớp diffusers.VQDiffusionScheduler
< source >( 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 )
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 kết thúc. - 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 kết thúc.
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 trình lập lịch, chẳng hạn như tải và lưu.
apply_cumulative_transitions
< source >( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Tham số
- q (
torch.Tensorcó 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 latent không bị mask. - t (
inthoặctorch.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
< source >( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor
Tham số
- t (
inthoặctorch.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.LongTensorcó 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ểmt. - log_onehot_x_t (
torch.Tensorcó hình dạng(batch size, num classes, num latent pixels)) — Các vector log one-hot củax_t. - cumulative (
bool) — Nếu cumulative làFalse, ma trận chuyển tiếp đơn bướct-1->tsẽ được sử dụng. Nếu cumulative làTrue, ma trận chuyển tiếp tích lũy0->tsẽ đượ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ủa 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_nlà 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
< source >( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
Tham số
- log_p_x_0 (
torch.Tensorcó shape(batch size, num classes - 1, num latent pixels)) — Các xác suất log cho các lớp được dự đoán của các pixel latent ban đầu. Không bao gồm dự đoán cho lớp bị mask vì ảnh unnoised ban đầu không thể bị mask. - x_t (
torch.LongTensorcó 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ểmt. - t (
inthoặctorch.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.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
Đặ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
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]
Tham số
- model_output (
torch.Tensorcó hình dạng(batch size, num classes - 1, num latent pixels)) — Các xác suất log cho các lớp được dự đoán của các pixel latent ban đầu. Không bao gồm dự đoán cho lớp bị mask vì ảnh unnoised ban đầu không thể bị mask. - timestep (
inthoặctorch.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.LongTensorcó hình dạng(batch size, num latent pixels)) — Các lớp của từng pixel tiềm ẩn tại bước thời gian hiện tại. - generator (
torch.Generator, tùy chọn) — Bộ tạo số ngẫu nhiên cho nhiễu được áp dụng lênp(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ề VQDiffusionSchedulerOutput haytuplehay 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
lớp diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput
< source >( prev_sample: LongTensor )
Lớp đầu ra cho kết quả của hàm bước của trình lập lịch.