ESP-EYE tensorflow lite microcontrollers examples/micro_speech

ESP-EYE の esp-idf で、tensorflow lite microcontrollers  examples/micro_speech を試してみました。

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro/examples/micro_speech

今回は、Build 、 Run の時のトラブルとその対処方を纏めてみました。

開発環境
Windows 10
esp-idf.py v4.0  Getting Started Guide for ESP-IDF v4.0
python3.7
MSYS2: make のみ利用
Git: Windows版とMSYS2 版を適宜に使用

あったら便利なツール
eclipse C/C++ 2020-06
(open java 64bit : OpenJDK11U-jdk_x64_windows_hotspot_11.0.8_10)
idf-eclipse-plugin : https://github.com/espressif/idf-eclipse-plugin

前提、
esp-idf v4.x 、 python3.7、 MSYS2 、Git はインストール済とします。

要領は、上記ページの Deploy to ESP32 の流れに従って行います。

1. tensorflow の clone
clone 先は、 E:\local\tensorflow とします。

MSYS2 ターミナルで、
$ cd /e/local
$ git clone https://github.com/tensorflow/tensorflow.git
$ cd tensorflow

2. Generate the examples を行います。
上の MSYS2 ターミナルの状態 (/e/local/tensorflow) で、
$ make -f tensorflow/lite/micro/tools/make/Makefile TARGET=esp generate_micro_speech_esp_project

3. tensorflow/lite/micro/tools/make/gen/esp_xtensa-esp32/prj/micro_speech/esp-idf ディレクトリを、もっと浅い場所にコピーします。

オリジナルの場所で、build をやっていると、 ファイルパスの文字数が、260 を超えて、ファイルが見つかりませんのエラーになります。

今回は、 e:\local\esp-2\micro_speech へコピーします。
esp-idf のディレクトリーは、邪魔なので、取ります。

4. idf.py でビルドします。
idf.py の Winddows ターミナルで、ビルドします。

注) もし build ディレクトリーを作ってしまっていたら、削除します。

>e:
>cd \local\esp-2\micro_speech
>idf.py build

5. コンパイルのワーニング
 いくつかワーニングが出るので、修正します。

5.1 12 bytes lost due to alignment. To avoid this loss, please make sure the tensor_arena is 16 bytes aligned.

https://github.com/tensorflow/tensorflow/issues/40837
Please try to Insert "alignas(16)" in the line that defines tensor_arena in main_functions.cc like below:
alignas(16) uint8_t tensor_arena[kTensorArenaSize];
との事なので、

main/main_function.cc の修正
line 44
//uint8_t tensor_arena[kTensorArenaSize];
// changed by nishi
alignas(16) uint8_t tensor_arena[kTensorArenaSize];

5.2 warning: 'I2S_COMM_FORMAT_I2S' is deprecated

main/esp/audio_provider.cc の修正

6. 実行時のトラブル。

6.1  Core Dump の発生

main/main_functions.cc の修正

6.2 Bad input tensor parameters in model の問題

下記ページを参照しました。
https://github.com/tensorflow/tensorflow/issues/41182
 ↓
https://github.com/tensorflow/tensorflow/commit/fbf407383c93774d10bd7c45cd66788a070b0e07

Reduce the size of TfLiteTensor for the TF Micro runtime.
All TFLM internal targets can be built with this flag by adding '--copt=-DTF_LITE_STATIC_MEMORY'.
This change reduces the sizeof(TfLiteTensor) to 64 bytes (64bit systems) down from 112 bytes (64 bit systems).

どうやら、TF Micro on r2.3 から、コンパイルオプションが変わったみいたい。
ここは、TF Micro on r2.2 のコンパイルオプションを使うことにします。

6.2.1 components/tfmicro/CMakeLists.txt から -DTF_LITE_STATIC_MEMORY を削除します。

components/tfmicro/CMakeLists.txt


6.2.2 再構築

1) build ディレクトリーを削除します。
>rmdir build

2) idf.py build を行います。
>idf.py build

7. 実行時の調整。
score >= 200 みたいなので、ほとんど検出できません。
ここは、 score >= 100 にしてみます。

main/recognize_commands.h
line 135
uint8_t detection_threshold = 100, // changed by nishi

これで、以上です。
ちょっと使ってみましたが、
やはり、これからの改善を待ちたいです。

このブログ記事について

このページは、おんちゃんが2020年8月30日 13:58に書いたブログ記事です。

ひとつ前のブログ記事は「Coral Edge TPU USB のサンプルの Object Detection を試す。#3」です。

次のブログ記事は「ESP-EYE ESP-WHO detection_with_web(cat face detection)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ