2017年11月14日火曜日

人工知能でお菓子を認識する(その1)

 最近の人工知能アプリの開発環境として注目を集めているもののひとつに、Sony Neural Network Consoleがあります。通常のようなプログラミング言語でのコーディングなしに、GUIの操作だけで、各種のNeural Networkを構成して、学習させ、問題を解くことができます。さらに、Neural Networkの層の構成を含めた各種のハイパーパラメータの自動チューニング機能もあります。 

 このSony Neural Networkを使う例題、良くある画像関係のもの多いと思っていましたら、それと違う、時系列データ(ここでは音データ)を扱うものがありました。それは、コンピュータサイエンス&テクノロジの専門雑誌「インタフェース」の2017年12月号に載っていました。この素晴らしい記事を書かれた常磐和宏氏に感謝したいと思います。
 以下は、それに興味を惹かれて、追試行したメモに過ぎませんが、ご参考になるところがあればうれしいです。

解きたい問題
 下図にある5種類のお菓子等を、振って(適当な秒数)、その音で、どのお菓子であるかを認識するというものです。[0]と[3]のデータは、上記雑誌で提供されているものを使いました。一方、[1]と[2]のお菓子は、自分でスーパーへ行って購入し、音データの作成も自分で行いました。また、[4]龍角散飴は雑誌ではやっていないのですが、家にあったので追加してみました!


お菓子と飴の5種類を用意します
(1)音データの準備
 まず、それぞれのお菓子の袋を振って、カサカサという音を20秒くらい録音します。その生データは.wavという拡張子のファイルにします。次に、それにFFTを施し、10行256列の.csvファイルのファイルに分割します。行を時系列とし、列はFFT後の周波数毎のゲイン(dB)とします。これは、10msごとにオーバラップしながら、音を切り取った.csvファイル群になります。[2]とんがりコーンを振った時のカサカサ音の例は以下にあります:
https://www.dropbox.com/s/27wjqxhk6x149xw/fycorn.wav?dl=0
とんがりコーンを振った時の音の例

(2)学習用データと評価用データの準備
 ディープラーニングでは、学習用に大量のデータが必要です。この場合は、幸い、簡単に自動的に、上記の.csvファイルを生成することができます。それらの.csvファイルのそれぞれに、5つのうちのどのお菓子であるかのラベルを付けたものを作ります。今回は、雑誌の例のとおり、学習用と評価用に、それぞれ、お菓子毎に100個のファイルを用意しました。

入力データセットに設定した周波数スペクトルの例

(3)Neural Networkの構成
 この場合は、時系列のデータを学習させます。そのための基本的な構造RNN(Recurrent Neural Networ)のモデルも用意されています。それを使います。適宜、ハイパーパラメータを変更することも可能です。その構成は、図のように全て、GUIで行います。
RNNの層構成

(4)学習と評価の実行
 どのようなNeural Network構造にするか、そして、学習用と評価用のデータセットの場所を指定した後、ボタンを押すと、指定された回数(epochs)だけ学習が行われます。その状況もグラフィックスで見ることができて楽しいです。学習には一定の時間がかかります。それが済んだら、今度は、評価用のボタンで評価を実施します。これは、学習に比べて、非常に短時間ですみます。フォーワード計算だけですから。

ラーニングカーブ(Training Error & Validation Error)

(5)結果
 4つのお菓子を振った結果として、トータルでは、約90%の精度で認識できました。下図にあるように、[1]ベビースターと[2]とんがりコーンは、97%〜99%と高い認識率でしたが、[0]札幌ポテトと[3]かっぱえびせんは、互いにどこか似ているのか、やや認識率が低く、82%〜87%という結果でした。[4]龍角散は88%とまずまず。

学習後の評価結果(クリックして拡大できます)

まとめ
 Deep Learningに関しての基本的なところの一定の理解があれば、このような(多分他の方法では結構むずかしい)問題も、解けてしまいます。すばらしい!と思ったら、中身をさらに調べ、周辺知識も修得する方向に持っていけるのではないでしょうか!

0 件のコメント:

コメントを投稿