Edge TPU用のモデル作成チュートリアルを実施してみました

はじめに

IoT.kyotoではVieurekaカメラを使ったAIのソリューションを提供しています。
AIカメラでお客様個別の課題解決をサポートする「AIカメラお手軽導入パック」を追加しました!

エッジ推論とクラウドをうまく活用することで、コストを抑えつつAIによる自動化の恩恵を受けることが出来ます。エッジ推論で重要になってくるのが処理速度です。エッジ側には潤沢なGPUなどのリソースが無いため、処理時間が遅くなる傾向にあります。
弊社で利用しているVieurekaカメラ(VRK-301)の性能は以下となっております。
CPU/GPU:
ARM Cortex-A72 x 2 @1.8GHz
  + Cortex-A53 x 4 @1.4GHz
/ARM Mali T860MP4

通常の画像処理では問題ないハードウェアリソースが搭載されているのですが、機械学習のモデルを実行する場合、少々パフォーマンスに問題が起きることがあります。

そこでEdge TPUを利用することでエッジ側のパフォーマンス不足を補うことができます。
USB Accelerator

Edge TPUチュートリアルをやってみる

以下のチュートリアルを参考に実際にモデルの作成を試してみました。
Retrain EfficientDet-Lite detector for the Edge TPU (TF2)

上記チュートリアルでは以下5つを認識するEfficientDet-Liteモデルを作成する事ができます。

  • Baked Goods
  • Salad
  • Cheese
  • Seafood
  • Tomato

最終的には以下3つのファイルをダウンロードできます

  • salad-labels.txt
    • 上記5つのラベルの一覧
  • efficientdet-lite-salad.tflite(モデルサイズ:4.4MB)
    • Tensorflow Liteのモデル
  • efficientdet-lite-salad_edgetpu.tflite(モデルサイズ:5.9MB)
    • Edge TPU向けに変換したTensorflow Liteのモデル

作成したモデルで推論すると以下のような結果を得ることができます。

基本的には上記チュートリアル通りに実行することで、Edge TPU用のモデルが作成できますが、何点か補足します。

「!pip install -q tflite-model-maker」の実行に失敗する

必要なライブラリが存在しないため、上記コマンドの実行に失敗します。(2022年5月12日現在)
以下のコマンドを実行し必要なライブラリをインストールして下さい。
「!apt-get install portaudio19-dev 」

Edge TPUモデルのサイズに関して

Edge TPUには8MBのメモリが載っており、モデルサイズが8MBを超えるとEdgeTPUのパフォーマンスを最大限活かすことができません。ノートブック上にも記載がありますが、8MBという記載はなかったので補足します。

Edge TPU向けモデルへの変換について

Edge TPU向けのモデルへの変換の際に、以下のようなログが出力されます

Edge TPU Compiler version 16.0.384591198
Searching for valid delegate with step 1
Try to compile segment with 267 ops
Started a compilation timeout timer of 180 seconds.

Model compiled successfully in 3752 ms.

Input model: efficientdet-lite-salad.tflite
Input size: 4.24MiB
Output model: efficientdet-lite-salad_edgetpu.tflite
Output size: 5.61MiB
On-chip memory used for caching model parameters: 4.24MiB
On-chip memory remaining for caching model parameters: 3.27MiB
Off-chip memory used for streaming uncached model parameters: 0.00B
Number of Edge TPU subgraphs: 1
Total number of operations: 267
Operation log: efficientdet-lite-salad_edgetpu.log

Model successfully compiled but not all operations are supported by the Edge TPU. A percentage of the model will instead run on the CPU, which is slower. If possible, consider updating your model to use only operations supported by the Edge TPU. For details, visit g.co/coral/model-reqs.
Number of operations that will run on Edge TPU: 264
Number of operations that will run on CPU: 3
See the operation log file for individual operation details.
Compilation child process completed within timeout period.
Compilation succeeded!

実はこのログは非常に重要です。
特に以下の部分が重要です。

Number of operations that will run on Edge TPU: 264
⇒どのくらいの操作がEdge TPUで実行されるのか
Number of operations that will run on CPU: 3
⇒どのくらいの操作がCPUで実行されるのか

Edge TPU向けのモデルに変換できて、モデルサイズが8MB以下であっても「Number of operations that will run on Edge TPU」の項目が0であればパフォーマンスの向上は期待できません。

モデルの作成ができたので、変換したモデルをVieurekaカメラで実際に動作させてみてどの程度処理速度が変化するかを検証してみました。
VieurekaカメラでEdge TPUを動作させる方法に関しては以下の記事を参考にしました。
EdgeTPUを活用した推論処理速度の高速化

処理時間
Edge TPUなし約0.2秒
Edge TPUあり約0.05秒

Edge TPUを利用すると処理速度が大幅に向上していることがわかりますね。
VieurekaカメラとUSBケーブルで接続するだけで利用できるという点も非常に便利だと感じました。

最後にEdge TPU利用時の注意点について記載します。

Tensorflow LiteのモデルであればすべてEdget TPU用のモデルに変換できるというわけではありません。制限事項があります。
詳細は以下を参照いただきたいのですが、モデルの変換に失敗した場合解決が難しいです。
TensorFlow models on the Edge TPU – Model requirements

最後に

Edge TPUを使うことで気軽にエッジ側のリソースを増強することができます。ただ、Edge TPU向けモデルの変換に失敗することも多く、Edge TPUで動作させる変換処理の過程で認識精度が低下することもあります(整数量子化の処理)。利用ケースをうまく見極めて使うことが大切だと思います。