目的
Edge TPU Python APIをWindowsで動作させる。
動機
2020.1.29にCoral January 2020 Updatesがリリースされた。このリリースでWin, Macがサポートされた。このため、Windowsについて動作することを確認しようと思った。
Edge TPU、January 2020 Updates がきた!— nb.o (@Nextremer_nb_o) January 30, 2020
Win、Macのサポートや、ランタイム、Edge TPU Compilerのアップデートってある。
TF-Liteは v2.1。https://t.co/fx1cy6wlXO
Windows環境のセットアップ
環境
試した環境は以下の通り。
- OS: Windows 10 Home, バージョン 2004, OSビルド 19041.21
- CPU: AMD Ryzen 7 1700
- メモリ: 16GB
- Coral USB Accelerator
セットアップ
Python環境
Anaconda Promptを立ち上げ、仮想環境を作成しておく。
> conda create -n coral anaconda
Edge TPU runtimeのインストール
Install the Edge TPU runtime - On Windows を参考に、Edge TPU runtimeをインストールする。ダウンロードしたファイルを解凍後、edgetpu_runtimeフォルダ内にあるinstall.batを実行する。
TensorFlow Lite interpreterのインストール
TensorFlow - Python quickstartを参考に、TensorFlow Lite interpreterをインストールする。
> pip install https://dl.google.com/coral/python/tflite_runtime-2.1.0-cp37-cp37m-win_amd64.whl
これでTensorFlow Lite APIからEdge TPUを使うことが可能。Run a model using the TensorFlow Lite AP のサンプルが動作できる。
[注意]
TensorFlow Lite API の場合、Edge TPUをPCに接続していない場合、
"Failed to load delegate from edgetpu.dll"
のエラーとなる。一見、Edge TPU runtimeのインストールに失敗していそうに思えるので注意。
"Failed to load delegate from edgetpu.dll"
のエラーとなる。一見、Edge TPU runtimeのインストールに失敗していそうに思えるので注意。
Edge TPU Python APIのインストール
Coral - Edge TPU Python API for Mac and Windows を参考に、Edge TPU Python API for Windowsをインストールする。
> pip install https://dl.google.com/coral/edgetpu_api/edgetpu-2.13.0-cp37-cp37m-win_amd64.whl
これでインストールは完了。
動作確認
以前、作成したサンプルはRaspberry Pi + PiCamera用であったので、OpenCVベースに変更したものを用意した。とりあえず、現時点はObject detectionのサンプルのみ。
PCに接続できるカメラがないため、動画ファイル(スマホで撮影)入力。
モデルはSSDLite MobileNet EdgeTPU。
PCに接続できるカメラがないため、動画ファイル(スマホで撮影)入力。
モデルはSSDLite MobileNet EdgeTPU。
その他
Edge TPU Compilerのバージョンアップ
Coral January 2020 Updatesでは、Edge TPU Compilerもバージョンアップした(2.0.291256449)。今回のバージョンで少しはまった点について。
SSDLite MobileNet EdgeTPU に含まれるTF-Liteモデル(Full integer quant model)をEdge TPU Compilerでコンパイルしたところ、推論実行時に
"ValueError: Dectection model should have 4 output tensors!This model has 12."
でエラーとなってしまった。
前回のEdge TPU Compiler(2.0.267685300)では問題なく、モデルも変わってはいない。
原因は、もともとのTF-Liteモデルが確かにoutputが12個あったので、Edge TPU Python APIが期待するoutputの個数ではなかったためである。
通常、TF-Liteモデルを生成する際、tocoで4つのoutput_arraysを指定するはずだが、SSDLite MobileNet EdgeTPUのpre-trainedモデルには異なるoutputが指定されていたと思われる(おそらく、もともとはPixel4向けなのでpostprocessingが異なるのかもしれない)。なので、今回のバージョンアップでは正しくコンパイルできるようになった...ということかもしれない。
SSDLite MobileNet EdgeTPUはcheckpointからexport、tocoで変換することで、Edge TPUで動作することは確認できた。
(もとのSSDLite MobileNet EdgeTPUのTF-Liteモデルはどうやって使うのだろうか?)
0 件のコメント:
コメントを投稿