Diffusers documentation
ScoreSdeVeScheduler
ScoreSdeVeScheduler
ScoreSdeVeScheduler は、分散爆発型確率微分方程式(SDE)スケジューラーです。Yang Song、Jascha Sohl-Dickstein、Diederik P. Kingma、Abhishek Kumar、Stefano Ermon、Ben Poole による論文 Score-Based Generative Modeling through Stochastic Differential Equations で紹介されました。
論文の抄録は以下の通りです:
データからノイズを作るのは容易ですが、ノイズからデータを作るのが生成モデリングです。本稿では、ノイズを徐々に注入することで複雑なデータ分布を既知の事前分布へ滑らかに変換する確率微分方程式(SDE)と、ノイズを徐々に除去することで事前分布をデータ分布へ変換する対応する逆時間SDEを提案します。重要なのは、逆時間SDEが、擾乱されたデータ分布の時間依存勾配場(別名、スコア)にのみ依存する点です。スコアベースの生成モデリングの進歩を活用することで、ニューラルネットワークを用いてこれらのスコアを正確に推定し、数値SDEソルバーを用いてサンプルを生成できます。本フレームワークは、スコアベースの生成モデリングや拡散確率モデリングの従来の手法を包含し、新しいサンプリング手順や新しいモデリング機能を実現することを示します。特に、離散化された逆時間SDEの進化における誤差を補正するための予測子-補正子フレームワークを導入します。また、SDEと同じ分布からサンプリングする等価なニューラルODEを導出し、これにより厳密な尤度計算とサンプリング効率の向上が可能になります。さらに、クラス条件付き生成、画像インペインティング、カラー化に関する実験で示すように、スコアベースモデルを用いた逆問題の解法を新たに提供します。複数のアーキテクチャの改善と組み合わせることで、CIFAR-10における無条件画像生成でInception score 9.89、FID 2.20という記録的な性能を達成し、2.99 bits/dimという競争力のある尤度を示すとともに、スコアベースの生成モデルから初めて1024 x 1024の高忠実度画像生成を実現しました。
ScoreSdeVeScheduler
class diffusers.ScoreSdeVeScheduler
< source >( num_train_timesteps: int = 2000snr: float = 0.15sigma_min: float = 0.01sigma_max: float = 1348.0sampling_eps: float = 1e-05correct_steps: int = 1 )
パラメータ
- num_train_timesteps (
int、デフォルト値は 2000) — モデルを学習するための拡散ステップ数。 - snr (
float、デフォルト値 0.15) —model_outputサンプル(ネットワーク由来)からランダムノイズへのステップを重み化する係数です。 - sigma_min (
float、デフォルト値 0.01) — サンプリング手順における sigma シーケンスの初期ノイズスケールです。最小 sigma は、データの分布を反映するべきです。 - sigma_max (
float、デフォルト値: 1348.0) — モデルに渡される連続タイムステップの範囲に使用される最大値です。 - sampling_eps (
float、デフォルト値は 1e-5) — タイムステップが 1 から epsilon へ段階的に減少するサンプリングの終了値です。 - correct_steps (
int、デフォルトは 1) — 生成されたサンプルに対して実行される補正ステップの数です。
ScoreSdeVeScheduler は、分散爆発型確率微分方程式(SDE)スケジューラーです。
このモデルは SchedulerMixin および ConfigMixin を継承しています。読み込みや保存など、ライブラリがすべてのスケジューラに対して実装している汎用的なメソッドについては、スーパークラスのドキュメントを参照してください。
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
指定されたタイムステップにおけるノイズスケジュールに従って、元のサンプルにノイズを追加します。これはフォワード拡散プロセスです。
get_adjacent_sigma
< source >( timesteps: Tensort: Tensor ) → torch.Tensor
直前のタイムステップインデックスに対応するシグマ値を返します。タイムステップがゼロ(直前のタイムステップが存在しない)の場合、ゼロを返します。
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → torch.Tensor
現在のタイムステップに応じて、デノイジングモデルの入力をスケーリングする必要があるスケジューラーとの相互運用性を保証します。
set_sigmas
< source >( num_inference_steps: intsigma_min: float | None = Nonesigma_max: float | None = Nonesampling_eps: float | None = None )
拡散チェーンで使用されるノイズスケールを設定します(推論の実行前に呼び出します)。driftとdiffusionの重みを制御します。
set_timesteps
< source >( num_inference_steps: intsampling_eps: float | None = Nonedevice: typing.Union[str, torch.device, NoneType] = None )
拡散チェーンで使用される連続タイムステップを設定します(推論の実行前に実行します)。
step_correct
< source >( model_output: Tensorsample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
パラメータ
- model_output (
torch.Tensor) — 学習済み拡散モデルからの直接の出力です。 - sample (
torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。 - generator (
torch.Generator、任意) — 乱数生成器です。 - return_dict (
bool、省略可、デフォルトはTrue) —tupleではなくSchedulerOutputを返すかどうか。
戻り値
SchedulerOutput または tuple
True の場合、SchedulerOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。
ネットワークのmodel_outputに基づいて、予測されたサンプルを修正します。これは、前のタイムステップの予測を行った後に繰り返し実行されることがよくあります。
step_pred
< source >( model_output: Tensortimestep: intsample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SdeVeOutput or tuple
パラメータ
- model_output (
torch.Tensor) — 学習済み拡散モデルからの直接の出力です。 - timestep (
int) — 拡散チェーンにおける現在の離散タイムステップ。 - sample (
torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。 - generator (
torch.Generator、任意) — 乱数生成器です。 - return_dict (
bool、省略可、デフォルトはTrue) — SdeVeOutput を返すか、tupleを返すかを指定します。
戻り値
SdeVeOutput または tuple
True の場合、SdeVeOutput が返され、それ以外の場合は、最初の要素がサンプルテンソルであるタプルが返されます。
前のタイムステップのサンプルを、SDEを逆方向に適用することで予測します。この関数は、学習済みモデルの出力(多くの場合、予測されたノイズ)から拡散過程を伝播させます。
SdeVeOutput
クラス diffusers.schedulers.scheduling_sde_ve.SdeVeOutput
< source >( prev_sample: Tensorprev_sample_mean: Tensor )
スケジューラーのstep関数の出力用のクラス。