見出し画像

楽器演奏の録音データから音階を判定するAIモデルを構築

楽器のチューナーなどがあるので、簡単じゃないかと思ってました。
そもそも音の切れ目をどうするか問題もあり、なかなか大変でした。
以下は現状整理という感じのメモです。

目標

楽器演奏の録音データから、それぞれの音の音階を判定出来るAIモデルを構築することで耳コピの手間の軽減が目標です。

現在地

まだ荒い部分はあるもののそれなりの精度になってきました。
上の画像が正解ラベルで下が推論結果です。

正解ラベル
推論結果

当初は`C-1`から`G9`までの分類を考えていましたが、一旦`C`から`B`までの分類としました。
多様なデータでの検証はまだなので、限定的な範囲での精度となっています。

`C`から`B`までの分類精度評価

工夫点

これからまだ工夫や変更も多そうです。

全体

一つのモデルではなく、複数のモデルを使うような全体構成にすることで、それぞれの役割毎のモデルの精度を上げやすくなりました。最終的に整理できたら一つのモデルにするのもありかもしれません。

アルゴリズム

サンプリングデータからのフーリエ変換が基本になりますが、変換後のデータをdB変換するかMFCCを試してみるか、正規化するか標準化するかによって変化があるので入力データとしてどのようなものが訓練しやすいかなどを検証しました。色々な本も読みましたが、まだ理解出来てないことも多いので要勉強です。

最適化アルゴリズムについても比較しましたし、損失関数についてもカスタマイズしながら進めました。最適輸送のアルゴリズムの考え方は音階のクラス分類に合っているのではないかと思います。

レイヤー

Vision Transformerの考え方を参考に時系列と周波数を意識することで良くなっている部分もあると思っています。また、エンコーダーだけにするかデコーダーまで実装するかなどもモデルによって変えてみました。

訓練・検証

データセットもですが、出来るだけシンプルにしてから細かく変更を検証していくことで精度は上がってきたと感じています。また評価の仕組みを出来るだけ早めに作っておくことで検証はスムーズに行えました。

GitHubとGoogle Colabを連携出来るようにしておくことで、ローカルから変更をPushしてGoogle Colabで開いて実行という流れはスムーズでした。
ただ、実行するためのクリックの回数はそれなりにあるので、小さいモデルの検証はローカルで実行して回転数を上げていました。

限られたリソースの中でハイパーパラメータ探索をするので、探索範囲も試行を重ねることで、ある程度の範囲内でもそれなりの精度が得られました。

この記事が気に入ったらサポートをしてみませんか?