確率スペクトルを用いた基底生成モデルと NMFによる混合楽音解析 神戸大学 工学研究科 ◎中鹿 亘,滝口 哲也,有木 康雄 2011年春季音響学会 確率スペクトルを用いた基底生成モデルと NMFによる混合楽音解析 「複数の楽器が混ざった曲」を「自動採譜」 神戸大学 工学研究科 楽譜データ ◎中鹿 亘,滝口 哲也,有木 康雄 波形データ (楽譜形式) 変換 or (ピアノロール形式) 研究の目的 「自動採譜」が無いと… ・自分の好きな曲を弾きたいけど 楽譜が分からない 「自動採譜」が実現すると… ・自分の好きな曲を演奏できる ・曲を自分好みに編集できる それ以外にも,音楽検索や自動編曲など, 様々な音楽アプリケーションに応用できる [1] P. Smaragdis, 2003 従来の楽音解析手法 非負行列因子分解(NMF)による手法[1] NMF=「非負行列Xを,2つの非負行列W, Hの積に分解するアルゴリズム」 H X W 音楽信号のスペクトログラムをNMFで分解すると… アクティビティ行列 1 2 3 発音時刻などの情報を含む 観測スペクトログラム 基底行列 音階の情報を含む 4 [1] P. Smaragdis, 2003 従来の楽音解析手法 非負行列因子分解(NMF)による手法[1] NMF=「非負行列Xを,2つの非負行列W, Hの積に分解するアルゴリズム」 X H 基底行列を W 与えない …教師なしNMF 与える …教師ありNMF 音楽信号のスペクトログラムをNMFで分解すると… アクティビティ行列 1 2 3 発音時刻などの情報を含む 観測スペクトログラム 基底行列 音階の情報を含む 5 教師なしNMFによる楽音解析の問題点 教師なしNMFで解析すると… アクティビティ行列 Amplitude 基底行列 Frequency スペクトルが混在 スペクトルが周期的 ⇒音階が求まる 問題点 ⇒音階が求まらない 機械的に行列を分解しているので 意図しない基底が表れてしまう 6 教師ありNMFによる楽音解析の問題点 教師ありNMFで解析すると… アクティビティ行列 既知 観測スペクトログラム 解析を行う前に, 基底行列を用意する 基底行列 解析精度は高いが… 問題点 全ての楽器機種,全ての音階について 基底を用意するのは現実的ではない 7 研究の動機 教師なしNMFの問題点:意図しない基底が表れてしまう 教師ありNMFの問題点:全ての基底を用意するのは非現実的 楽器カテゴリの特徴量から,楽器の基底を全て表現できないか? piano1 piano3 piano4 piano2 ? “ピアノ”の特徴量 8 楽器カテゴリの特徴量 1. 音階に依存しない特徴量にしたい… スペクトル包絡に着目 2. スペクトルの変動を吸収したい… 確率的な表現をする 確率的なスペクトル包絡,確率スペクトル包絡 (PSE) を考える あらゆる音階の スペクトル PSE ある音階の 微小に変動するスペクトル 9 提案手法の流れ 音階ごとの スペクトルを求 める 学習信号 テスト信号 スペクトログラム スペクトログラム 教師なしNMF 楽器カテゴリの 特徴を表す確率 スペクトル包絡 教師ありNMF PSEs 確率スペクトル 包絡の学習 拡張ガウシアン プロセス 教師あり NMFと遺伝 アルゴリズ ムを組み合 わせて 曲を解析 遺伝アルゴリズム 楽譜 学習ステージ 解析ステージ 10 提案手法の流れ(学習ステージ) 音階ごとの スペクトルを求 める 学習信号 テスト信号 スペクトログラム スペクトログラム 教師なしNMF 楽器カテゴリの 特徴を表す確率 スペクトル包絡 教師ありNMF PSEs 確率スペクトル 包絡の学習 拡張ガウシアン プロセス 教師あり NMFと遺伝 アルゴリズ ムを組み合 わせて 曲を解析 遺伝アルゴリズム 楽譜 学習ステージ 解析ステージ 11 教師なしNMFによるスペクトル抽出 1. 学習信号のスペクトログラムを教師なしNMFで分解 アクティビティ行列 NMF 学習データ 基底行列 Amplitude スペクトログラム 2. 基底行列から スペクトルピークを抽出 スペクトルピークの集合を 確率スペクトル包絡の学習に用いる Frequency スペクトルピーク集合 12 [2] E. Snelson and Z. Ghahramani, 2006 確率スペクトル包絡の学習 拡張ガウシアンプロセス(SPGP+HS[2])で,ピーク集合を近似 Probability 任意の分布形状を,分散込みで近似できる High Amplitude Low Amplitude 3. SPGP+HS Frequency Frequency スペクトルピーク集合 確率スペクトル包絡 = (スペクトル包絡の平均,スペクトル包絡の分散) 楽器カテゴリごとに,確率スペクトル包絡を求めておく 13 提案手法の流れ(解析ステージ) 音階ごとの スペクトルを求 める 学習信号 テスト信号 スペクトログラム スペクトログラム 教師なしNMF 楽器カテゴリの 特徴を表す確率 スペクトル包絡 教師ありNMF PSEs 確率スペクトル 包絡の学習 拡張ガウシアン プロセス 教師あり NMFと遺伝 アルゴリズ ムを組み合 わせて 曲を解析 遺伝アルゴリズム 楽譜 学習ステージ 解析ステージ 14 教師ありNMFと遺伝アルゴリズムによる解析 教師ありNMFの枠組みで,曲を解析 アクティビティ行列 NMF 解析したい テストデータ 既知 スペクトログラム 基底行列 遺伝アルゴリズムによって, テストデータに適応させた基底行列 15 教師ありNMFと遺伝アルゴリズムによる解析 教師ありNMFの枠組みで,曲を解析 確率スペクトル包絡から, ランダムに生成された基底行列の集合 (初期) 0.9 0.9 適応度の高い基底行列 0.9 0.9 0.8 0.8 0.8 0.8 0.7 0.7 0.7 0.7 0.6 0.6 0.6 0.5 0.5 0.5 0.4 0.4 0.4 0.3 0.3 0.3 0.6 0.5 0.4 0.3 アクティビティ行列 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0 0 0 2000 4000 6000 8000 10000 0 12000 0 2000 4000 6000 8000 10000 0 12000 0 2000 4000 6000 8000 10000 12000 0 2000 4000 6000 8000 10000 12000 0 1000 2000 3000 4000 5000 6000 0.8 0.8 0.8 0.8 0.7 0.7 0.7 0.7 0.6 0.6 0.6 0.6 0.5 0.5 0.5 0.5 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.1 0.1 0.1 0 0 1000 2000 3000 4000 5000 6000 0 0 1000 2000 3000 4000 5000 0 6000 0.2 0.1 0 0 0.16 0.16 0.16 0.14 0.14 0.14 0.12 0.12 0.12 0.1 0.1 解析したい テストデータ 0.1 0.08 0.08 0.06 0 1000 2000 3000 4000 2000 3000 4000 5000 6000 交叉・突然変異 0.08 0.06 0.06 0.16 0.14 0.12 0.1 0.08 0.06 0.04 0.02 0.04 0.04 0.04 0 0.02 0 1000 0.02 5000 6000 0 0 1000 2000 3000 4000 5000 6000 0.02 0 1000 2000 3000 4000 5000 6000 0 0 1000 2000 スペクトログラム 3000 4000 5000 6000 基底行列 既知 遺伝アルゴリズムによって, テストデータに適応させた基底行列 16 教師ありNMFと遺伝アルゴリズムによる解析 教師ありNMFの枠組みで,曲を解析 アクティビティ行列 NMF 解析したい テストデータ 既知 スペクトログラム 基底行列 遺伝アルゴリズムによって, テストデータに適応させた基底行列 17 評価実験 実験 1. 未学習データへの頑健性をみる実験 ある楽器機種(piano1)のみを用いて確率スペクトル包絡を学習 異なる環境(別の機種や,残響の有無)で録音された曲を採譜 比較手法 ①教師なしNMF ②教師ありNMF(a) (piano1のみ学習) ③教師ありNMF(b) (それぞれの環境下の音を学習) 実験 2. 複数の楽器を含む音楽信号を解析する実験 ピアノとヴァイオリンの2種類の楽器を用いて曲を推定 18 実験1の結果 各手法による音符の正解率 100 95 90 85 提案手法 80 教師なしNMF 75 教師ありNMF(a) 教師ありNMF(b) 70 65 60 piano1 その他の環境 19 実験1の結果 各手法による音符の正解率 100 95 piano1の音を学習 90 85 提案手法 80 教師なしNMF 75 教師ありNMF(a) 教師ありNMF(b) 70 65 60 piano1 その他の環境 それぞれの音を学習 20 実験1の結果 各手法による音符の正解率 提案手法では,環境を変えてもあまり正解率が低下しない 100 95 piano1の音を学習 90 85 提案手法 80 教師なしNMF 75 教師ありNMF(a) 教師ありNMF(b) 70 65 60 piano1 その他の環境 それぞれの音を学習 21 実験2の結果 ヴァイオリン ピアノ 正解データ 遺伝アルゴリズムの初期 遺伝アルゴリズムで適用後 上段:ヴァイオリン 下段:ピアノ 22 まとめと考察 スペクトルの確率表現で自動採譜を行う 確率的なスペクトル包絡表現により, 一つの楽器カテゴリを表現しうるスペクトルをカバーする 楽器ごとのスペクトル包絡を, 拡張ガウシアンプロセスを用いて確率的に表現する 遺伝アルゴリズムと教師ありNMFを組み合わせ, 最も尤もらしい基底・アクティビティを推定する 複数の楽器が混ざっていても解析可能 今後の課題 PSEと確率的なNMFを用いて,最尤法により曲を解析 23 ご清聴,ありがとうございました 24 (付録A)擬似逆行列を用いた教師ありNMF 以下の手順でアクティビティ行列Hを求める 1. 擬似逆行列を用いて計算する H (WT W)1 WT X 2. 負の要素をゼロにする H HR 3. 正規化する H H H2 25 (付録B)実験1の解析結果例 正解データ Piano1で演奏 Piano2で演奏 26 (付録C)環境毎の結果の内訳 自動採譜による音符の正解率 100 95 90 85 proposed s-NMF 80 us-NMF 75 ex. s-NMF 70 65 60 original piano2 piano3 rev. 40 rev. 100 27 (付録D)拡張ガウシアンプロセスの学習結果 Piano Violin 1476 Samples / 72 Notes 403 Iterations 584 Samples / 36 Notes 101 Iterations 28 (付録E)拡張ガウシアンプロセスの効果 v.s. 拡張ガウシアンプロセス(SPGP+HS) 通常のガウシアンプロセス 29 (予備知識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 生成されたスペクトル基底 30 (予備知識2)基底行列の評価 教師ありNMFによって評価行列を求める = 基底行列とアクティビティ行列の積 “良い”基底行列なら… と は,ほぼ同じ テストデータ (観測スペクトログラム) 評価行列 “良くない”基底行列なら… は,異なる と 評価行列 テストデータ テストデータとの距離を,評価値(適用度)として用いることができる 31 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 0.9 0.9 0.9 0.9 0.8 0.8 0.7 0.7 0.8 0.6 0.5 0.4 0.3 0.2 0.1 0 0.6 0 2000 4000 6000 8000 10000 12000 0 2000 4000 6000 8000 10000 0 12000 0 2000 4000 6000 8000 10000 12000 0.8 2000 4000 6000 8000 10000 0 12000 0.7 0.6 0.5 0.3 0.2 0.2 0.2 0.1 0.1 0.1 0 0 1000 2000 3000 4000 5000 6000 0 0 1000 2000 3000 4000 5000 0 6000 0 0.16 0.16 0.16 0.14 0.14 0.14 0.12 0.12 0.12 0.1 0.1 0.1 0.08 0.08 0.06 0.06 0.04 0.04 0 0.02 0 1000 2000 3000 4000 5000 325 6000 8000 10000 12000 0 6000 0 1000 2000 3000 4000 5000 6000 3000 4000 5000 0 6000 0.16 8000 10000 12000 0.7 0.4 0.3 0.2 0.1 0 0 1000 2000 3000 4000 5000 6000 0.14 0.12 0.08 0.06 1000 2000 3000 4000 5000 6000 0.14 0.12 0.1 0.1 0.08 0.06 0 0.16 0.16 0.14 0.12 0.1 6000 0.6 0.1 2000 4000 0.5 0.4 0.3 0.2 1000 2000 0.8 0.6 0 0 0.08 0.06 0.08 0.06 0.04 0.02 4000 0.5 0.4 0.4 0.3 0.2 0.1 0 0 2000 0.7 0.6 0.5 0.5 0.4 0.3 0.2 0.1 0 0.8 0.7 0.7 0.6 0.5 0.4 0.6 0.5 0.4 0.3 0.3 0.2 0.1 0 0.8 0.7 0.6 0.3 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0.8 0.8 0.8 0.8 0.5 0.4 0.3 0.2 0.1 0 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.9 0.9 0.8 0.7 0.7 0.6 0.5 0.4 0.04 0.04 0.02 0.02 0 0 0 1000 2000 3000 4000 5000 6000 0.04 0.02 0 0 1000 2000 3000 4000 5000 6000 0 1000 2000 3000 4000 5000 6000 0.02 1000 2000 3000 4000 5000 6000 0 0 538 1000 2000 3000 4000 5000 6000 136 652 初期の基底集合 918 717 適応した基底集合 アクティビティ行列 テストデータのスペクトログラム 基底行列 32 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 1. ランダムに基底行列を生成 2. 確率(p1)で基底行列を2つ選択して一様交叉 3. 確率(1-p1)で基底行列を1つ選択して一部突然変異 4. 基底行列が一定数集まれば次の世代に交代 5. 2. ~4. を繰り返す 33 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 1. ランダムに基底行列を生成 評価値が高い基底行列が 2. 確率(p1)で基底行列を2つ選択して一様交叉 選ばれやすい 3. 確率(1-p1)で基底行列を1つ選択して一部突然変異 4. 基底行列が一定数集まれば次の世代に交代 5. 2. ~4. を繰り返す 34 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 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. を繰り返す 35 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 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つ 36 遺伝アルゴリズムによる基底の探索 (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. を繰り返す 37 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 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. を繰り返す 38 遺伝アルゴリズムによる基底の探索 テストデータに適応するように基底行列を進化させる 1. ランダムに基底行列を生成 2. 確率(p1)で基底行列を2つ選択して一様交叉 3. 確率(1-p1)で基底行列を1つ選択して一部突然変異 4. 基底行列が一定数集まれば次の世代に交代 5. 2. ~4. を繰り返す 最終的に得られた基底行列集合の中で, 最も評価値の高い基底行列を用いて 教師ありNMFを実行した結果が解析結果 39
© Copyright 2024 ExpyDoc