EFINIX
FPGAでAIを動かしてみる(1)~TinyMLクイックスタート~

はじめに
Efinix社のFPGAはFPGA上で自分たちの作ったAIを手軽に動かす環境を用意しています。
Efinixが提供するTinyMLプラットフォームを使って、学習済みモデルをFPGAに組み込んでみます。
エッジAIとは
エッジAIとは、クラウドとやりとりせずデバイスに内蔵されたAIになります。
クラウドを介さずデバイスのみで処理を完結でき高速に処理できます。
しかし、端末の性能には限界があり、モデルの軽量化(最適化)が求められます。
このようなモバイルやIoT機器向けにモデルを最適化するのが TensorFlow Lite になります。
FPGAは低レイテンシと大規模なハードウェア並列処理を備え、エッジAIソリューションに最適です。
Efinix社はFPGA上で動作する"TensorFlow Lite for Microcontrollers(TFLite Micro) C++ライブラリ"を提供しており、 簡単にFPGAへTensorFlow Liteのモデルを組み込むことができます。
TinyMLプラットフォーム
Efinix社のFPGA上でAIアプリの開発を容易にするためのライブラリやツール、サンプルプロジェクトが含まれています。
Efinix TinyMLアクセラレータはAI推論における計算負荷の高いレイヤー/操作を高速化します。
ユーザー定義アクセラレータはアプリで計算負荷の高いレイヤー/操作を高速化することも可能です。
AI推論の前処理や後処理に使用するデータ転送やCPU制御などは、 ハードウェアアクセラレータとして事前に定義されていて、AIモデルの実装を短縮できます。
Sapphire SoC
FPGA上に構築するRISC-VベースのCPU。
ユーザー設定可能でニーズに基づいてSoCを構成することができます。
AIアプリはRISC-V(Sapphire SoC)上で動作するTFLite Microライブラリを使用して開発を行います。
TensolFlow Lite Micro
TensorFlowはオープンソースの機械学習プラットフォーム。
TensorFlow LiteはTensorFlowの一部で、エッジデバイス用のモバイルライブラリが提供されています。
TensorFlow Lite Converterは学習後の量子化を容易にして、学習済みモデルを小さなTensorFlow Liteモデルに変換するものです。
TenworFlow Lite MicroはTenworFlow Liteと互換があるように設計されたC++ライブラリです。
Efinix TinyMLアクセラレータ
TFLite Microライブラリと互換性のあるAI用の専用アクセラレータ。
RISC-Vのカスタム命令を介してDMA操作を行い、
AI推論における計算負荷の高いレイヤー/操作を高速化します。
Efinix TinyML Generatorで学習済みモデルに合わせカスタマイズでき、
FPGAリソースを効率的に利用が可能です。
LiteモードとStandardモードの2つのモードをサポートしています。
- Liteモード : リソース消費が少ない軽量アクセラレータ
- Standardモード : より多くのリソースを消費する高性能アクセラレータ
TinyMLを使った開発の流れ
- TensorFlow Liteの学習済みモデルを用意
- "Efinix TinyML Generator"を使い、学習済みモデルからEfinix TinyML Accelratorをカスタマイズ
- 評価ボード上でTinyML Hello Worldを実行して動作確認
- 仕様に合わせたI/Oなどカスタマイズ
- 自分たち向けのTinyMLソリューションを作成
デモを動かす
今回はTI60F225の評価ボードを使ってEfinix-In/tinymlで用意されている、クイックスタートのサンプルを動かしてみたいと思います。
Edge Vision SoC User Guide の「Set Up the Development Board」を確認しながら、評価ボードの接続を行います。
接続については Ti60 F225 Demonstarion も参考になりました。
次に、quick_start
にある該当のhexファイルをダウンロードします。
PCとJ12コネクタをUSBで接続して評価ボードの電源を入れます。
Efinity Programmerを起動して"SPI Active"モードにしてダウンロードしたファイルを書き込みます。
CRESETボタンを押す、または、装置を再起動でデモの動作となります。
最初に赤画面が表示されます。その後にカラーバーが表示され、少し経つと、アプリケーションが動作します。
クイックスタート
3つのデモが用意され、2つのカメラをサポートしています。quick_start
ディレクトリのデモ用hexファイルは、これらの組み合わせの計6つが提供されています。
- デモ
- MobileNet v1 人物検出
- Yolo人物検出
- MediaPipe顔ランドマーク検出
- カメラ
- Raspberry Piカメラ(開発キットに付属しているもの、今回はこちらを利用)
- Google Coralカメラ
MobileNet v1 人物検出
- MobileNet v1アーキテクチャを使用
- 軽量で高速なモバイル向け深層学習モデル、少ない計算で高い精度を実現
- 96x96グレーのビデオフレーム入力から、人かそれ以外かを判定
- ディスプレイには人を検出したら緑、人が検出されないなら赤を描画
Yolo人物検出
- Yoloアーキテクチャを使用
- 深層学習と機械学習を組み合わせたリアルタイム物体検出モデル
- 96x96カラーのビデオフレーム入力から、人物を検出
- ディスプレイには検出された人物にバウンディングボックスを描画
MediaPipe顔ランドマーク検出
- MediaPipeアーキテクチャを使用
- リアルタイムのメディア処理に特化したフレームワーク
- 192x192カラーのビデオフレーム入力から、顔のランドマークを検出
- ディスプレイには検出された468個の顔のランドマークポイントを描画
デモの動作
クイックスタートでYolo人物検出を動かし、人物にバウンディングボックスが描画されるのが確認できました。
最後に
今回は評価ボードを使って、TinyMLのクイックスタートを動かしました。
次回は学習済みのモデルを使って、Efinix TinyMLアクセラレートをカスタマイズ、
開発キット上でHello Worldのサンプルを動かしてみたいと思います。
お問い合わせ
Efinix製品に関するお問い合わせや技術的なサポートはこちらまで
https://www.explorer-inc.co.jp/contact/efinixcontact.html
デバイスご購入や開発についてのご相談なども受け付けています。
ご質問・ご相談などは
こちらから
お問い合わせください。