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.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

< >

( 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

< >

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

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 latent không bị mask.
  • 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

< >

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

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ủ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_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

< >

( 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.Tensor có 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.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

< >

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

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ô hình đã được huấn luyện trước.
  • device (str hoặc torch.device, tùy chọn) — Thiết bị mà các bước thời gian (timesteps) 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

< >

( 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.Tensor có 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 (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 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ê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ề 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

lớp diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

Tham số

  • prev_sample (torch.LongTensor có hình dạng (batch size, num latent pixels)) — Mẫu được tính toán tại bước thời gian trước đó. prev_sample nên được sử 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.

Update on GitHub