🎼

Demucsコード分析 — 1つの曲をボーカル・ドラム・ベース・ギターに分離する方���

Meta/Facebook ResearchのHybrid Transformerソース分離モデル — アーキテクチャ、推論パイプライン、実践活用

Demucsとは

Demucs(Deep Extractor for Music Sources)はMetaのFacebook AI Research(FAIR)が開発した音源分離モデルだ。2019年のv1から始まり、現在v4(htdemucs)まで発展した。

入力は完成した曲1つ。出力は4ステム:

  • vocals — ボーカル(リード+バッキング)

  • drums — ドラム/パーカッション

  • bass — ベース

  • other — その他(ギター、ピアノ、シンセ等)

from demucs.pretrained import get_model
from demucs.apply import apply_model
model = get_model("htdemucs")
sources = apply_model(model, wav[None], device="cuda")[0]

バージョン変遷

バージョン 名前 アーキテクチャ
v1 demucs 時間ドメインU-Net 2019
v2 demucs 時間ドメイン改善 2021
v3 mdx/hybrid 時間+周波数ハイブリッド 2021
v4 htdemucs ハイブリッドTransformer 2022

htdemucsアーキテクチャ

2つの並列パス:

1. 時間ドメインパス — 波形を直接処理。1D CNNエンコーダー→ボトルネック→1D CNNデコーダー。トランジェントやアタックなど細かい時間的ディテールを捉える。

2. 周波数ドメインパス — STFTスペクトログラムを処理。2D CNNエンコーダー→ボトルネック→2D CNNデコーダー。ハーモニクスやピッチなど周波数パターンを捉える。

3. Cross-Domain Transformer(核心) — 両パスのエンコーダー出力がTransformerに入る。Self-attention+Cross-attentionで時間・周波数ドメイン間の情報を交換。

UVR KaraokeとDemucsの比較

UVR Mel-Band RoFormer Karaoke Demucs htdemucs
ステム数 2(リードボーカル/カラオケ) 4(ボーカル/ドラム/ベース/ギター)
ボーカル定義 リードボーカルのみ リード+バッキング全体
伴奏にバッキングボーカル あり(意図的) なし(すべてvocalsに分類)
モデルサイズ 913 MB ~80 MB
カラオケ適合性 高い 普通

カラオケ用にはUVR Karaokeが適している。Demucsはリミックスやサンプリング、楽器練習に向いている。

実践活用

  1. カラオケアプリ — ボーカル除去
  2. 音楽リミックス — 個別ステム操作
  3. 楽器練習 — 特定楽器を除去して空きパートで練習
  4. 音楽分析/教育 — 曲構造をパート別に分解

限界

  • 完全な分離は不可能 — ステム間の「ブリーディング」が存在

  • CPU推論は曲の2〜5倍の時間がかかる。GPU推奨

  • バッキングとリードボーカルの区別不可

  • 電子音楽のように楽器境界が曖昧な曲では品質低下

キーコンセプト

1

入力オーディオを44,100Hzステレオにリサンプリング

2

~10秒チャンクに分割(25%オーバーラップ)

3

時間パス:波形→1D CNNエンコーダー→Cross-Domain Transformer→1D CNNデコーダー

4

周波数パス:STFT→2D CNNエンコーダー→Cross-Domain Transformer→2D CNNデコーダー→ISTFT

5

両パス出力を合算→4ステム(ボーカル/ドラム/ベース/ギター)を返却

ユースケース

ソース分離 — 完成曲からボーカル・ドラム・ベース・ギターを個別抽出 リミックス/プロデュース — 個別ステムのボリューム調整、エフェクト適用、再結合 楽器練習 — 特定パートを除去してその空きで練習