Diffusers documentation
VQDiffusionScheduler
VQDiffusionScheduler
VQDiffusionScheduler は、transformer モデルの出力を、直前の拡散タイムステップにおけるノイズ除去済み画像のサンプルに変換します。Shuyang Gu、Dong Chen、Jianmin Bao、Fang Wen、Bo Zhang、Dongdong Chen、Lu Yuan、Baining Guo による Vector Quantized Diffusion Model for Text-to-Image Synthesis で紹介されました。
論文の抄録は以下の通りです:
テキストから画像を生成するためのベクトル量子化拡散(VQ-Diffusion)モデルを提案します。この手法は、潜在空間を最近開発されたDenoising Diffusion Probabilistic Model(DDPM)の条件付きバリアントでモデル化するベクトル量子化変分オートエンコーダ(VQ-VAE)に基づいています。この潜在空間手法は、既存の手法に存在する一方向性のバイアスを排除するだけでなく、既存の手法における深刻な問題である誤差の蓄積を回避するために、マスクと置換の拡散戦略を組み込むこともできるため、テキストから画像を生成するタスクに非常に適していることがわかりました。実験により、同程度のパラメータ数を持つ従来の自己回帰(AR)モデルと比較した場合、VQ-Diffusionははるかに優れたテキストから画像を生成する結果をもたらすことが示されました。従来のGANベースのテキストから画像を生成する手法と比較すると、VQ-Diffusionはより複雑なシーンを処理でき、合成画像の品質を大幅に向上させることができます。最後に、当社の手法における画像生成の計算を、再パラメータ化によって非常に効率的にできることを示します。従来のAR手法では、テキストから画像を生成する時間は出力画像の解像度に対して線形に増加するため、通常のサイズの画像であってもかなり時間がかかります。VQ-Diffusionにより、品質と速度の間のより良いトレードオフを実現できます。実験の結果、再パラメータ化を備えたVQ-Diffusionモデルは、従来のAR手法よりも15倍速く、より良い画像品質を実現していることが示されました。
VQDiffusionScheduler
クラス 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 )
パラメータ
- num_vec_classes (
int) — 潜在ピクセルのベクトル埋め込みのクラス数です。マスクされた潜在ピクセルのクラスも含まれます。 - num_train_timesteps (
int、デフォルト値は100) — モデルを学習するための拡散ステップ数。 - alpha_cum_start (
float、デフォルト値は0.99999) — 開始時の累積 alpha 値です。 - alpha_cum_end (
float、デフォルト値は0.000009) — 終了時の累積 alpha 値です。 - gamma_cum_start (
float、デフォルトは0.000009) — 開始時の累積ガンマ値です。 - gamma_cum_end (
float、デフォルト値は0.99999) — 終了時の累積ガンマ値です。
ベクトル量子化拡散のためのスケジューラー。
このモデルは SchedulerMixin および ConfigMixin を継承しています。読み込みや保存など、ライブラリがすべてのスケジューラに対して実装している汎用的なメソッドについては、スーパークラスのドキュメントを参照してください。
apply_cumulative_transitions
< source >( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)
タイムステップにおける累積遷移行列を、マスクされていないクラスの対数確率に適用します。
log_Q_t_transitioning_to_known_class
< source >( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor
パラメータ
- t (
intまたはtorch.Tensor) — どの遷移行列が使用されるかを決定するタイムステップです。 - 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の log one-hot ベクトルです。 - cumulative (
bool) —Falseの場合、単一ステップの遷移行列t-1->tが使用されます。Trueの場合、累積遷移行列0->tが使用されます。
戻り値
torch.Tensor
返される行列の各列は、完全確率遷移行列の行である対数確率です。cumulativeがTrueの場合、テンソルの形状は(batch size, num classes - 1, num latent pixels)となり、それ以外の場合は(batch size, num classes, num latent pixels)となります。
累積の場合、初期の潜在ピクセルをマスクできないため、テンソルは1行少なくなります。
ここで:
q_nは、n番目の潜在ピクセルのフォワードプロセスにおける確率分布です。- C_0 は潜在ピクセル埋め込みのクラスです
- C_k は、マスクされた潜在ピクセルのクラスです
非累積の結果(対数を省略):
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)累積結果(対数を省略):
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})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)
パラメータ
- 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 (
intまたはtorch.Tensor) — どの遷移行列が使用されるかを決定するタイムステップです。
戻り値
torch.Tensor、形状 (batch size, num classes, num latent pixels)
タイムステップ t-1 における、画像の予測クラスに対する対数確率です。
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
拡散チェーンで使用される離散タイムステップを設定します(推論の実行前に実行する必要があります)。
ステップ
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]
パラメータ
- model_output (
torch.Tensor、shape(batch size, num classes - 1, num latent pixels)) — 初期潜在ピクセルの予測クラスに対する対数確率です。初期のノイズなし画像はマスクできないため、マスクされたクラスの予測は含まれません。 - timestep (
intまたはtorch.Tensor) — どの遷移行列を使用するかを決定するタイムステップ。 - sample (
torch.LongTensor、形状(batch size, num latent pixels)) — 現在のタイムステップにおける、各潜在ピクセルのクラス。 - generator (
torch.Generator、任意) —p(x_{t-1} | x_t)からサンプリングする前に適用されるノイズ用の乱数生成器。 - return_dict (
bool、デフォルトはTrue) —tupleを返すか、VQDiffusionSchedulerOutput を返すかを指定します。
戻り値
VQDiffusionSchedulerOutput または tuple[torch.LongTensor]
True の場合、VQDiffusionSchedulerOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。
逆遷移分布を用いて、1ステップ前のタイムステップからのサンプルを予測します。分布の計算方法の詳細については、q_posterior()を参照してください。
VQDiffusionSchedulerOutput
class diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput
< source >( prev_sample: LongTensor )
スケジューラーのステップ関数の出力用の出力クラス。