Buckets:

hf-doc-build/doc / diffusers /main /ja /api /schedulers /flow_map_euler_discrete.md
mishig's picture
|
download
raw
10.8 kB

FlowMapEulerDiscreteScheduler

FlowMapEulerDiscreteScheduler は、フローマップ蒸留拡散モデル向けに設計された Euler 方式のサンプラーです。フローマップモデルは、consistency モデルの固定された $\mathbf{z}_t \to \mathbf{z}_0$ マッピングとは異なり、任意の間隔の遷移 $\mathbf{z}_t \to \mathbf{z}_r$ を学習します。ステップの両端点は呼び出し側で指定されるため、任意ステップサンプリングが可能になります。これにより、単一の蒸留済みチェックポイントを再学習せずに、NFE 1、2、4、8、16... で評価できます。

このスケジューラは AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation で導入され、AnyFlowPipeline および AnyFlowFARPipeline の統合に同梱されていますが、AnyFlow 固有のものではありません。フローマップ蒸留されたチェックポイントであれば、いずれもこのスケジューラを使用できます。

FlowMapEulerDiscreteScheduler[[diffusers.FlowMapEulerDiscreteScheduler]]

diffusers.FlowMapEulerDiscreteScheduler[[diffusers.FlowMapEulerDiscreteScheduler]]

diffusers.FlowMapEulerDiscreteScheduler(num_train_timesteps: int = 1000, shift: float = 1.0)

ソース

パラメータ:

num_train_timesteps (int、デフォルトは 1000) : 基盤となる flow-map モデルの学習に使用される拡散ステップ数。

shift (float、デフォルト値は 1.0) : 推論スケジュールに適用される乗法的なタイムステップシフトです。shift=1.0 は恒等変換であり、1.0 以上の値はスケジュールを後続ステップでのより強いノイズ除去方向にシフトさせます(例: shift=5 は Wan2.1 のデフォルト値と一致します)。

フローマップ蒸留拡散モデル向けのオイラー型サンプラー。

Flow-map モデルは、consistency モデルの固定された zt→z0z_t \to z_0 マッピングではなく、任意の区間への遷移 zt→zrz_t \to z_r を学習するため、再学習せずに 1、2、4、8、... NFE で単一の蒸留済みチェックポイントを評価できます。step メソッドは、予測された速度に沿って、サンプルを timestep から r_timestep へ進めます。

Yuchao Gu、Guian Fang らによる AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation で紹介されました。

このスケジューラは [SchedulerMixin] と [ConfigMixin] を継承しています。すべてのスケジューラに実装されている汎用的なメソッド(読み込み、保存など)については、スーパークラスのドキュメントを参照してください。

apply_shift[[diffusers.FlowMapEulerDiscreteScheduler.apply_shift]]

apply_shift(sigmas: Tensor)

ソース

設定されたシフト変換をシグマテンソルに適用します。

index_for_timestep[[diffusers.FlowMapEulerDiscreteScheduler.index_for_timestep]]

index_for_timestep(timestep: typing.Union[float, torch.FloatTensor])

ソース

現在のスケジュール上のtimestepのインデックスを返します。スケジュール外の場合はNoneを返します。

self.timesteps に対して、小さな fp 許容誤差を用いて参照が行われます。線形の timesteps = sigmas * num_train_timesteps の関係を前提とせず、対応する sigma を復元するために使用されます。これにより、カスタムスケジュール(非線形シフトや手動で設定された timesteps など)でも正しく解決されます。

scale_model_input[[diffusers.FlowMapEulerDiscreteScheduler.scale_model_input]]

scale_model_input(sample: Tensor, *args, **kwargs)

ソース

何もしない恒等スケーリング。他の Diffusers スケジューラとの API 互換性のために提供されています。

scale_noise[[diffusers.FlowMapEulerDiscreteScheduler.scale_noise]]

scale_noise(sample: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], noise: typing.Optional[torch.FloatTensor] = None)

ソース

正規化されたtimestepに従って、sampleをnoiseへ線形補間します。

set_begin_index[[diffusers.FlowMapEulerDiscreteScheduler.set_begin_index]]

set_begin_index(begin_index: int = 0)

ソース

スケジューラの開始インデックスを設定します。スケジュールの途中から開始するパイプライン(例: image-to-image)は、set_timestepsと最初のstepの間にこれを呼び出して、ロールアウトの基準点を固定します。

set_timesteps[[diffusers.FlowMapEulerDiscreteScheduler.set_timesteps]]

set_timesteps(num_inference_steps: typing.Optional[int] = None, device: typing.Union[str, torch.device] = None, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None)

ソース

パラメータ:

num_inference_steps (int, optional) : 推論ステップ数。Noneの場合、sigmasまたはtimestepsを渡す必要があります。

device (str または torch.device、optional) : self.sigmas / self.timesteps のターゲットデバイス。

sigmas (List[float]、optional) : 長さ num_inference_steps のカスタム sigma スケジュール。末尾の 0 sigma は自動的に追加されます。設定された shift がその上に適用されます。

timesteps (List[float], optional) : num_inference_steps の長さを持つカスタムなタイムステップスケジュールです。self.timesteps と同じ単位(つまり num_train_timesteps でスケーリングされた値)で指定します。内部でシグマに変換されます。sigmas と timesteps の両方が渡された場合、その長さは一致する必要があります。

推論用のタイムステップスケジュールを構築します。

内部では、長さ num_inference_steps + 1 の self.sigmas を管理しています(デフォルトでは、1.0 から 0.0 への linspace に設定されたシフトが適用されます)。self.timesteps は、num_train_timesteps によってスケーリングされた最初の num_inference_steps 個のシグマを公開します。つまり、推論ステップごとに1つのタイムステップが割り当てられ、FlowMatchEulerDiscreteScheduler と一致します。最後のシグマ(0)は、最後のステップの暗黙の r 端点であり、sigmas / timesteps がユーザーによって提供された場合、自動的に追加されます。

ステップ[[diffusers.FlowMapEulerDiscreteScheduler.step]]

step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, r_timestep: typing.Union[float, torch.FloatTensor, NoneType] = None, return_dict: bool = True)

ソース

パラメータ:

model_output (torch.Tensor) : フローマップモデルの直接出力(予測平均速度)。

timestep (float または torch.Tensor) : self.timesteps と同じ単位で表したソースタイムステップ t。

sample (torch.Tensor) : 現在のサンプル ztz_t。

r_timestep (float または torch.Tensor、optional) : 対象のタイムステップ r。None の場合はスケジュール上の次のタイムステップがデフォルトになります。any-step サンプリングには明示的な値を指定してください。r_timestep == timestep は何もしません。

return_dict (bool、デフォルトは True) : [FlowMapEulerDiscreteSchedulerOutput](デフォルト)を返すか、通常のタプルを返すかを指定します。

戻り値: [FlowMapEulerDiscreteSchedulerOutput] または tuple

return_dict=True の場合、prev_sample が \(z_r\ となる [FlowMapEulerDiscreteSchedulerOutput] を返します。それ以外の場合は、1タプル (prev_sample,) を返します。

モデルが予測した速度を用いて、timestep から r_timestep へ sample を進めます。

標準的な Euler スケジューラとは異なり、区間の両端を呼び出し側で指定できるため、任意ステップのサンプリングが可能です。単一のモデル呼び出しで、t から任意に選択したターゲット r(ワンショット生成のための r=0 を含む)へステップを進めることができます。r_timestep が省略された場合、スケジュール上の次のタイムステップがデフォルトとして使用されます(FlowMatchEulerDiscreteScheduler のセマンティクスと一致)。

内部では、ソースおよびターゲットのシグマは、入力タイムステップをnum_train_timestepsで割るのではなく、index_for_timestepを介してself.sigmasにインデックスを指定することで復元されるため、タイムステップとシグマの関係が非線形であるスケジュール(カスタムシフトなど)でも正しく動作します。スケジュール外のr_timestepに対しては、スケジューラはr_timestep / num_train_timestepsにフォールバックするため、スケジュール外の任意のステップでのサンプリングも引き続きサポートされます。

Xet Storage Details

Size:
10.8 kB
·
Xet hash:
bab5e375368a039836d18ae5ee6069a9362854c0f3d4cd22fca19c3b312fe7dc

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.