Machine_learning_nursery_rhymes’s diary

仕事の種を模索するため、今まで逃げていた統計・データを勉強していく

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に特化した曲数はあまりありませんでした。点数が付かなかった曲はゼロとしました。
f:id:Machine_learning_nursery_rhymes:20200924200802p:plain
図1.Happy 分類

(2)音楽ジャンルで分類

(1)と同様に、タグに対してテキストマイニングを実施し、頻出単語を調べました。その中で私が聞いても違いが分かった、"ロック", "フュージョン","バラード","ポップス","クラシック"の5種類の分類機を作成しました。

(3)楽器で分類

(2)と同様に"ピアノ", "シンセサイザー","ギター","エレキ"で
楽器による音色に違いがあると考え、テキストマイニングで上位に挙がってきた楽器について4種類に分類わけしました。
f:id:Machine_learning_nursery_rhymes:20200928190250p:plain
図2.楽器イメージ

"学習とネットワーク設定

まずは、音声解析を実施したことがないので、サンプルプロジェクト(wav_keyboard_sound)を利用してNNWを構成しました。10層のコンボリューションと1個の結合層で学習していきます。
f:id:Machine_learning_nursery_rhymes:20200929075849p:plain
図3.学習用NNW

結果

やってみた結果、すべてのモデルで正解率が0.5を切っており、あてずっぽより精度が低かったです。
f:id:Machine_learning_nursery_rhymes:20200929123013p:plain
表1.学習結果正解率

(1)例として、図4は感情による分類になります。学習に2811曲使用しgpuを使用し10分程度で終わりました。VALIDATION ERRORは20エポック以降、過学習ぎみになっています。
f:id:Machine_learning_nursery_rhymes:20200925205507p:plain
図4.感情による分類の学習率

改良(ネットワーク設計)を見直しました。

11層のコンボリューションに変更し、Afine手前のプーリング処理をMaxPoolingにしました。また、構造探索できるツールをUNITに追加し、より細かいパラメータで探索できるようにしました。
最後に、Dropoutを入れることで、複数の異なるネットワークの多数決に近いアンサンブル学習し近いことができるようになっているはずです。認識違い等があればすいません。
詳しくは過去の記事を参照f:id:Machine_learning_nursery_rhymes:20200929124831p:plain
図5.再構成したニューラルネットワーク

再学習

今回、(1)~(3)の中で一番精度が向上した(2)音楽ジャンルで分類について考察していきます。学習に3000曲使用し、検証用に676曲使用しました。
f:id:Machine_learning_nursery_rhymes:20200928150639p:plain
図6.音楽ジャンル分類の学習率

f:id:Machine_learning_nursery_rhymes:20200929192346p:plain
図7.Confusion Matrix

Precison(実際に正解だった率)を見ると、y'__3("ポップス")が0.5と低いです。"ポップス"って自分自身聞いても、ポピュラーソング、またはポピュラー音楽なんで定義が曖昧でした。併せて、Recallでも0.3475と低くなっています。

結論としては"ポップス"が予測できていないことが分かりました。”ポップス”について、除いたら全体的に精度は向上すると考え、アノテーションを修正しました。

改良(アノテーション)/再学習

再学習した結果より、"ポップス"を除いた、"ロック", "フュージョン","バラード","クラシック"の4ジャンルで再度学習させました。学習の際は重みづけを前回と同様にして実施します。

学習結果からRe-editを使うと、選択中の学習/評価のネットワークの重み付きで再学習することができます。
f:id:Machine_learning_nursery_rhymes:20200929215628p:plain
図8.Re-edit画面

f:id:Machine_learning_nursery_rhymes:20200929220012p:plain
図9.再学習結果

図9、図7を比較しPrecisonが大幅に向上し、Accuracyが0.7703まで向上しました。

分類の一つ一つの間違いについて確認しました。y:labelは正解ラベルで、"y'__0:ロック", "y'__1:フュージョン","y'__2:バラード","y'__3:クラシック"の中で、確率になっています。データセットを作成する際に、xの名前がラベリングしなおされているようなので、曲を探すとき分かりづらかったです。
f:id:Machine_learning_nursery_rhymes:20200930221608p:plain

推論

Neural Network Consoleで作成した学習済みモデルをAPIで公開することで、ユーザは推論の実行をAPI経由で行うことが可能でEVALUATIONでタブのPublish APIを使用すると、リクエスト数課金、インスタンス占有の2種類が選べます。
今回は、wavなどの音楽形式のデータのためインスタンス占有タイプのみになります。起動時間をAlwaysかScheduleで選べました。
〇詳しくはコチラ
【金額】
・CPUインスタンス :85円/時間
GPUインスタンス :560円/時間
f:id:Machine_learning_nursery_rhymes:20200930221738p:plain

推論は、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にすると使用が始まります。
f:id:Machine_learning_nursery_rhymes:20201001131236p:plain

インスタの使用回数は横の画面で時間とcountが分かります。
f:id:Machine_learning_nursery_rhymes:20201001131414p:plain

まとめ

今回、初めてNeural Network Consoleを扱いましたが、一部Start TimeがUT時間で分かりにくかったり、データセットの作り方で苦戦しましたが、ドキュメントや公式のYouTubeなどが豊富にありCNN構造の勉強はしやすく面白かったです。

初心者でもアノテーションをしっかりすれば、2週間程度で精度がある程度出るモデルが作成できました。より、深い層にするなどでさらなる精度向上が望めるのではないかと思います。

*1:引用文献PN Table