Keras CNN で 音の分類 #3。
ディープラーニングで音声分類 のサンプルが出ていたので、試してみました。
Keras CNN Sound Classify
で、オリジナルができたので、同じ要領で、今度は、
Keras MobileNet を使って、同じ学習データ、テストデータを使って試してみました。
開発環境
OS: Windwos10
GPU: GeForece GTX 1050 4GB
Anaconda
Python3.6
TensorFlow 1.14.0 GPU
Keras 2.3.1
注1) TensorFlow 1.14.0 を使っているのは、 K210 の YOLO v2 等で、
使っているので、他意はありません。
注2) Keras は、オリジナルを使っています。
tensorflow.python.keras を敢えて使っていません。
手順は、上記ページに従って行いました。
1. 学習の実行
プログラムは、かきになります。
tarin-mobile.py
2. 学習の結果
90 epoch まで学習させましたが、
1 epoch 120[sec] なので、直ぐに終わります。
tennsorboard で確認すると、50 epoch でMAX みたいです。
3. 検証プログラム
ESC-50 のmeta/esc50.csv を読み込んで、
実際の音を、ヘッドホーンで確認しながら確認してみました。
プログラムは、下記になります。
sound-predict-mobile.py
4. 検証の結果
最後の、2件の結果だけ示します。
学習とテストデータがごちゃ混ぜなので、結果として
学習時の正解率となりました。
正解率: 0.95
5.結論
ESC-50 の WAV はS/N 比ががよくて、クリアーな音で、旨く録音されているので
結構、良い結果が得られたと思います。
これが、PCのマイクからだと、かなり音が悪いので、同じ様な結果は得られません。
PCのマイク音のノイズやダイナミックレンジを改善するか、
PCのマイク音に近い音質の学習データも加えてやれれば、かなり良くなるのではと思います。
注) この点に関しては、Keras CNN Sound Classify #2 で ESC-50 の WAV音を、スピーカー出力 > マイク入力
での評価テストの中で、高音域の消失(減衰) が問題だと言う事判ったので、そちらを参考にしてください。
つまり、アプリケーションプログラムの実装の問題。
この後、MobileNet V2 も同じように試してみましたが、
こちらは、GTX1050 の 4GB では、役不足です。
8GBの GPU が買えたら、再チャレンジしてみたいと思もっちょります。
注) float16 を使うと、GTX1050 でも学習できるようなので、今試しちょります。(2010.2.7 by おんちゃん)
6.その後
1) コンデンサーマイクが、音がクリアーだと言う事なので、早速、安いコンデンサーマイクを
購入して試してみます。
2) 当初、K210(Sipeed MAIX BiT) で、このMobileNet 版 sound-classify を動かそうかと思っていましたが、
その前に、Coral USB TPU Accelerator(EdgeTPU) + Raspberry PI 3B+ が簡単に
出来そうなので、Ubuntu PC + Coral USB TPU Accelerator(EdgeTPU) で先に試して見ようか
と考えちょります。