Diffusers documentation

RePaintScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

RePaintScheduler

RePaintScheduler は、極端なマスクを用いた教師なしインペインティングのための DDPM ベースのインペインティングスケジューラーです。RePaintPipeline と組み合わせて使用することを前提として設計されており、Andreas Lugmayr らによる論文 RePaint: Inpainting using Denoising Diffusion Probabilistic Models に基づいています。

論文の抄録は以下の通りです:

フリーフォームインペインティングとは、任意のバイナリマスクで指定された領域に新しいコンテンツを追加するタスクです。既存の多くのアプローチは特定のマスク分布に対して学習されるため、未見のマスクタイプへの汎化能力が制限されます。さらに、ピクセル単位および知覚損失を用いた学習では、意味のある生成ではなく、欠損領域へ向かって単純なテクスチャの拡張が生じることがよくあります。本稿では、RePaintを提案します。これは、極端なマスクにも適用可能な、DDPM(デノイジング拡散確率モデル)に基づくインペインティング手法です。生成事前分布として、事前学習済みの無条件DDPMを用います。生成過程を条件付けするために、与えられた画像情報を用いてマスクされていない領域をサンプリングすることにより、逆拡散イテレーションのみを変更します。この手法は元のDDPMネットワーク自体を変更したり条件付けたりしないため、モデルはあらゆるインペインティング形式に対して高品質かつ多様な出力画像を生成します。標準的なマスクと極端なマスクを用いて、顔および汎用画像インペインティングの両方について本手法を検証しました。RePaintは、6つのマスク分布のうち少なくとも5つにおいて、最先端の自己回帰型およびGANアプローチを上回りました。GitHubリポジトリ: このhttp URL。

元の実装はandreas128/RePaintで確認できます。

RePaintScheduler

class diffusers.RePaintScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'eta: float = 0.0trained_betas: numpy.ndarray | None = Noneclip_sample: bool = True )

パラメータ

  • num_train_timesteps (int、デフォルトは 1000) — モデルを学習するための拡散ステップ数。
  • beta_start (float、デフォルトは 0.0001) — 推論の初期 beta 値です。
  • beta_end (float、デフォルト値は0.02) — 最終的なbeta値です。
  • beta_schedule (str、デフォルトは "linear") — ベータスケジュールです。ベータの範囲から、モデルのステップ処理に使用するベータのシーケンスへのマッピングを指定します。linear、scaled_linear、squaredcos_cap_v2、または sigmoid から選択してください。
  • eta (float、デフォルト値は 0.0) — 拡散ステップ中に追加されるノイズの重みです。0.0 は DDIM に対応し、1.0 は DDPM に対応します。
  • trained_betas (np.ndarray, 省略可) — beta_start と beta_end をバイパスして、ベータの配列を直接コンストラクタに渡す場合に使用します。
  • clip_sample (bool、デフォルトは True) — 数値の安定性を確保するため、予測サンプルを -1 と 1 の間でクリップします。

RePaintSchedulerは、指定されたマスク内でDDPMインペインティングを行うためのスケジューラーです。

このモデルは SchedulerMixin および ConfigMixin を継承しています。読み込みや保存など、ライブラリがすべてのスケジューラに対して実装している汎用的なメソッドについては、スーパークラスのドキュメントを参照してください。

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor )

パラメータ

  • original_samples (torch.Tensor) — ノイズが加えられる元のサンプルです。
  • noise (torch.Tensor) — サンプルに追加されるノイズ。
  • timesteps (torch.IntTensor) — 各サンプルのノイズレベルを決定するタイムステップ。

例外

NotImplementedError

このスケジューラーでは、RePaint 学習のためのノイズ追加はサポートされていないことを示します。

scale_model_input

< >

( sample: Tensortimestep: int | None = None ) → torch.Tensor

パラメータ

  • sample (torch.Tensor) — 入力サンプルです。
  • timestep (int, 任意) — 拡散チェーンにおける現在のタイムステップ。

戻り値

torch.Tensor

スケーリングされた入力サンプル。

現在のタイムステップに応じて、デノイジングモデルの入力をスケーリングする必要があるスケジューラーとの相互運用性を保証します。

set_timesteps

< >

( num_inference_steps: intjump_length: int = 10jump_n_sample: int = 10device: typing.Union[str, torch.device, NoneType] = None )

パラメータ

  • num_inference_steps (int) — 事前学習済みモデルでサンプルを生成する際に使用する拡散ステップの数。
  • jump_length (int, デフォルトは 10) — 単一のジャンプ(RePaint論文における「j」)において、過去へ戻る前に時間軸上で前方へ進むステップ数です。論文の図9と図10を参照してください。
  • jump_n_sample (int、デフォルト値は10) — 選択された時間サンプルに対して、フォワードタイムジャンプを行う回数を指定します。論文の図9および図10を参照してください。
  • device (str または torch.device、省略可) — timesteps を移動先とするデバイスです。None の場合、timesteps は移動されません。

拡散チェーンで使用される離散タイムステップを設定します(推論の実行前に実行する必要があります)。

ステップ

< >

( model_output: Tensortimestep: intsample: Tensororiginal_image: Tensormask: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → RePaintSchedulerOutput or tuple[torch.Tensor, torch.Tensor]

パラメータ

  • model_output (torch.Tensor) — 学習済み拡散モデルからの直接の出力です。
  • timestep (int) — 拡散チェーンにおける現在の離散タイムステップ。
  • sample (torch.Tensor) — 拡散プロセスによって生成されたサンプルの現在のインスタンス。
  • original_image (torch.Tensor) — インペイントを行う元の画像です。
  • mask (torch.Tensor) — 元の画像のどの部分をインペイントするかを示すマスク。値が 0.0 である部分がインペイント対象です。
  • generator (torch.Generator、任意) — 乱数生成器です。
  • return_dict (bool、デフォルトはTrue) — タプルではなくRePaintSchedulerOutputを返すかどうか。

戻り値

RePaintSchedulerOutput または tuple[torch.Tensor, torch.Tensor]

True の場合、RePaintSchedulerOutput が返され、それ以外の場合は、最初の要素が前回のサンプル、2番目の要素が予測された元のサンプルであるタプルが返されます。

前のタイムステップのサンプルを、SDEを逆方向に適用することで予測します。この関数は、学習済みモデルの出力(多くの場合、予測されたノイズ)から拡散過程を伝播させます。

undo_step

< >

( sample: Tensortimestep: intgenerator: typing.Optional[torch.Generator] = None ) → torch.Tensor

パラメータ

  • sample (torch.Tensor) — ノイズが加えられるサンプル。
  • timestep (int) — 拡散チェーンにおける現在の離散タイムステップ。
  • generator (torch.Generator、任意) — 乱数生成器です。

戻り値

torch.Tensor

拡散チェーンにおける次のタイムステップのサンプル。

サンプリングにノイズを加え、拡散ステップを1ステップ進めます。

RePaintSchedulerOutput

class diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput

< >

( prev_sample: Tensorpred_original_sample: Tensor )

パラメータ

  • prev_sample(画像の場合、torch.Tensor、形状 (batch_size, num_channels, height, width)) — 前回のタイムステップの計算済みサンプル (x_{t-1})。prev_sample は、デノイジングループにおける次のモデル入力として使用する必要があります。
  • pred_original_sample(画像の場合、torch.Tensor、形状は(batch_size, num_channels, height, width)) — 現在のタイムステップにおけるモデルの出力に基づいて予測された、ノイズ除去済みサンプル(x_{0})です。 pred_original_sampleは、進捗のプレビューやガイダンスに使用できます。

スケジューラーのステップ関数の出力用の出力クラス。

Update on GitHub