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はリミックスやサンプリング、楽器練習に向いている。
実践活用
- カラオケアプリ — ボーカル除去
- 音楽リミックス — 個別ステム操作
- 楽器練習 — 特定楽器を除去して空きパートで練習
- 音楽分析/教育 — 曲構造をパート別に分解
限界
完全な分離は不可能 — ステム間の「ブリーディング」が存在
CPU推論は曲の2〜5倍の時間がかかる。GPU推奨
バッキングとリードボーカルの区別不可
電子音楽のように楽器境界が曖昧な曲では品質低下
キーコンセプト
入力オーディオを44,100Hzステレオにリサンプリング
~10秒チャンクに分割(25%オーバーラップ)
時間パス:波形→1D CNNエンコーダー→Cross-Domain Transformer→1D CNNデコーダー
周波数パス:STFT→2D CNNエンコーダー→Cross-Domain Transformer→2D CNNデコーダー→ISTFT
両パス出力を合算→4ステム(ボーカル/ドラム/ベース/ギター)を返却