🧠

Mel-Band RoFormer Karaokeモデル分析 — リードボーカルだけを抽出する913MBの秘密

RoPE + メルスケール周波数分解 + 階層的時間・周波数Transformer — コードと設定まで

モデルファイル情報

項目
ファイル名 mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt
サイズ 913 MB
形式 PyTorch pickleチェックポイント
設定ファイル config_mel_band_roformer_karaoke.yaml(1.72 kB)
ホスティング HuggingFace

RoFormer — Rotary Position Embedding

RoFormerは標準の位置エンコーディングの代わりにRoPE(Rotary Position Embedding)を使う。QueryとKeyベクトルを位置に応じて回転させ、遠いトークン間のアテンションが自然に減衰する。

from rotary_embedding_torch import RotaryEmbedding
time_rotary_embed = RotaryEmbedding(dim=64)
# Attention.forward()内:
q = self.rotary_embed.rotate_queries_or_keys(q)
k = self.rotary_embed.rotate_queries_or_keys(k)

時間軸と周波数軸にそれぞれ別のRoPEを使用。

Mel-Band vs Band-Split

BS-RoFormer Mel-Band RoFormer
バンド分割 ヒューリスティック、非重複、62バンド メルスケール、50%重複、60バンド
知覚的重み付け なし あり(人間の聴覚に合致)
パラメータ(L=6) 72.2M 84.2M

メルスケールは人間が低周波と高周波の差を異なる感度で知覚する特性を反映。50%重複はバンド境界でのアーティファクトを低減。

推論パイプライン全体

  1. STFT: ステレオオーディオ→複素スペクトログラム
  2. メルバンドプロジェクション: 1025周波数ビン→60メルバンド→線形投影→[batch, time, 60, 384]
  3. 階層的Transformer(6層): 時間軸と周波数軸のTransformerをRoPE付きで交互実行
  4. マスク推定: バンドごとのMLP→複素マスク→元のSTFTに乗算
  5. ISTFT: 時間ドメイン音声を復元

なぜカラオケ専用か

学習設定:

instruments: [karaoke, other]
target_instrument: karaoke

karaoke = 伴奏+バッキングボーカル。other = リードボーカルのみ。モデルがkaraokeステムを出力し、残差がクリーンなリードボーカルになる。

SDR 10.1956の位置づけ

モデル Vocal SDR
Spleeter(2020) ~5.91 dB
HTDemucs(2022) ~9.20 dB
このモデル 10.20 dB(リードのみ — より難しいタスク)
Mel-RoFormer L=6(論文) 11.21 dB(全ボーカル)

テスト方法

pip install audio-separator[gpu]
audio-separator song.mp3 --model_filename mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt

キーソースファイル:

  • mel_band_roformer.py(471行)— アーキテクチャ全体

  • mdxc_separator.py — 推論オーケストレーション

  • separator.py — エントリポイント

キーコンセプト

1

STFT — ステレオオーディオを複素スペクトログラムに変換(n_fft=2048, hop=441)

2

メルバンドプロジェクション — 1025周波数ビンを60個の重複メルバンドに分解+線形埋め込み

3

階層的Transformer×6 — 時間軸→周波数軸Transformerを交互実行(RoPE)

4

マスク推定 — バンドごとのMLPで複素マスク生成→元のSTFTに乗算

5

ISTFT — マスクされたスペクトログラムを時間ドメイン波形に復元

6

残差計算 — 原本 - karaoke(モデル出力) = リードボーカル

ユースケース

カラオケ伴奏生成 — リードボーカルのみ除去、バッキングボーカル・コーラスは維持 ボーカル抽出 — クリーンなリードボーカルのみ分離(WhisperX転写入力に活用) MLアーキテクチャ学習 — Transformerベースオーディオ処理パイプラインの理解