Diffusers 文件
VQDiffusionScheduler
並獲得增強的文件體驗
開始使用
VQDiffusionScheduler
VQDiffusionScheduler
將 Transformer 模型的輸出轉換為前一個擴散時間步未去噪影像的樣本。它由 Shuyang Gu、Dong Chen、Jianmin Bao、Fang Wen、Bo Zhang、Dongdong Chen、Lu Yuan 和 Baining Guo 在 用於文字到影像合成的向量量化擴散模型 中引入。
論文摘要如下:
我們提出了一種用於文字到影像生成的向量量化擴散(VQ-Diffusion)模型。該方法基於向量量化變分自動編碼器(VQ-VAE),其潛在空間由最近開發的去噪擴散機率模型(DDPM)的條件變體建模。我們發現這種潛在空間方法非常適合文字到影像生成任務,因為它不僅消除了現有方法的單向偏差,而且還允許我們採用掩蔽和替換擴散策略,以避免誤差累積,這是現有方法中一個嚴重的問題。我們的實驗表明,與引數數量相似的傳統自迴歸(AR)模型相比,VQ-Diffusion 生成的文字到影像結果顯著更好。與之前的基於 GAN 的文字到影像方法相比,我們的 VQ-Diffusion 可以處理更復雜的場景,並大幅提高合成影像的質量。最後,我們展示了透過重引數化,我們方法中的影像生成計算可以變得高效。對於傳統的 AR 方法,文字到影像生成時間隨輸出影像解析度線性增加,即使對於普通大小的影像也相當耗時。VQ-Diffusion 允許我們在質量和速度之間取得更好的平衡。我們的實驗表明,經過重引數化的 VQ-Diffusion 模型比傳統的 AR 方法快十五倍,同時實現了更好的影像質量。
VQDiffusionScheduler
class 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 )
引數
- num_vec_classes (
int
) — 潛在畫素向量嵌入的類別數量。包括掩碼潛在畫素的類別。 - num_train_timesteps (
int
, 預設為 100) — 訓練模型的擴散步數。 - alpha_cum_start (
float
, 預設為 0.99999) — 起始累積 alpha 值。 - alpha_cum_end (
float
, 預設為 0.00009) — 結束累積 alpha 值。 - gamma_cum_start (
float
, 預設為 0.00009) — 起始累積 gamma 值。 - gamma_cum_end (
float
, 預設為 0.99999) — 結束累積 gamma 值。
一種用於向量量化擴散的排程器。
此模型繼承自 SchedulerMixin 和 ConfigMixin。檢視超類文件以瞭解庫為所有排程器實現的通用方法,例如載入和儲存。
log_Q_t_transitioning_to_known_class
< 來源 >( t: torch.int32 x_t: LongTensor log_onehot_x_t: Tensor cumulative: bool ) → torch.Tensor
形狀為 (batch size, num classes - 1, num latent pixels)
引數
- t (
torch.Long
) — 決定使用哪個轉換矩陣的時間步。 - x_t (
torch.LongTensor
形狀為(batch size, num latent pixels)
) — 在時間t
時每個潛在畫素的類別。 - log_onehot_x_t (
torch.Tensor
形狀為(batch size, num classes, num latent pixels)
) —x_t
的對數 one-hot 向量。 - cumulative (
bool
) — 如果cumulative
為False
,則使用單步轉換矩陣t-1
->t
。如果cumulative
為True
,則使用累積轉換矩陣0
->t
。
返回
torch.Tensor
形狀為 (batch size, num classes - 1, num latent pixels)
返回矩陣的每個*列*是完整機率轉換矩陣的*行*的對數機率。
當非累積時,返回 self.num_classes - 1
行,因為初始潛在畫素不能被掩碼。
其中:
q_n
是第n
個潛在畫素前向過程的機率分佈。- C_0 是潛在畫素嵌入的一個類別
- C_k 是掩碼潛在畫素的類別
非累積結果(省略對數)
累積結果(省略對數)
計算 x_t
中每個潛在畫素的(累積或非累積)轉換矩陣行的對數機率。
q_posterior
< 來源 >( log_p_x_0 x_t t ) → torch.Tensor
形狀為 (batch size, num classes, num latent pixels)
引數
- log_p_x_0 (
torch.Tensor
形狀為(batch size, num classes - 1, num latent pixels)
) — 初始潛在畫素預測類別的對數機率。不包括對掩碼類別的預測,因為初始未去噪影像不能被掩碼。 - x_t (
torch.LongTensor
形狀為(batch size, num latent pixels)
) — 在時間t
時每個潛在畫素的類別。 - t (
torch.Long
) — 決定使用哪個轉換矩陣的時間步。
返回
torch.Tensor
形狀為 (batch size, num classes, num latent pixels)
影像在時間步 t-1
預測類別的對數機率。
set_timesteps
< 來源 >( num_inference_steps: int device: typing.Union[str, torch.device] = None )
設定用於擴散鏈的離散時間步(在推理之前執行)。
步驟
< 來源 >( model_output: Tensor timestep: torch.int64 sample: LongTensor generator: typing.Optional[torch._C.Generator] = None return_dict: bool = True ) → VQDiffusionSchedulerOutput 或 tuple
引數
- log_p_x_0 — (
torch.Tensor
形狀為(batch size, num classes - 1, num latent pixels)
): 初始潛在畫素預測類別的對數機率。不包括對掩碼類別的預測,因為初始未去噪影像不能被掩碼。 - t (
torch.long
) — 決定使用哪個轉換矩陣的時間步。 - x_t (
torch.LongTensor
形狀為(batch size, num latent pixels)
) — 在時間t
時每個潛在畫素的類別。 - generator (
torch.Generator
, 或None
) — 在從p(x_{t-1} | x_t)
取樣之前應用於其噪聲的隨機數生成器。 - return_dict (
bool
, 可選, 預設為True
) — 是否返回 VQDiffusionSchedulerOutput 或tuple
。
返回
VQDiffusionSchedulerOutput 或 tuple
如果 return_dict
為 True
,則返回 VQDiffusionSchedulerOutput,否則返回一個元組,其中第一個元素是樣本張量。
透過逆向轉換分佈預測前一個時間步的樣本。有關如何計算分佈的更多詳細資訊,請參見 q_posterior()。
VQDiffusionSchedulerOutput
class diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput
< 源 >( prev_sample: LongTensor )
排程器步進函式輸出的輸出類。