NMFを用いた多重楽音解析 - CS17 Ariki Laboratory

第89回音楽情報科学研究発表会
確率スペクトル包絡に基づくNMF
基底生成モデルを用いた混合楽音解析
神戸大学工学研究科
◎中鹿 亘,滝口哲也,有木康雄
研究背景
音楽信号処理の高い関心
 コンピュータの著しい発展
 音楽信号の爆発的な増加
自動採譜技術の期待
 一般ユーザの音楽活動支援
 様々な音楽アプリケーションへ応用可能
音楽検索や音楽加工など
2
研究内容
楽音解析(≒自動採譜)
 楽音パラメータを推定
音高、発音開始時刻、音価、強度など(調やテンポは推定しない)
研究対象
 混合楽音の解析
複数の楽器によるポリフォニー音楽を解析
いずれも非常に難しい問題
3
[1] P. Smaragdis, 2003
従来の楽音解析手法
 非負行列因子分解(NMF)による手法[1]
 非負行列Xを、2つの非負行列W, Hの積に分解
H
X
W
 音楽信号のスペクトログラムをNMFで分解
アクティビティ行列
発音時刻などの情報を含む
観測スペクトル
基底行列
音高の情報を含む
4
教師なしNMFによる楽音解析の問題点
教師なしNMFで解析
スペクトルが倍音成分のみ
⇒音高が求まる
スペクトルが混在している
アクティビティH
問題点
基底W
⇒音高が求まらない
教師なしNMFでは、機械的に分解しているので
意図しない基底が表れてしまう
5
教師ありNMFによる楽音解析の問題点
 教師ありNMF…基底行列が既知であると仮定
 基底行列を予め学習しておく
アクティビティ行列 H
既知
観測スペクトル X
基底行列
ˆ
W
解析精度は高いが…
問題点
全ての楽器機種、全ての音高について
基底を用意するのは現実的ではない
6
研究の動機
 教師なしNMFの問題点:意図しない基底が表れてしまう
 教師ありNMFの問題点:全ての基底を用意するのは非現実的
楽器カテゴリの特徴量から,楽器の基底を全て表現できないか?
piano1
piano3
piano4
piano2
?
“ピアノ”の特徴量
7
楽器カテゴリの特徴量
1. 音階に依存しない特徴量にしたい…
スペクトル包絡に着目
2. スペクトルの変動を吸収したい…
確率的な表現をする
確率的なスペクトル包絡,確率スペクトル包絡 (PSE) を考える
あらゆる音階の
スペクトル
PSE
ある音階の
微小に変動するスペクトル
8
提案手法の流れ
音階ごとの
スペクトルを求
める
学習信号
テスト信号
スペクトログラム
スペクトログラム
教師なしNMF
楽器カテゴリの
特徴を表す確率
スペクトル包絡
教師ありNMF
PSEs
確率スペクトル
包絡の学習
拡張ガウシアン
プロセス
教師あり
NMFと遺伝
アルゴリズ
ムを組み合
わせて
曲を解析
遺伝アルゴリズム
MIDI
学習ステージ
解析ステージ
9
提案手法の流れ(学習ステージ)
音階ごとの
スペクトルを求
める
学習信号
テスト信号
スペクトログラム
スペクトログラム
教師なしNMF
楽器カテゴリの
特徴を表す確率
スペクトル包絡
教師ありNMF
PSEs
確率スペクトル
包絡の学習
拡張ガウシアン
プロセス
教師あり
NMFと遺伝
アルゴリズ
ムを組み合
わせて
曲を解析
遺伝アルゴリズム
MIDI
学習ステージ
解析ステージ
10
教師なしNMFによるスペクトル抽出
学習信号のスペクトログラムを教師なしNMFで分解
1.
⇒
⇒
アクティビティ行列
NMF
学習データ
基底行列
スペクトログラム
y
2.
f
基底行列から
スペクトルピークを抽出
スペクトルピークの集合Dを
確率スペクトル包絡の学習に用いる
スペクトルピーク集合
11
[2] E. Snelson and Z. Ghahramani, 2006
確率スペクトル包絡の学習
3.
拡張ガウシアンプロセスでピーク集合を近似
拡張ガウシアンプロセス(SPGP+HS[2])
• ガウス分布に従った確率過程
• 任意の関数曲線を分散込みで近似できる
通常のガウシアンプロセスでは,
分散値をうまく推定できない
y
⇒
f
スペクトルピーク集合
SPGP+HS
ガウシアンプロセス
=
確率スペクトル包絡
12
提案手法の流れ(解析ステージ)
音階ごとの
スペクトルを求
める
学習信号
テスト信号
スペクトログラム
スペクトログラム
教師なしNMF
楽器カテゴリの
特徴を表す確率
スペクトル包絡
教師ありNMF
PSEs
確率スペクトル
包絡の学習
拡張ガウシアン
プロセス
教師あり
NMFと遺伝
アルゴリズ
ムを組み合
わせて
曲を解析
遺伝アルゴリズム
MIDI
学習ステージ
解析ステージ
13
(予備知識1)スペクトル基底の生成過程
確率スペクトル包絡からスペクトル基底を生成
確率スペクトル包絡
調波フィルタ
1.2
1
0.8
⇒
0.6
0.4
任意の音階の
音を作り出せる
0.2
0
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
ランダム生成
1
0.9
0.8

0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
スペクトル包絡
⇒
変動するスペクトル
を作り出せる
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
生成されたスペクトル基底
14
(予備知識2)基底行列の評価
教師ありNMFによって評価行列を求める
= 基底行列とアクティビティ行列の積
“良い”基底行列なら…
と
は,ほぼ同じ
テストデータ (観測スペクトログラム)
評価行列
“良くない”基底行列なら…
は,異なる
と
評価行列
テストデータ
テストデータとの距離を,評価値として用いることができる
15
遺伝アルゴリズムによる基底の探索
テストデータに適応するように基底行列を進化させる
1. ランダムに基底行列を生成
2. 確率(p1)で基底行列を2つ選択して一様交叉
3. 確率(1-p1)で基底行列を1つ選択して一部突然変異
4. 基底行列が一定数集まれば次の世代に交代
5. 2. ~4. を繰り返す
16
遺伝アルゴリズムによる基底の探索
テストデータに適応するように基底行列を進化させる
1. ランダムに基底行列を生成
評価値が高い基底行列が
2. 確率(p1)で基底行列を2つ選択して一様交叉
選ばれやすい
3. 確率(1-p1)で基底行列を1つ選択して一部突然変異
4. 基底行列が一定数集まれば次の世代に交代
5. 2. ~4. を繰り返す
17
遺伝アルゴリズムによる基底の探索
テストデータに適応するように基底行列を進化させる
1. ランダムに基底行列を生成
2. 確率p1で基底行列を2つ選択して一様交叉
確率スペクトル包絡から基底行列を複数生成
3. 確率p2で基底行列を1つ選択して一部突然変異
0.9
0.9
0.8
0.7
0.6
0.5
0.4
0.4
0.3
0.2
0.3
0.2
0.1
0.2
0.1
0
2000
4000
6000
8000
10000
12000
0.8
0
0.1
0
2000
4000
6000
8000
10000
0
12000
0.8
0.7
1000
2000
3000
4000
5000
6000
0
6000
8000
0.3
0.2
0.1
1000
2000
3000
4000
5000
0
6000
0.16
0
1000
2000
3000
4000
0.14
0.14
0.12
0.12
0.1
0.1
0.1
0.08
0.08
0.08
確率スペクトル包絡
0.06
0.04
0.04
0.02
0.02
0
1000
2000
3000
4000
基底行列1
5000
0
6000
0
6000
0.06
0.04
0.02
0
5000
0.16
0.14
0.12
0.06
12000
0.6
0
4. 基底行列が一定数集まれば次の世代に交代
0.16
10000
0.5
0.1
0
4000
0.4
0.3
0.2
0.1
2000
0.7
0.6
0.5
0.4
0.3
0.2
0
0.8
0.7
0.6
0.5
0.4
0
0.8
0.7
0.6
0.5
0.4
0.3
0
0.9
0.8
0.7
0.6
0.5
1000
2000
3000
4000
5000
基底行列2
6000
0
0
1000
2000
3000
4000
5000
6000
基底行列3
5. 2. ~4. を繰り返す
18
遺伝アルゴリズムによる基底の探索
テストデータに適応するように基底行列を進化させる
1. ランダムに基底行列を生成
2. 確率(p1)で基底行列を2つ選択して一様交叉
3. 確率p2で基底行列を1つ選択して一部突然変異
(i) 基底行列を2つ選択
(ii) 基底行列を一様交叉
4. 基底行列が一定数集まれば次の世代に交代
0.9
0.9
0.8
2000
4000
6000
8000
10000
0.8
2000
4000
6000
8000
10000
0
12000
1000
2000
3000
4000
5000
6000
0
4000
6000
8000
10000
0
12000
1000
2000
3000
4000
5000
0
6000
2000
4000
6000
8000
10000
12000
0.8
1000
2000
3000
4000
5000
0
6000
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
6000
0
0.14
0.14
0.14
0.12
0.12
0.1
0.1
0.06
0.06
0.06
0.04
0.04
0.04
0.02
4000
5000
6000
0
0.02
0
1000
2000
3000
4000
5000
基底行列1
基底行列2
5. 2. ~4.
を繰り返す
6000
0
0.02
0
1000
2000
3000
4000
5000
6000
基底行列1
0
3000
4000
5000
6000
0.08
0.06
0.04
3000
2000
0.1
0.08
0.06
0.04
2000
1000
0.16
0.12
1000
12000
0.3
5000
0.1
0
10000
0.2
4000
0.14
0
8000
0.1
3000
0.12
0.02
6000
0.6
2000
0.1
0.08
4000
0.5
1000
0.14
0.08
2000
0.4
0
0.16
0.12
0.08
0
0.8
0.3
0.2
0.1
0
0.16
0.9
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0.16
0
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0.2
0.1
2000
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.5
0.4
0.3
0
0.8
0.7
0.6
0.5
0.4
0.16
0.7
0.2
0.1
0
0.8
0.7
0
0
12000
0.6
0.5
0.4
0.3
0.2
0.1
0
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0
0.9
0.8
0.7
0.6
0.02
0
1000
2000
3000
4000
5000
基底行列2
6000
0
0
1000
2000
3000
4000
5000
6000
交叉基底
⇒次世代基底の1つ
19
遺伝アルゴリズムによる基底の探索
(i) 基底行列を1つ選択
(ii) 一部の基底ベクトルをランダム生成
テストデータに適応するように基底行列を進化させる
0.9
0.9
0.8
0.7
0.6
0.5
0.5
0.4
0.4
0.3
0.2
0.3
0.2
0.1
0.2
0.1
0
2000
4000
6000
8000
10000
0
12000
0.8
0.1
0
2000
4000
6000
8000
10000
0
12000
0.8
0.7
1000
2000
3000
4000
5000
0
6000
0.1
3000
4000
5000
0
6000
0
0.14
0.14
0.12
0.1
0.08
0.08
0.06
0.06
0.04
2000
3000
4000
5000
6000
0
3000
4000
5000
6000
0.04
0.02
1000
2000
0.1
0.08
0.06
0
1000
0.16
0.12
0
12000
0.4
2000
0.14
0.04
10000
0.3
1000
0.12
0.02
8000
0.2
0
0.16
0.1
6000
0.6
0.1
0
4000
0.5
0.4
0.3
0.2
0.1
2000
0.7
0.6
0.5
0.4
0.3
0.2
0.16
0
0.8
0.7
0.6
0.5
0
0.8
0.7
0.6
0.5
0.4
0.3
0
0.9
0.8
0.7
0.6
0.02
0
1000
2000
3000
4000
5000
0
6000
0
1000
2000
3000
4000
5000
6000
1.2
基底行列2
基底行列2
1. ランダムに基底行列を複数生成
変異基底
1
0.8
0.6
0.4
0.2
0
音階が変わらないようにする
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
調波フィルタ
10000
確率スペクトル包絡
2. 確率(p1)で基底行列を2つ選択して一様交叉
3. 確率(1-p1)で基底行列を1つ選択して一部突然変異
4. 基底行列が一定数集まれば次の世代に交代
5. 2. ~4. を繰り返す
20
遺伝アルゴリズムによる基底の探索
テストデータに適応するように基底行列を進化させる
1. ランダムに基底行列を複数生成
交叉/突然変異を繰り返し,次世代基底集合を作る
0.9
0.9
0.9
0.9
0.8
0.8
0.7
0.7
0
0.6
2000
4000
6000
8000
10000
0
12000
2000
4000
6000
8000
10000
0
12000
0
2000
4000
6000
8000
10000
12000
0.6
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0
0.7
0.7
0.5
0.4
0.3
0.2
0.1
0
0.6
0.5
0.4
0.3
0.2
0.1
0
0.6
0.5
0.4
0.3
0.2
0.1
0.8
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.9
0.9
0.8
0.8
0.7
0.6
0.5
0.1
0.1
0
2000
4000
6000
8000
10000
0
12000
0
0
2000
4000
2. 確率(p1)で基底行列を2つ選択して一様交叉
0.8
0.8
0.8
0.7
0.6
0.4
1000
2000
3000
4000
5000
6000
0.16
0
1000
2000
3000
4000
5000
0
6000
0.16
0
0
1000
2000
3000
4000
5000
6000
0.14
0.14
0.12
0.12
1000
2000
3000
4000
5000
0
6000
0.08
0.06
0.14
0.14
0.12
0.12
0.1
0.1
0.04
0.04
0.02
0.02
0.06
0.04
0
2000
3000
4000
5000
6000
0
1000
2000
10000
12000
0.6
0.3
0.2
0.1
0
3000
4000
5000
6000
0
1000
2000
3000
4000
5000
6000
0.16
0.14
0.12
0.1
0.08
0.08
0.06
0.04
0.02
0.04
0.02
1000
8000
0.1
0.08
0.06
0
0
0.16
0.08
0.1
0.08
0.06
0
6000
0.5
0.2
0.1
0
0.16
0.16
0.14
0.12
0.1
4000
0.4
0.3
0.2
0.1
0.1
0
0.4
0.3
0.3
0.2
0.1
0
2000
0.7
0.6
0.5
0.4
0
0
0.8
0.8
0.7
0.5
0.5
0.4
0.3
0.2
0.1
12000
0.6
0.5
0.4
0.3
0.2
10000
0.7
0.6
0.6
0.5
8000
0.8
0.7
0.7
6000
0
1000
2000
3000
4000
5000
6000
0
0
前世代基底集合
1000
2000
3000
4000
5000
0.06
0.04
0.02
0.02
0
1000
2000
3000
4000
5000
6000
0
0
0
1000
2000
3000
4000
5000
6000
0
1000
2000
3000
4000
5000
6000
6000
次世代基底集合
3. 確率(1-p1)で基底行列を1つ選択して一部突然変異
4. 基底行列が一定数集まれば次の世代に交代
5. 2. ~4. を繰り返す
21
遺伝アルゴリズムによる基底の探索
テストデータに適応するように基底行列を進化させる
1. ランダムに基底行列を生成
2. 確率(p1)で基底行列を2つ選択して一様交叉
3. 確率(1-p1)で基底行列を1つ選択して一部突然変異
4. 基底行列が一定数集まれば次の世代に交代
5. 2. ~4. を繰り返す
最終的に得られた基底行列集合の中で,
最も評価値の高い基底行列を用いて
教師ありNMFを実行した結果が解析結果
22
評価実験
実験 1.
未学習データへの予測精度をみる実験
 単一楽器(piano1)のみを用いて確率スペクトル包絡を学習
 異なる環境で録音された曲をMIDI推定
①piano1で演奏,②piano2で演奏, ③piano3で演奏
④残響レベル40で演奏,⑤残響レベル100で演奏
 比較手法
①教師ありNMF(piano1のみ学習)
②教師ありNMF(それぞれの環境で学習)
③教師なしNMF
実験 2.
複数の楽器を含む音楽信号を解析する実験
 ピアノとヴァイオリンの2種類の楽器を用いて曲を推定
 比較手法…教師ありNMF(ピアノとヴァイオリンを予め学習)
23
実験1の結果
自動採譜による音符の正解率
100
95
90
85
proposed
s-NMF
80
us-NMF
75
ex. s-NMF
70
65
60
original
piano2
piano3
rev. 40
rev. 100
24
解析結果例(実験1)
正解データ
Piano1で演奏
Piano2で演奏
25
実験2の結果
ヴァイオリン
ピアノ
正解データ
遺伝アルゴリズムの初期
教師ありNMFの結果
遺伝アルゴリズムの最終
上段:ヴァイオリン
下段:ピアノ
26
まとめと考察
 スペクトルの確率表現で楽音推定を行う
 確率的なスペクトル包絡表現により,
一つの楽器カテゴリを表現しうるスペクトルをカバーする
 楽器ごとのスペクトル包絡を,
拡張ガウシアンプロセスを用いて確率的に表現する
 遺伝アルゴリズムと教師ありNMFを組み合わせ,
最も尤もらしい基底・アクティビティを推定する
 考えられる全ての基底を与える必要がなく,
基底をコンパクトに表現できる
 複数の楽器が混ざっていても解析可能
 今後の課題
 確率的な基底行列とNMFを用いて,最尤法により曲を解析
27
ご清聴ありがとうございました
28
ガウシアンプロセスの学習結果
Piano
Violin
1476 Samples / 72 Notes
403 Iterations
584 Samples / 36 Notes
101 Iterations
29
(付録A)擬似逆行列を用いた教師ありNMF
以下の手順でアクティビティ行列Hを求める
1. 擬似逆行列を用いて計算する
H  (WT W)1 WT X
2. 負の要素をゼロにする
H  HR

3. 正規化する
H
H
H2
30