概要
Coral Edge TPU Accelerator上で、Tensorflow Liteモデルが動かせた。
背景と目的
Coral Edge TPU Acceleratorをたまたまいじる機会ができた。とりあえず、手元のWindows PCと繋いで動かすこと自体には大してメリットはないのだが、ひとまずサンプルのモデルが動かせることを確認する。
詳細
0. 環境
- Windows 11
- Windows Subsystem for Linuxが有効
- Python 3.7.7
- numpy 1.20.0
- edgetpu_runtime_20210119
- USBハブ Buffalo BSH4U21U3を介してPCに接続
1. 関連ソフトインストール
上記によると、VC++ 2019再頒布可能パッケージと、edgetpu runtimeをまずは入れる必要があるらしい。
1.1 VC++ 2019再頒布可能パッケージ
インストーラをたたく。PC再起動が必要。
1.2 edgetpu runtime
edgetpu runtimeは、バージョンがいろいろあるが自分の環境に合うものを選ばないといけないらしく、後述のサンプルコード実行の際、
ValueError: Failed to load delegate from edgetpu.dll
と出てしまうため、いろいろ試し結局私の環境では、
から、edgetpu_runtime_20210119.zipを使用することになった。 解凍後、install.batを実行する。クロック周波数を最大に設定するか聞かれるので、Nを選択。(Yを選択してもよいが、アクセラレータが非常に熱くなるため必要に応じて)
デバイスドライバーがインストールされ、デバイスが認識されるようになった。
1.3 numpyのアップデート
私の環境は、最初numpyのバージョンが1.19.5で、後述のサンプルコード実行の際に
RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd
と出てしまったためを1.20以上にアップデートが必要だった。
2. PyCocalのインストール
pip install --extra-index-url https://google-coral.github.io/py-repo/ pycoral
なお、pip install pycoralではだめ。サンプルを動かすときに、
ModuleNotFoundError: No module named 'pycoral.adapters'
と出てしまう。
3. サンプルのモデルを動かす
以下、デスクトップで作業。
3.1 サンプルコードとモデルをダウンロード
まず、gitから以下をclone。
mkdir coral cd coral git clone https://github.com/google-coral/pycoral.git cd pycoral
次に、モデルをダウンロードする。私の環境では、Windows Subsystem for Linuxが有効になっているので、コマンドプロンプトでも以下が実行できた。
bash examples/install_requirements.sh classify_image.py
3.2 実行する
python3 examples/classify_image.py --model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels test_data/inat_bird_labels.txt --input test_data/parrot.jpg
実行したところ、以下の表示が出てうまく動いた。 1回目は少し遅く、2回目以降はほぼ安定して速い。他の環境と比較してないのでよくわからないが、MobileNet v2が数msecで実行できるということがわかった。 参考サイトの速度と比べてやや遅いが、USBハブを使っているからだろうか?
----INFERENCE TIME---- Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory. 14.8ms 4.5ms 4.5ms 4.4ms 4.4ms -------RESULTS-------- Ara macao (Scarlet Macaw): 0.75781
まとめと今後の課題
Coral Edge TPU Accelerator上で、Tensorflow Liteモデルが動かせた。とりあえず、サンプルが動かせただけなので、次は別のものを動かしてみたい。