# MiniMaxH3Scheduler

`MiniMaxH3Scheduler` は、[MiniMax-H3](https://huggingface.co/MiniMaxAI) で使用される指数シグマシフト付きの 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]]

#### diffusers.MiniMaxH3Scheduler[[diffusers.MiniMaxH3Scheduler]]

```python
diffusers.MiniMaxH3Scheduler(shift: float = 12.0, stochastic_sampling: bool = False, shift_provided_sigmas: bool | None = None, euler_update_form: str = 'blend')
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L73)

**パラメータ:**

shift (`float`、デフォルトは`12.0`) : シグマグリッドに適用される指数シフト、`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()](/docs/diffusers/v0.43.0/ja/api/schedulers/minimax_h3#diffusers.MiniMaxH3Scheduler.set_timesteps) に渡される明示的な `sigmas` が、スケジューラがシフトするベースグリッド（`linspace` グリッドと同様）であるか、それともそのまま使用される完成済みスケジュールであるかを指定します。未設定の場合は非推奨の警告とともにそのまま使用されます。0.44.0 以降、デフォルト値は `True` になります。

euler_update_form (`str`、デフォルトは`"blend"`) : Euler更新の評価方法。`"blend"`は`x_t`と`x0`のブレンド`x_next = r*x_t + (1 - r)*x0`であり、`"velocity"`はfloat32で`x_next = x_t + (sigma - sigma_next) * v`です。これらは同じ更新であり、float32の丸め誤差のみが異なります。MiniMax-H3-Imageはvelocity形式で蒸留されています。

MiniMax-H3で使用される、指数関数的シグマシフトを備えたRectified-flow Eulerスケジューラ（`eta = 0`）。

#### index_for_timestep[[diffusers.MiniMaxH3Scheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.Tensor])
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L225)

**パラメータ:**

timestep (`float` または `torch.Tensor`) : `self.timesteps` から取得した値です。スケジュールは `t` に対して厳密に増加するため、一致は一意です。

**戻り値:** `int`

`timestep`のインデックス。

タイムステップの値をスケジュール内のインデックスにマッピングします。

#### scale_noise[[diffusers.MiniMaxH3Scheduler.scale_noise]]

```python
scale_noise(sample: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], noise: FloatTensor)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L246)

**パラメータ:**

sample (`torch.FloatTensor`) : クリーンなサンプル `x_0`。

timestep (`float` または `torch.FloatTensor`) : `[0, 1]` の範囲の目標時間。 `1` を指定すると、 `sample` は変更されずに返されます。

noise (`torch.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[[diffusers.MiniMaxH3Scheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L138)

**パラメータ:**

begin_index (`int`、デフォルトは`0`) : スケジューラの開始インデックス。

スケジューラの開始インデックスを設定します。

#### set_shift[[diffusers.MiniMaxH3Scheduler.set_shift]]

```python
set_shift(shift: float)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L148)

**パラメータ:**

shift (`float`) : 次のスケジュールに使用する指数シフト。

設定済みのシグマシフトをオーバーライドします。[set_timesteps()](/docs/diffusers/v0.43.0/ja/api/schedulers/minimax_h3#diffusers.MiniMaxH3Scheduler.set_timesteps)を呼び出す前に実行してください。

MiniMax-H3 は、これをリクエストごとに `flow_shift`（動画）/ `audio_flow_shift`（音声）として公開しています。

#### set_timesteps[[diffusers.MiniMaxH3Scheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int | None = None, device: typing.Union[str, torch.device, NoneType] = None, sigmas: typing.Union[list[float], torch.Tensor, NoneType] = None)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L162)

**パラメータ:**

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]` として公開されます。

#### ステップ[[diffusers.MiniMaxH3Scheduler.step]]

```python
step(model_output: FloatTensor, timestep: typing.Union[float, torch.FloatTensor], sample: FloatTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L278)

**パラメータ:**

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`が返されます。`euler_update_form="velocity"`の場合、同じ Euler 更新が float32 で`x_next = x_t + (sigma - sigma_next) * v`として評価されます。

## MiniMaxH3SchedulerOutput[[diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput]]

#### diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput[[diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput]]

```python
diffusers.schedulers.scheduling_minimax_h3.MiniMaxH3SchedulerOutput(prev_sample: FloatTensor)
```

[ソース](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_minimax_h3.py#L61)

**パラメータ:**

prev_sample (`torch.FloatTensor`) : デノイジングループの次のステップ用の計算済みサンプル `x_{t+1}`。

スケジューラの`step`関数の出力用のクラス。

