Diffusers 文件

VQDiffusionScheduler

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

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 值。

一種用於向量量化擴散的排程器。

此模型繼承自 SchedulerMixinConfigMixin。檢視超類文件以瞭解庫為所有排程器實現的通用方法,例如載入和儲存。

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) — 如果 cumulativeFalse,則使用單步轉換矩陣 t-1->t。如果 cumulativeTrue,則使用累積轉換矩陣 0->t

返回

torch.Tensor 形狀為 (batch size, num classes - 1, num latent pixels)

返回矩陣的每個*列*是完整機率轉換矩陣的*行*的對數機率。

當非累積時,返回 self.num_classes - 1 行,因為初始潛在畫素不能被掩碼。

其中:

  • q_n 是第 n 個潛在畫素前向過程的機率分佈。
  • C_0 是潛在畫素嵌入的一個類別
  • C_k 是掩碼潛在畫素的類別

非累積結果(省略對數)

_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)`} wrap={false} />

累積結果(省略對數)

_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\})`} wrap={false} />

計算 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 預測類別的對數機率。

計算影像在時間步 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: int device: typing.Union[str, torch.device] = None )

引數

  • num_inference_steps (int) — 使用預訓練模型生成樣本時使用的擴散步數。
  • device (strtorch.device, 可選) — 時間步和擴散過程引數(alpha、beta、gamma)應移動到的裝置。

設定用於擴散鏈的離散時間步(在推理之前執行)。

步驟

< >

( model_output: Tensor timestep: torch.int64 sample: LongTensor generator: typing.Optional[torch._C.Generator] = None return_dict: bool = True ) VQDiffusionSchedulerOutputtuple

引數

  • 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) — 是否返回 VQDiffusionSchedulerOutputtuple

返回

VQDiffusionSchedulerOutputtuple

如果 return_dictTrue,則返回 VQDiffusionSchedulerOutput,否則返回一個元組,其中第一個元素是樣本張量。

透過逆向轉換分佈預測前一個時間步的樣本。有關如何計算分佈的更多詳細資訊,請參見 q_posterior()

VQDiffusionSchedulerOutput

class diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

引數

  • prev_sample (torch.LongTensor,形狀為 (批次大小, 潛在畫素數量)) — 上一個時間步計算出的樣本 x_{t-1}。prev_sample 應作為去噪迴圈中的下一個模型輸入。

排程器步進函式輸出的輸出類。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.