Diffusers documentation
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler は、フローマップ蒸留拡散モデル向けに設計された Euler 方式のサンプラーです。フローマップモデルは、固定の ではなく、任意の間隔の遷移 を学習します。ステップの両端点は呼び出し側で指定されるため、任意ステップのサンプリングが可能になります。蒸留済みの単一チェックポイントを再学習せずに、NFE 1、2、4、8、16… で評価できます。
このスケジューラーは AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation で導入され、AnyFlowPipeline および AnyFlowFARPipeline の統合に同梱されていますが、AnyFlow 固有のものではなく、フローマップ蒸留されたチェックポイントであれば何でも使用できます。
FlowMapEulerDiscreteScheduler
class diffusers.FlowMapEulerDiscreteScheduler
< source >( num_train_timesteps: int = 1000shift: float = 1.0 )
フローマップ蒸留拡散モデル向けのオイラー型サンプラー。
Flow-map モデルは、固定の ではなく、任意の区間での遷移を学習します。 consistency モデルの マッピングとは異なり、蒸留済みの単一のチェックポイントを再学習せずに 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] を継承しています。すべてのスケジューラに実装されている汎用的なメソッド(読み込み、保存など)については、スーパークラスのドキュメントを参照してください。
設定されたシフト変換をシグマテンソルに適用します。
現在のスケジュール上のtimestepのインデックスを返します。スケジュール外の場合はNoneを返します。
self.timesteps に対して、小さな fp 許容誤差を用いて参照が行われます。これにより、timesteps = sigmas * num_train_timesteps という線形な関係を前提とせずに、対応する sigma を復元できます。これによって、カスタムスケジュール(非線形シフトや手動で設定された timesteps など)でも正しく解決されます。
何もしない恒等スケーリング。他の Diffusers スケジューラとの API 互換性のために提供されています。
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )
正規化されたtimestepに従って、sampleをnoiseへ線形補間します。
スケジューラの開始インデックスを設定します。スケジュールの途中から開始するパイプライン(例: image-to-image)は、ロールアウトの基準点を設定するために、set_timestepsと最初のstepの間にこれを呼び出します。
set_timesteps
< source >( num_inference_steps: typing.Optional[int] = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = None )
パラメータ
- num_inference_steps (int, 任意) —
推論ステップ数。
Noneの場合、sigmasまたはtimestepsを渡す必要があります。 - device (str または torch.device、任意) —
self.sigmas/self.timestepsのターゲットデバイス。 - sigmas (List[float]、optional) —
num_inference_stepsの長さを持つカスタムの sigma スケジュール。末尾の0sigma は自動的に追加されます。設定されたshiftがその上に適用されます。 - timesteps (List[float], 任意) —
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 がユーザーによって提供された場合、自動的に追加されます。
ステップ
< source >( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorr_timestep: typing.Union[float, torch.FloatTensor, NoneType] = Nonereturn_dict: bool = True ) → [FlowMapEulerDiscreteSchedulerOutput] or tuple
パラメータ
- model_output (torch.Tensor) — フローマップモデルからの直接の出力(予測された平均速度)。
- timestep (float または torch.Tensor) —
self.timestepsと同じ単位で表されるソースタイムステップt。 - sample (torch.Tensor) — 現在のサンプル 。
- 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がである[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にフォールバックするため、スケジュール外の任意のステップでのサンプリングも引き続きサポートされます。