Androidアプリ「音声スペクトルモニター(Audio Spectrum Monitor)」をバージョンアップしました。
ピッチの解析精度を上げるために、機械学習を使ってパラメータの調整を行いました。
声の音声データに加えてアコギの音も学習データとして使用したので、
ギターのチューニング用途にも使えるようになっています。
機械学習は、特徴量を抽出して識別するようなことは行わず、
以前のバージョンから使用していたアルゴリズムのなかで
使用しているパラメータの調整を行っただけです。
複数のパラメータを順番に変化させて教師ありデータで正解の数の合計が
最大になる値を見つけるということを値が収束するまで繰り返して、
最適解を見つけるということを行いました。
パラメータ数は4つだけだったので、数回繰り返すだけで収束したので、
ラグランジュ未定乗数のような制約条件は不要でした。
調整したパラメータを使って、新たなデータでテストして誤検知するデータがあったら
それをまた学習データに加えて、再学習するということを繰り返して、
少しずつ精度アップさせました。
この部分は手作業で、それほど多くの学習データは用意できないので、
機械学習といえども限界はあります。
元のアルゴリズムも完璧なものではないので、あっちを取ったら
こっちを取れずということも起きますが、
用意できた学習データの中では正解数が一番多くなるパラメータに
調整はできました。
パラメータ調整用ツールは、今までWindowsのソフトはWin32 APIで作ってきたけど、
Win32 APIはさすがにめんどくさく感じてきたので、今回はC#で作成しました。
やっぱC#だとWin32 APIに比べてはかどります。