Keras CNN で 音の分類 #4。update 2020.4.20
ディープラーニングで音声分類 のサンプルが出ていたので、試してみましたの #4です。
変更
1) 学習データを、変更しました。 by nishi 2020.4.17
2) sound-predict3-mobile-v2.py で、4096Hz 以上をブーストしました。 by nishi 2020.4.19
3) 学習データ毎のエポック数を 5 → 4 に変更。 by nishi 2020.4.20
Keras CNN Sound Classify
で、オリジナルができたので、同じ要領で、今度は、
Keras MobileNet V2 を使って、同じ学習データ、テストデータを使って試してみました。
開発環境
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.今回のテストと学習用の クラス、スペクトラムデータを、npz で作成。
プログラムは下記になります。
オリジナルの学習データでは、val_acc が余り上がらないので、下記を参考に手を加えてみました。
音声認識におけるデータ拡張
load-dataset1.py 改 Ver3.2
2. 学習の実行
プログラムは、下記になります。
今回は、float16 を使います。
そうすれば、GPU 4GByte メモリーでもなんとか学習できます。
従前の学習データでは、1,685エポックほどで、val_acc=0.72 で、そこから余り進まなくなります。
更に学習をさせて、2,650エポックで、 val_acc=0.726 val_loss=1.3138
やはり、学習データが適切でないと、モデルの汎用性は向上しないようです。
注1) 今回、学習データを見直して、改めて学習させてみます。
同じ学習データで、InceptionV3 で学習させると、なんとか val_acc=0.83 になりした。
val_acc=0.83 を超えればかなり、正解が多くなるみたいですが、
今回は、
val_acc/loss=0.8180/0.9420 acc/loss=0.9573/0.6375 725 epoch です。(2020.4.18)
注2) 1 学習データ毎のエポック数 = 5 → 4 に変更しました。(2020.4.20)
これで、val_acc の値が進みます。
train-mobile-v2.py update 2020.4.20
2. モデルのアプリ
学習済みモデルを使った、PCのマイク入力による Sound Classify プログラムは、下記になります。
PCのスピーカから、ECS-50 のSound の音を出して、下記プログラムにPCのマイク経由で音を与えれば、クラスの分類が出来ます。
飛行機、ヘリコプターなどの、細かい音が一杯入っている音は苦手な、ような気がします。
今回のモデルのデータサイズは、float16 ですが、もしかして、float32 にすると改善するのか。
注) チョンボして、float16 の学習済モデルに、float32 のデータを与えて予測させていましたが、
それでも問題なく動作するみたいです。これは、どうゆうこと? どうやら、中でキャストされているのでは。
注2) PCのスピーカ経由で、マイクから ECS-50 の音を取り込むと、mel スペクトグラム上で、4096Hz 以上が減衰しているみたいです。
もっと高性能のスピーカが必要みたいです。
今回は、取り敢えず、melsp 上で、 4096 以上をブーストする処理を加えて回避しました。
melsp = heigh_boost(melsp)
これで大分、改善されます。
注3) 同じく、取り込んだ音を、mel スペクトグラム上で確認すると、全般的にホワイトノイズが入って
きています。どうやら、マイク と PC本体 が近いので、PCのファンの音を拾っているみたいです。
マイクに雑音を入れないことが肝要みたいです。→ 学習データに wn(white noise) はやはり、入れた方が良いみたいです。
sound-predict3-mobile-v2.py (update 2020.4.19)
注) ちなみに、PCのスピーカから、ECS-50 のSound の音を出すのは、
sound-player.py を使います。
Keras CNN Sound Classify #2
感想としては、InceptionV3 の方が、良い結果が得られるみたいです。