Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

NMF2DのPython実装と楽曲への適用(和音、音色分析)

動機

近年、深層学習による音信号処理が流行しており、様々な分野で優れた成果が報告されています。 よく利用されているネットワーク設計であるCNN(畳み込みニューラルネット)を眺めてみると、単層ではNMFD、NMF2Dと似た信号処理であることに気づきます。そのため、CNNとNMF2Dの比較は新しい楽曲解析アルゴリズム開発の助けになると思い、手始めにNMF2Dを実装してみました。

NMF: Non-negative matrix factorization

ある非負値行列を、2つの非負値行列に分解するアルゴリズムです。元々は画像処理分野で誕生した技術ですが、音などの時系列信号解析と相性が良いため、今でもよく利用されています。 詳細は以下の亀岡先生の資料*1をご参考ください。

また、NMFはscikit-learnに優れた実装があるため、Python上で気軽に利用することができます。 sklearn.decomposition.NMF

NMFD [Smaragdis2004]

時間幅を持った基底行列を学習できるNMFの拡張アルゴリズムにあります。通常のNMFでは1フレーム分の音色パターンを個々の基底として学習しますが、NMFDでは数フレーム分の幅を持つ音色のパターンを基底として学習することができます。そのため、音高が時間変化したりするような音色を効率的に学習することができます。 link.springer.com

NMF2D [Schmidt2006]

NMF、NMFDの拡張で、基底の周波数方向のシフトも許容するモデルとなっています。 NMFやNMFDでピアノのような調波楽器音の基底を求めようとすると、音高(ドレミ)ごとに別々の基底を学習してしまいます。そこで、対数周波数軸上で調波構造が線形シフトすることを仮定することで、様々な音高を1つの基底で表現するモデルとなっています。 link.springer.com

実装

Pythonで実装しました。
n_piches == 1 & n_frames == 1 のときはNMFと、n_piches == 1 & n_frames > 1 のときはNMFDとして動作します。

github.com

楽曲でNMF2D

楽曲解析用のライブラリとして、LibROSAを利用しています。 入力を対数周波数にするため、STFTではなく定Q変換を利用しています。 NMF2Dを適用する楽曲は、以下のサイトから入手した、Public domainである「バッハ,J.S. 無伴奏チェロ組曲 第1番」の冒頭15秒です。 http://classicalmusicmp3freedownload.com

f:id:Kurene:20181208201827p:plain
NMF2D_BWV1007

  • 左上: 観測信号
  • 左下: 再構成信号
  • 右上: 基底行列(基底数1、時間幅5フレーム、周波数シフト48ビン)
  • 左下: アクティベーション行列

楽音へのNMF2D適用に関する考察

  • 時間幅を持った基底の有効性について

    • NMFと比較すると、1フレームのスペクトルではなく、短時間の音色として基底を得られるのは魅力的である。
      • シンプルなモデルで音色変化を獲得できる可能性がある
      • 得られた基底の観察・アプリケーションでの利用のしやすさ
    • 短時間(数~数十の時間フレーム)で調波構造が変化する音に対しては良さそう
      • シンセサイザなどで人工的に生成・変調された音
    • ビブラートなどのピッチの上昇・下降のような調波構造が保たれる音には、対数周波数方向のNMFDのようなモデルのほうが効率的
    • 音長が変化する楽音を固定長の基底で表現するのは非効率
      • ADSRをモデル化する必要がある。それぞれの音色を基底として表現するのであれば、時間幅をもつ基底の必要性は低い(通常のNMFのほうがよい)   - アクティベーション行列に対するNMFD*2やソースフィルタモデルに基づくNMF*3のほうが楽音の生成モデルとして自然で効率的
      • ただし、特定の曲のある1区間での適用を考えると、伴奏に用いる楽器などは調波楽器でも特定の音長でしか鳴っていないこともあるため、時間幅を持った基底での表現が効率的な場合もある
  • 周波数方向シフトを許容した基底の有効性について

    • 対数周波数を仮定しているので、STFT領域の信号への直接適用は困難
      • 楽曲の生成や変換といった用途に使いにくい
      • 再合成を考慮しない、音の分析や検知といったタスク向き?
    • シフト幅が広く基底数が多い場合、自明解を避けるために正則化を導入する必要がある

まとめ

NMF2Dの実装を行い、楽曲信号に対して適用してみました。 CNNと比べると、NMFD, NMF2Dはモデルの解釈・説明が容易で、低い計算コストで利用できます。 そのため、エッジ側での処理や、説明が求められる時系列信号の分析に適していると思います。

*1:非負値行列因子分解 とその音響信号処理応用 - NTTコミュニケーション科学基礎研究所

*2:亀岡, ルルー, 大石, 柏野, "Music Factorizer: 音楽音響信号をノート単位で編集できるインタフェース," 情報 処理学会研究報告, 2009-MUS-81-9, Jul. 2009.

*3:Hirokazu Kameoka, Kunio Kashino, "Composite Autoregressive System for Sparse Source-Filter Representation of Speech," In Proc. 2009 IEEE International Symposium on Circuits and Systems (ISCAS2009), pp. 2477-2480, May 2009.