Neural Network Console Challenge ~~音楽ジャンルで分類~
Neural Network Consoleを用いてAudiostockの音声(BGM)データを解析
企業データを用いてディープラーニングに挑むSonyとレッジが企画するAI開発コンテスト第2弾になります。第1弾は画像分類がテーマに今回は音声データ解析がテーマになります。
nnc-challenge.com
学習用データ提供:Audiostock
選んだテーマは、A「AudiostockのBGM検索の自動分類アルゴリズムを作り出す」にしました。与えられた音声データと、説明、タグを使用しテキストマイニング実施することで、いくつかの分類データを作成し学習させた中で一番精度の良かったモデルを検証していきます。
NNの使い方とインストールについて
Neural Network Consoleはディープラーニングをノンプログラミングで使用できるアプリでクラウド版、Windowsアプリ版の2種類があります。今回、推論用GPU、学習用GPU共に有料サービスですが、本コンテスト参加者の方(希望者のみ)には1万円分(合算)の無料枠を使用できます。今回は、クラウド版をメインで使用しました。
実際、Windowsアプリ版で学習データとNNW構成を考えて、クラウド版を合わせて活用すると便利だと感じました。
アノテーション
今回、楽曲のタグを利用し三種類の分類データを作成し学習・推論させます。
(1)感情による分類
単語感情極性対応表を利用してタグのpositive・negativeを数値化しました。-1に近いほどnegative、+1に近いほどpositiveに分けていきます。タグの単語の下記の表に沿って点数をつけ平均化しbin分けました。上位、下位の1500の音声データを使用し、positive、negativeな曲分類を作成しました。
〇単語感情極性対応表(例)
優れる:すぐれる:動詞:1
良い:よい:形容詞:0.999995
喜ぶ:よろこぶ:動詞:0.999979
褒める:ほめる:動詞:0.999979
めでたい:めでたい:形容詞:0.999645
~~~~
ない:ない:助動詞:-0.999997
酷い:ひどい:形容詞:-0.999997
病気:びょうき:名詞:-0.999998
死ぬ:しぬ:動詞:-0.999999
悪い:わるい:形容詞:-1
*1
図1では1曲当たりの平均化された数値をヒストグラムにしています。positive・negativeに特化した曲数はあまりありませんでした。点数が付かなかった曲はゼロとしました。
図1.Happy 分類
"学習とネットワーク設定
まずは、音声解析を実施したことがないので、サンプルプロジェクト(wav_keyboard_sound)を利用してNNWを構成しました。10層のコンボリューションと1個の結合層で学習していきます。
図3.学習用NNW
結果
やってみた結果、すべてのモデルで正解率が0.5を切っており、あてずっぽより精度が低かったです。
表1.学習結果正解率
(1)例として、図4は感情による分類になります。学習に2811曲使用しgpuを使用し10分程度で終わりました。VALIDATION ERRORは20エポック以降、過学習ぎみになっています。
図4.感情による分類の学習率
改良(ネットワーク設計)を見直しました。
11層のコンボリューションに変更し、Afine手前のプーリング処理をMaxPoolingにしました。また、構造探索できるツールをUNITに追加し、より細かいパラメータで探索できるようにしました。
最後に、Dropoutを入れることで、複数の異なるネットワークの多数決に近いアンサンブル学習し近いことができるようになっているはずです。認識違い等があればすいません。
詳しくは過去の記事を参照
図5.再構成したニューラルネットワーク
再学習
今回、(1)~(3)の中で一番精度が向上した(2)音楽ジャンルで分類について考察していきます。学習に3000曲使用し、検証用に676曲使用しました。
図6.音楽ジャンル分類の学習率
図7.Confusion Matrix
Precison(実際に正解だった率)を見ると、y'__3("ポップス")が0.5と低いです。"ポップス"って自分自身聞いても、ポピュラーソング、またはポピュラー音楽なんで定義が曖昧でした。併せて、Recallでも0.3475と低くなっています。
結論としては"ポップス"が予測できていないことが分かりました。”ポップス”について、除いたら全体的に精度は向上すると考え、アノテーションを修正しました。
改良(アノテーション)/再学習
再学習した結果より、"ポップス"を除いた、"ロック", "フュージョン","バラード","クラシック"の4ジャンルで再度学習させました。学習の際は重みづけを前回と同様にして実施します。
学習結果からRe-editを使うと、選択中の学習/評価のネットワークの重み付きで再学習することができます。
図8.Re-edit画面
図9.再学習結果
図9、図7を比較しPrecisonが大幅に向上し、Accuracyが0.7703まで向上しました。
分類の一つ一つの間違いについて確認しました。y:labelは正解ラベルで、"y'__0:ロック", "y'__1:フュージョン","y'__2:バラード","y'__3:クラシック"の中で、確率になっています。データセットを作成する際に、xの名前がラベリングしなおされているようなので、曲を探すとき分かりづらかったです。
推論
Neural Network Consoleで作成した学習済みモデルをAPIで公開することで、ユーザは推論の実行をAPI経由で行うことが可能でEVALUATIONでタブのPublish APIを使用すると、リクエスト数課金、インスタンス占有の2種類が選べます。
今回は、wavなどの音楽形式のデータのためインスタンス占有タイプのみになります。起動時間をAlwaysかScheduleで選べました。
〇詳しくはコチラ
【金額】
・CPUインスタンス :85円/時間
・GPUインスタンス :560円/時間
推論は、python3を使用し、outputsに実行結果にはoutputsに出力レイヤーの名称と確率が返ってきます。こちらを使用することで、音楽ジャンル分類機が完成しました。
{"version": "20201001_022242346291", "outputs": [{"name": "y'", "data": "0.0480295866727829, 0.941403329372406, 0.010470078326761723, 9.703217074275017e-05, 4.2797791977022825e-09"}]}
インスタを立ち上げると、URLとKeyが確認でき、Publicをonにすると使用が始まります。
インスタの使用回数は横の画面で時間とcountが分かります。