TinyML-CAM - MobiCom'22 論文「TinyML-CAM: 80 FPS 画像認識 in 1 KB RAM」のコード

(Code for MobiCom'22 paper 'TinyML-CAM: 80 FPS Image Recognition in 1 Kb RAM')

Created at: 2022-07-18 12:31:50
Language: Jupyter Notebook
License: Apache-2.0

TinyML-CAM - 1 KB RAM で 80 FPS で動作する画像認識システム

デモ - ESP32でのHOGおよびランダムフォレストベースの画像認識

ESP32は、画像フレームからラズベリーパイピコ、ポルテンタH7、Wioターミナルを分類します

https://user-images.githubusercontent.com/16524846/179447640-d7f5efa9-3a44-431c-922d-348ee526c782.mp4

業績

ビデオから次のことがわかります。

  • 時間。画像フレームの場合、デジタル信号処理(DSP)ベースの特徴抽出時間は≈12ms、分類時間は≈ <20μs(DSPの1/1000)です。

  • FPS.これは 1000/12 ミリ秒 = 83.3 FPS で、TinyML-CAM システムが HOG 特徴抽出 (DSP を使用) と分類に要する時間です。ESP32のフレームレートは30FPSであるため、フレームをキャプチャするだけで、1000/30 = 33ミリ秒かかります。DSPと分類時間は≈わずか12ミリ秒であるため、画像認識は2つの連続するフレーム間でリアルタイムで行われ、ESP32カメラのFPSは変更されません。

  • 精度。ペアプロット解析で予想されたように、Portenta と Pi (フィーチャが重複している) のラベルが誤って表示されることがよくありますが、データセットの品質を向上させることで修正できます。

  • 記憶。消費するRAMはわずか1kBで、TinyML-CAM画像認識システムを追加する前後のArduino IDEによって計算されたRAMの差です。

https://dl.acm.org/doi/pdf/10.1145/3495243.3558264

必要条件

  • ESP32から画像を簡単にキャプチャするには、Arduino IDEライブラリマネージャーを介してEloquentライブラリをインストールします。
  • PC で画像を収集し、ML 分類器をトレーニングするには、EverywhereML Python パッケージをインストールします。
  • TinyML-CAMパイプラインをテストするには、ユーザーは任意のバリアントのESP32のみを必要とします。

コード

  • [ino]-CameraWebServer.ino- 画像データセットコレクション用。ESP32にアップロードした後、WiFiネットワークに接続し、任意のWebブラウザからアクセスできるHTTPビデオストリーミングサーバーを起動します。
  • [h]-HogClassifier.h- には、収集された画像データを使用してトレーニングされたランダムフォレスト分類器が含まれています。
  • [h]-HogPipeline.h- 画像フレーム用のHOG機能エクストラタが含まれています。
  • [ino]-arduino-ESP32-code.ino- 上記の2つの.hファイルとともにESP32にアップロードします。アップロード後、オブジェクトをカメラの前に配置して、予測されたラベルを確認します。
  • [ipynb]-TinyML-CAM-full-code-with-markdown.ipynb- このプロジェクトに必要なすべてのコードと、各ステップのサンプル出力が含まれています。

今後の課題

フレームレートを向上させる数学的近似法を実装することにより、DSP時間(現在は12ミリ秒)を短縮するには、つまり、6ミリ秒に短縮すると、1000/6ミリ秒= 166.6FPSになります。

TinyMLベンチマークと同様に、さまざまなデータセット、MLアルゴリズム、IoTボードでパイプラインをテストする予定です。