0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

音源分離ベンチマーク2026をHugging Faceで公開しました:SDRの見方とPythonでの使い方【MUSDB18-HQ・再現可能】

0
Posted at

「どの音源分離モデルが一番いい?」——YouTubeやブログの聴き比べ記事だけでは、数値で比較できません。

StemSplitチームは、オープンソースの音源分離モデルを MUSDB18-HQ(50曲) で同じ条件に揃えて評価した結果を、Hugging Face Datasets として公開しました。

データセット: StemSplitio/stem-separation-benchmark-2026(CC-BY-4.0)

この記事では、データセットの中身・SDRの読み方・Pythonでの集計方法・StemSplitの品質ティアとの対応をまとめます。


このベンチマークで何がわかる?

結論: 4種類のDemucs系モデル(htdemucs / htdemucs_ft / htdemucs_6s / mdx_extra_q)について、曲ごと・ステムごとの SDR(分離品質)RTF(処理速度) が800行の表として揃っています。自分の曲を入れる前に「ボーカル重視ならどれか」を数値で選べます。

項目 内容
評価曲 MUSDB18-HQ テスト分割 50曲
モデル数 4(v1)
行数 800(50曲 × 4ステム × 4モデル)
指標 SDR / ISR / SIR / SAR(BSS Eval v4)
音声ファイル 含まない(MUSDB18の再配布不可のため)
ライセンス CC-BY-4.0(メトリクス表のみ)

音声そのものは Zenodo から各自ダウンロードする必要があります。ベンチマークは 分離結果のスコア表 です。


SDRとは?どう読めばいい?

結論: SDR(Signal-to-Distortion Ratio)は「分離したステムがどれだけ元の音に近いか」をdBで表す指標です。高いほど良い です。歌ってみたのオフボーカル用途では、ボーカル行の sdr_median を見るのが最も実用的です。

おおよその目安:

SDR(dB) 体感
0未満 分離失敗に近い
0〜5 ブリードが目立つ
5〜10 趣味用途では使える
10〜15 制作・リミックス向き
15以上 かなりクリーン

関連指標(データセットの列名):

  • ISR — 空間情報の歪み
  • SIR — 他ステムからの漏れ(干渉)
  • SAR — モデルが生んだアーティファクト

論文や SiSEC / SDX と同じ museval 実装・1秒窓で計算しているため、他文献の数値と横並びできます。背景は 音源分離の基礎解説 も参照してください。


リーダーボード(v1・2026年5月時点)

結論: ボーカル中央値では htdemucs_ft が最も高く、ドラム・ベースでは mdx_extra_q が有利です。htdemucs は速度重視のベースラインとしてバランスが良いです。

以下はデータセット metrics_only から 全50曲の sdr_median をモデル×ステムごとに再集計 した値です(Hugging Face上のDataset Viewerと一致します)。

model_id bass drums other vocals
htdemucs_ft 10.38 10.11 6.34 9.19
mdx_extra_q 11.42 11.49 7.67 9.04
htdemucs 9.78 10.01 6.42 8.53
htdemucs_6s 9.11 9.54 0.22 8.66

htdemucs_6sother 行(0.22 dB)は、6ステムモデルがピアノ・ギターを other から切り出している ため、MUSDB18の参照 other と定義がずれて 過小評価 されます。ピアノ・ギター別ステムが必要な用途では、other 行ではなく vocals / drums / bass を見てください。v1.1では piano + guitar + other を合算して再評価する予定です(データセットカード 参照)。

Spleeter など旧世代モデルとの比較は、別記事 Spleeter vs HTDemucs:Pythonで徹底比較 で扱っています。


Pythonでデータセットを読む

結論: datasetspandas があれば、数行でリーダーボードを再現できます。

pip install datasets pandas
from datasets import load_dataset
import pandas as pd

ds = load_dataset(
    "StemSplitio/stem-separation-benchmark-2026",
    "metrics_only",
    split="results",
)
df = ds.to_pandas()

# リーダーボード(モデル × ステム の SDR 中央値)
leaderboard = (
    df.groupby(["model_id", "stem"])["sdr_median"]
    .median()
    .unstack()
    .round(2)
)
print(leaderboard)

ボーカルだけ・特定モデルだけ抽出

vocals_ft = df[
    (df["model_id"] == "htdemucs_ft") & (df["stem"] == "vocals")
]
print(f"ボーカル SDR 中央値: {vocals_ft['sdr_median'].median():.2f} dB")
print(f"RTF 中央値: {vocals_ft['rtf'].median():.3f}")

RTF(Real-Time Factor)は wall_time_s / duration_s です。0.07 なら実時間の約7%(約14倍速)で処理できた、という意味です。Apple M4 Pro + PyTorch MPS 上で計測されたホスト情報は各行の host_chip などに記録されています。

曲ごとのワースト曲を探す

worst_vocals = (
    df[df["stem"] == "vocals"]
    .sort_values("sdr_median")
    .head(10)[["model_id", "track_id", "sdr_median", "rtf"]]
)
print(worst_vocals.to_string(index=False))

「自分のジャンルに近い曲で落ちるモデルはないか」を調べるときに便利です。


スキーマ早見表

意味
model_id モデル識別子
track_id MUSDB18-HQ テスト曲フォルダ名
stem vocals / drums / bass / other
sdr_median SDR 中央値(dB)
sdr_mean SDR 平均(dB)
isr_median / sir_median / sar_median 副次指標
duration_s 曲長(秒)
wall_time_s 推論の実時間(秒)
rtf 実時間比
peak_rss_mb ピークメモリ
host_chip 計測マシン(例: Apple M4 Pro)

StemSplitの品質ティアとの対応

結論: StemSplit のAPIは、このベンチマークと 同じモデルウェイト を使っています。別行 stemsplit_api を用意していないのは、数値が重複するためです。

StemSplit ティア ベンチマークの行 向いている用途
FAST htdemucs プレビュー・大量バッチ
BALANCED(既定) htdemucs_ft ボーカル抽出・歌ってみた
BEST(6ステム) htdemucs_6s ピアノ・ギターを別ファイルに

GPUや Demucs の環境構築を省略したい場合は、同じモデルをHTTPで呼べます。

import requests
import time

API_KEY = "your_api_key"

with open("song.wav", "rb") as f:
    job = requests.post(
        "https://stemsplit.io/api/v1/jobs",
        headers={"Authorization": f"Bearer {API_KEY}"},
        files={"file": f},
        data={"stems": "4"},
    ).json()

job_id = job["id"]
while True:
    status = requests.get(
        f"https://stemsplit.io/api/v1/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_KEY}"},
    ).json()["status"]
    if status == "completed":
        break
    time.sleep(3)

result = requests.get(
    f"https://stemsplit.io/api/v1/jobs/{job_id}",
    headers={"Authorization": f"Bearer {API_KEY}"},
).json()
for stem, url in result["stems"].items():
    requests.get(url).content  # → {stem}.wav として保存

ボーカルだけ欲しい場合は ボーカルリムーバー も利用できます。ローカルで Demucs を動かす手順は Demucsローカルセットアップ を参照してください。

他人の楽曲を無断で分離・アップロードする行為は著作権・各プラットフォームの利用規約に抵触する可能性があります。自分が権利を持つ音源、または利用が許諾された素材に限定してください。


ベンチマークを自分で再現する

結論: リポジトリ scripts/hf-benchmark の手順で、MUSDB18-HQのダウンロード → 全モデル推論 → BSS Eval → HFアップロードまで再現できます(Apple Silicon + MPS、CUDA不要)。

git clone https://github.com/StemSplitio/musicai   # 公開先に合わせてURLを確認
cd musicai/scripts/hf-benchmark
uv venv --python 3.11 && source .venv/bin/activate
uv pip install -e .

python -m src.download_musdb      # Zenodo から約22 GB
python -m src.run_all --continue-on-error
python -m src.eval_metrics
python -m src.build_dataset
python -m src.push_to_hub --create

M4 Pro(24 GB)での参考所要時間は、分離〜2.5時間 + 評価〜2.5時間程度です。


引用(論文・ブログ向け)

@misc{stemsplit_benchmark_2026,
  title  = {StemSplit Stem-Separation Benchmark 2026},
  author = {StemSplit},
  year   = {2026},
  url    = {https://huggingface.co/datasets/StemSplitio/stem-separation-benchmark-2026}
}

まとめ

  • stem-separation-benchmark-2026 に、MUSDB18-HQ 50曲・4モデル・800行の再現可能なスコア表がある
  • ボーカル重視なら htdemucs_ft、ドラム/ベースなら mdx_extra_q がリーダーボード上で有利
  • datasets + 数行の pandas で自分用の比較表を作れる
  • StemSplit API は同じモデルなので、ベンチマーク行をそのまま品質の目安にできる

フィードバックやモデル追加の要望は、Hugging Face の Community タブ か Qiita のコメントで歓迎します。


関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?