書籍『TinyML』 の要点メモ, その3
その2 の続きのその3。
Wake-Word ("OK, Google", "Alexa", "Hey, Siri") のような限定された単語を検出するアプリをつくる。
7章: Wake-Word Detection: Building an Application
単語 "yes", "no" を判別するサンプルのビルドとデプロイまでの流れとアプリケーションの説明。
- 帯域、電力、プライバシーと音声UIのレスポンス面からエッジデバイスでオフラインでwake wordを検出する。そのあとはクラウドに任せる。
- "yes", "no", unknown word, silent の4つに分類する
- マイクから入力した音声波形をFFTして、横軸は時間、縦軸は周波数毎のパワーのグレイスケール画像(2次元のテンソル)として取り扱う
- モデルのサイズは18 kB
- 使用する演算のみモデルに含める。
- モデルが使用している演算を確かめるには、ビルドを演算を含まない状態で行い、エラーに従い足していく
- テンソル用のメモリ確保。トライ&エラーで増やす。
- windowが"noted"の"no"だけにかかって、"no"と誤検出しないように、1秒間の検出結果から判断する
- データフロー
- Audio Provider(マイク録音) -> Feature Provider(FFT) -> TFL Interpreter(Model) -> Command Recognizer(Wake-Wordの判別) -> Command Responder(LED表示など)
8章: Wake-Word Detection:
7章の発展版。自分でモデルをトレーニングするところから実施する。
- 手順
- モデル
- FFT
- ハン窓、480点サンプル(30ms)をゼロ埋めした512サンプルに対してFFTする)
- 256ビンの周波数を40に減らす。メル周波数のスケールに合わせて減らす。高周波側を平均するので結果的にノイズ抑圧効果もある。
- 奇数ビンと偶数ビンで傾向が違う。バグではなくそういう実装をしていてそのほうが精度がでる(??。
- 特徴量としてスペクトラムの大きさだけ使う。位相は使わない。
- 横軸:時間 49=1000ms/20ms - 1, 縦軸:周波数 40
- ニューラルネットワーク: CNN-> max pooling -> Full connection -> Softmax
- 1秒間の推論結果を使って最終的な予測結果を生成する
- FFT
- データを集めるのは大変だけど、"Visual Wake Words Dataset" というのがある
- 転移学習は有望だけど音声認識ではまだ発展途上