ラズパイでedge tpu上で実行までの流れを整理。
- 学習してモデル作成する(kerasの場合hoge.h5)
- hoge.h5をtfliteへ変換する
- 変換したtfliteをedgetpu向けにコンパイルする
- エッジ上で推論する
が必要。
学習してモデル作成する
Kerasでモデルを作成する。詳細は割愛するがMobileNetv2でモデルを作成。
h5モデルをtfliteへ変換する
ポイントはuint8に量子化する必要がある。
参考: https://qiita.com/iwatake2222/items/6aeab468c326ecc21563
$ tflite_convert \
--output_file=best_mobilenetv2_2.tflite \
--keras_model_file=best_mobilenetv2.h5 \
--inference_type=QUANTIZED_UINT8 \
--default_ranges_min=0 \
--default_ranges_max=255 \
--mean_values=128 \
--std_dev_values=127
なんとか変換はできたが、動作がおかしい。
こちらを参考にコードで変換を行ってみる
https://qiita.com/jdk/items/f2bccaecd4827cf3977b
変換したtfliteをedgetpu向けにコンパイルする
- 公式通りにコンパイラをダウンロードする
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
$ sudo apt-get update
$ sudo apt-get install edgetpu
- コンパイル実行
$ edgetpu_compiler "tfliteモデル"
完了したらデフォルトでは"xxxxx_edgetpu.tpu"というファイルが出来ている
エッジ上で推論する
推論はこちらを参考に
https://qiita.com/PINTO/items/dd6ba67643bdd3a0e595
直列でもかなりの速度だけど並列処理することで高速化出来る
その他EdgeTPU上のメモリに乗るようにモデルサイズを意識することでより高速化可能