はじめに
Neural Network Console Challenge(以下、NNC Challenge)というコンテストに参加しました。
コンテスト概要
今回のNNC ChallengeはSonyが提供している Neural Network Console(以下、NNC)を用いて
Audiostockの音声(BGM)データを解析するというものです。
※学習用データ提供:Audiostock
コンテストに応募するとBGMデータと一覧表がダウンロードでき、学習に使用できます。
テーマは次の2テーマ
1.AudiostockのBGM検索の自動分類アルゴリズムを作り出す
2.自由な発想で音声データを解析する
例)似ている音声データをレコメンドするアルゴリズムを作り出す
曲の雰囲気に合うジャケット写真を自動生成する
テーマ選択
今回チャレンジしたのは1の「AudiostockのBGM検索の自動分類アルゴリズムを作り出す」です。
アノテーション(ラベル付け)
データに対してテーマに沿ったラベル付けを行います。
AudiostockのBGM検索の自動分類アルゴリズムということで、まずはHPの分類を確認しました。
HPを開くと幾つか選択可能でしたので、今回はイメージで分類をしてみることにしました。
※Audiostock HPより
データと一緒にダウンロードした一覧のタグの列を元にDataSetを作成しました。
一覧
DataSet
全部で48パターンあったので、正解ラベルはy0~y47とし、対応するラベルに1を、それ以外には0を付けました。
データの中には1つのBGMが複数のラベルに該当する場合もあり、その場合は該当するラベル全てに1を付けました。
例)「明るい」と「わくわく」など
DataSetをNNCで読み込むと、wavを直接指定することができます(ver.1.8から)。
モデル作成
NNCのサンプルにある「wav_Keyboard_sound」のプログラムをベースに作成しました。
それからYoutubeのNNCチュートリアル:波形データの分類を参考にしています。
データはサンプリング周波数8kHz、長さ24秒だったので、Inputのサイズは192,000になります。
8kHz × 24sec = 192,000
データを見ると、数秒ほどしか音声が無いデータなども含まれていたので、Sliceレイヤーを使用して1/3の8秒分のデータを抽出して学習に使用しました。
それから、今回の分類は複数ラベルへの分類になるので活性化関数はSoftmaxではなくSigmoidを使用しています。
モデルの簡単な説明です。
1.入力データからSliceを使用して8秒分のデータを抽出
2.MulScalarでデータ(波形の振幅)を-1~1の範囲に変換 ※MulScalarのValueに1/32768を設定
3.Transposeで転置
4.Reshapeで画像データとして扱えるように次元を変換
5.ImageAugmentationでデータの水増し
6.Convolutionを繰り返す
Main
ConvUnit
学習結果
トレーニング結果
training error(赤の実線)、validation error(赤の破線)共に下がっていて、ほぼ0になるまでとはいきませんでしたが、まずまずでしょうか。
評価結果
続いて評価結果です。
Accuracy(正確度):0.1063
Precision(精度):0.0435
Recall(再現率):0.0431
トレーニング結果から、そこそこの数値を期待していたのですが、かなり悪い結果になりました。
考察
評価結果が悪かった理由としては複数のラベルに分類されるデータが全問正解の場合に正解、1つでも間違えば不正解として評価されたのではないかと推測しました。
ただし、どうすれば結果が良くなるのかという解には至りませんでした。
感想
1つのデータが複数ラベルに該当するような分類を行ったのは今回が初めてだったので、最初はどうすればいいのかさっぱりでした。
最初はvalidation errorが下がらず、データを見直したりしてようやく旨くいったと思ったら、評価結果はかなり悪く、そのままタイムアップという形となりました。