Keras CNN で 音の分類 #5。update 2020.5.25
ディープラーニングで音声分類 のサンプルが出ていたので、試してみましたの #5です。
変更
1) 学習データのメルスペクトグラム方法を、変更しました。 by nishi 2020.5.25
Keras CNN Sound Classify
で、オリジナルができたので、同じ要領で、今度は、
Inception V3 を使って、同じ学習データ、テストデータを使って試してみました。
開発環境
OS: Windwos10
GPU: GeForece GTX 1070 8GB
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.今回のテストと学習用の クラス、スペクトラムデータを、npz で作成。
プログラムは下記になります。
今回は、メルスペクトグラムのパラメータを変えて、データを、 (128,1723,1) → (256,862,1) にして見ました 。
後、使う学習データは、 raw,wn,ss の3種類で試してみました。
load-dataset4.py
2. 学習の実行
プログラムは、下記になります。
今回は、float32 を使います。
GPUを GTX1070 8GByte にしたので学習できます。
今回は、
val_acc/loss=0.8100/0.9055 acc/loss=0.9740/0.5329 280 epoch です。
train-incept.py
2. モデルのアプリ
学習済みモデルを使った、PCのマイク入力による Sound Classify プログラムは、下記になります。
PCのスピーカから、ECS-50 のSound の音を出して、下記プログラムにPCのマイク経由で音を与えれば、クラスの分類が出来ます。
結構当たりますが、飛行機、ヘリコプター、エンジン などの、細かい音が一杯入っている音は苦手な、ような気がします。
注1) 別のテストで、ESC-50 のデータを読み込んで、直接判定させてみる、飛行機、ヘリコプター、エンジンの音だけでの検証で、
110/120 → 0.916667 になるので、どうやら、スピーカ → マイク 間で音が悪くなっているのが原因のようです。
注2) 今回は、学習データにwn(white noise) を入れたので、ある程度は、PCのノイズには強いようですが、やはり、マイク がPCのファンの音を拾わないようにした方が良いと思います。
注3) 下記のソースで、dbl_off = 2 を設定すると、 入力データを、0.4 sec ずらしてダブルでのmodel.predict() を行えます。
sound-predict3-incept-v3.py
注) ちなみに、PCのスピーカから、ECS-50 のSound の音を出すのは、
sound-player.py を使います。
Keras CNN Sound Classify #2
感想としては、InceptionV3 の方が、良い結果が得られるみたいです。