Diffusers documentation
MiniMaxH3Scheduler
MiniMaxH3Scheduler
MiniMaxH3Scheduler は、MiniMax-H3 で使用される指数シグマシフト付きの rectified-flow Euler スケジューラー(eta = 0)であり、sigma' = s * sigma / (1 + (s - 1) * sigma) を用います。
MiniMax-H3のパイプラインでは、1ステップあたりの単一のtransformer呼び出し内で、動画と音声の潜在変数がそれぞれ異なるスケジュールに従ってステップダウンするため、2つが登録されます。schedulerは動画のスケジュール(公開されているチェックポイントではshift=12.0)を持ち、audio_schedulerは音声のスケジュール(shift=3.0)を持ちます。
MiniMaxH3Scheduler
クラス diffusers.MiniMaxH3Scheduler
< source >( shift: float = 12.0stochastic_sampling: bool = Falseshift_provided_sigmas: bool | None = None )
パラメータ
- shift (
float、デフォルト値は12.0) — sigma グリッドに適用される指数シフト、sigma' = s*sigma / (1 + (s-1)*sigma)。公開されているチェックポイントは、動画の潜在変数に12.0、音声の潜在変数に3.0を使用しています。 - stochastic_sampling (
bool、デフォルトはFalse) — Euler ブレンドを、再ノイズ化更新に置き換えます。クリーンなサンプルを予測し、新しいノイズを用いて次の sigma まで再ノイズ化します。少数ステップの Pika H3 Flex アダプターはこの更新用に学習されていますが、ベースのチェックポイントはそうではありません。 - shift_provided_sigmas (
bool、省略可) — set_timesteps() に渡される明示的なsigmasが、スケジューラによってシフトされるベースグリッド(linspaceグリッドと同様)であるか、それともそのまま使用される完成済みスケジュールであるかを指定します。未設定の場合は非推奨の警告とともにそのまま使用されます。0.44.0 以降、デフォルト値はTrueになります。
MiniMax-H3で使用される、指数関数的シグマシフトを備えたRectified-flow Eulerスケジューラ(eta = 0)。
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor] ) → int
タイムステップの値をスケジュール内のインデックスにマッピングします。
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: FloatTensor ) → torch.FloatTensor
MiniMax-H3のtの規約におけるRectified-flowのフォワードプロセス: x_t = t*x_0 + (1 - t)*noise。
MiniMax-H3 は、この手法を用いて条件付けアンカーにノイズを付与します。ここで t はスケジュールのエントリではなく noise_aug レベルを指すため、timestep はそのままの値として扱われ、self.timesteps からの参照は行われません。
set_begin_index
< source >( begin_index: int = 0 )
スケジューラの開始インデックスを設定します。
設定済みのシグマシフトをオーバーライドします。set_timesteps()を呼び出す前に実行してください。
MiniMax-H3 は、これをリクエストごとに flow_shift(動画)/ audio_flow_shift(音声)として公開しています。
set_timesteps
< source >( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device, NoneType] = Nonesigmas: typing.Union[list[float], torch.Tensor, NoneType] = None )
パラメータ
- num_inference_steps (
int, 任意) — シグマグリッドの点数です。終端の0を含みます。sigmasが指定されている場合は無視されます。 - device (
strまたはtorch.device、省略可能) — スケジュールテンソルを移動先とするデバイスです。グリッド自体は常に CPU 上で float32 として構築されるため、スケジュールはアクセラレータに依存しません。 - sigmas (
list[float]またはtorch.Tensor、省略可) —0.0で終わる、厳密に減少する明示的なグリッドです。shift_provided_sigmas=Trueの場合、linspaceグリッドと同様にシフトが適用される[0, 1]内のベースグリッドとして扱われます。それ以外の場合は、そのまま使用されます(非推奨のデフォルト)。
sigma / timestep スケジュールを構築します。
グリッドは linspace(1, 0, num_inference_steps) を指数シフトに通したもの(連続する重複は圧縮されます)または明示的な sigmas であり、shift_provided_sigmas が設定されている場合も同様にシフトされます。終端の 0 はすでにグリッドの一部であり、シフトは 0 をちょうど 0 に写像するため、スケジュールは num_inference_steps 個のシグマを保持し、num_inference_steps - 1 回のモデル評価を駆動します。これは self.timesteps = 1 - sigmas[:-1] として公開されます。
ステップ
< source >( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → MiniMaxH3SchedulerOutput or tuple
パラメータ
- model_output (
torch.FloatTensor) —timestepにおけるtransformerの速度予測です。 - timestep (
floatまたはtorch.FloatTensor) — 現在のタイムステップ。self.timestepsのいずれかであり、timestep == 1 - sigmaとなります。 - sample (
torch.FloatTensor) — 現在のサンプルx_t。 - generator (
torch.Generator、省略可) —stochastic_samplingで新しいノイズをサンプリングする際に使用するジェネレーター。それ以外の場合は使用されません。 - return_dict (
bool、デフォルトはTrue) —MiniMaxH3SchedulerOutputを返すか、通常のタプルを返すかを指定します。
戻り値
MiniMaxH3SchedulerOutput または tuple
次のステップのサンプル。
Euler(eta = 0)ステップを1回実行するか、stochastic_samplingによる再ノイズ化ステップを1回実行します。
モデルの出力はデータ方向の速度であるため、ノイズ除去後の推定値は x0 = x_t + (1 - t) * v となります。ここで + が使われている点に注意してください。これは通常の flow-match の規約とは逆です。その後の更新は、r = sigma_next / sigma を用いたブレンド x_next = r*x_t + (1 - r)*x0 として行われ、半精度のサンプルに対しては float32 で評価されます。stochastic_sampling を使用する場合、更新は generator から新しいノイズを取得して x_next = (1 - sigma_next) * x0 + sigma_next * noise として行われ、すべて float32 で計算されるため、最終ステップ(sigma_next = 0)では x0 が返されます。
MiniMaxH3SchedulerOutput
class diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput
< source >( prev_sample: FloatTensor )
スケジューラーのstep関数の出力用のクラス。