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
これで、以上です。
ちょっと使ってみましたが、
やはり、これからの改善を待ちたいです。