TensorFlow 2.10.0 RNN - LSTM による、Speech Recognition
RNN - LSTM による、Speech Recognition 例が有ったので、Windows11 TensorFlow-GPU 2.10.0 で試してみた。
Introduction to speech recognition with TensorFlow
GPU (GTX-1070) が入っているのが、Windows11 だったので、TensorFlow2 をバージョンアップして、 TensoFlow2-GPU 2.10.0 で試してみました。
当初、TensoFlow 2.12.0 の GPU 版を使うとしていましたが、Windows11 TensorFlow2 GPU 版は、2.10.0 が最後みたいな記述があったので、
こちらにしました。
環境:
Windows11
Python 3.10.6
tensorflow-gpu 2.10.0
GTX-1070
cuda toolkit 11.2
cuDNN SDK 8.1.0
Windows11で、最新の tensorflow gpu版は、どうやら仮想環境(wsl)下で、ubuntu 等を使って、gpu版を使うのが前提のようです。
最初から、ubuntu 等にすれば良いみたいだ。
train.py で、21 epoch 程学習させて、inferencModel.py で、テストしてみました。
下記が、inferencModel.py を、少しいじって、入力 文章(speach) と、それの、判定結果を出してみました。
>text: が、入力音の文章
>>>>>: が、それに対する、判定結果
結構、すごい。
でも、これは、日本語には、対応していないだろうね。
1. 学習。
オリジナルは、途中で止めると、再開が出来なかったので、再開できるように修正しました。
train.py
誰か、日本語対応の学習データを公開してくれないものか?
2. 学習データセット。
学習に使っているデータセットは、
The LJ Speech Dataset
これを、日本語のデータセットで、学習させれば、日本語対応になるのか?
kaggle に、下記があるけど。
Japanese Single Speaker Speech Dataset
2段構えにすれば、日本文(漢字) になりそうだが?
3. 参照。
使われているモデルの理解には、下記書籍が、役立ちました。
『Python と Keras によるディープラーニング』 マイナビ出版
6.3.8 双方向のリカレントニューラルネットワーク
7.1 Sequentialモデルを超えて: Keras Functional API
4. 検証。
試しに、テストデータを、スピーカーに出して、それをマイクで取り込んて、モデルを、Predict させみました。
やはり、結果は、とても使えるものでは、ありませんでした。
原因を、少し調べてみました。
テストデータを、スピーカーに出す時の、スペクトグラムと、それをマイクから取り込んで、model 入力用に変換した、
スペクトグラムが余り一致していないのが問題の様です。
この両者が一致しない事には、正しい結果は期待できません。
マイク入力の音声データを如何に正確に取り込むかが問題の様です。
現状のマイク入力の部分は、かなり出来が良くないのだろう。
しかし、これは不可能に近いか。不完全な入力データにも対応するモデルが必要なのかも。
そもそも、学習データが、1人の女性の声のみの様なのがいけない。色んな人が読んだデータにすべきじゃ。
実際のシチュエーションで使うには、まだまだか。
かなり、スピーカの音量を大きくすると、少し良くなるみたい。
Windows11 Realtek Audio Console で、イコライザー: 声 にしたら少し良くなった。
スピーカ側と、マイク側のそれぞれの音を、スペクトグラムで比較する時は、音のデータ長を同じにしないといけない。
4.1 学習データセットの、spectrogram が、後ろ詰になっているのが発覚。
mltu/transformer.py Class SpectrogramPadding にバグがあるみたい。
短いspectrogram データが、前詰めでなく、後ろ詰めになっているみたい。
試しに、前詰め になる様に、Class SpectrogramPadding を修正しました。
これで、再度試さないといかんぞね。
4.2 上記バグを修正して、さらに、spectrogram を、mel spectrogram にして、再度試してみます。
メルスペクトログラム にする利点は、下記に、記載があります。
畳込みニューラルネットワークの基本技術を比較する ー音でもやってみたー
後、音声データのAugmentationで、ノイズを入れてみたいぞね。
Data Augmentation に関しては、ディープラーニングで音声分類 に記載があります。
どちらも、以前試した、sound classify が、役立ちました。
5. おんちゃんのメモ。
1) Orange Pi5のNPUを使用してyolo(高速?)を動かしてみる(rknn-toolkit2)
2) LSTM-GRU入門。
直感で理解するLSTM・GRU入門 - 機械学習の基礎をマスターしよう!
上記ページのリメイク版の動画を観ると、RNN、BasicLSTM、LSTM、GRU の全体像が判りやすい。
3) TensorFlow の transformer を使った音声認識(ASR) と言うのがあるらしい。
TensorFlow の transformer を使った音声認識(ASR)のプログラムを改修して日本語学習させてみました。
大元は、下記らしい。
Automatic Speech Recognition with Transformer
4) OpenSeq2Seq
大分、ロボット開発とずれてしまった。
また、ボット開発 に戻らないといかんぞね。