Qualcomm AI Hubを活用したAIモデルのエッジデバイス実装
Qualcomm AI Hubは、エッジデバイス上でのビジョン、オーディオ、音声アプリケーション向けに、AIモデルの最適化・検証・デプロイを支援するプラットフォームです。
あらかじめ最適化されたAIモデルのライブラリーや、AI開発プロセスを効率化する各種ツールを提供しています。
Qualcomm AI Hubプラットフォームに関する概要を知りたい方はこちら
本記事では、Qualcomm AI Hubを使って画像分類モデル「Inception-v3」を取得し、RB3 Gen2 Development Kit上のNPUでオンデバイス推論アプリケーションを実行するまでのフローを解説します。
実装手順
検証環境
■AIモデルのエクスポート
・PC: Windows11 WSL2
・Python 3.10.12
■推論アプリケーション用機材
・RB3 Gen2 Development Kit
・HDMIディスプレイ
・USB Type-Cケーブル
AI Hubでモデルを用意する
Qualcomm AI Hubにサインインし、APIトークンを設定する
AI Hubのアカウント設定ページで自身のAPIトークンを取得します。このトークンは後のステップで使用します。
※Qualcomm ID(Webサイトと共通)をお持ちでない場合は、こちらのページから作成してください。
仮想環境を起動する
qai_hubという名称で仮想環境を起動します。
$ python3 -m venv ~/qai_hub_venv
$ source ~/qai_hub_venv/bin/activate
AI Hub の Python パッケージをインストールする
(qai_hub_venv) macni@macnica:~$ pip3 install qai-hub
仮想環境を起動したターミナルからAI HubのAPIトークンを設定します。
(qai_hub_venv) macni@macnica:~$ qai-hub configure --api_token <自身のAPIトークン>
APIトークンの設定が完了後、下記のコマンドを使用することでAI Hubに対応するデバイス一覧を確認することが可能です。
(qai_hub_venv) macni@macnica:~$ qai-hub list-devices
これでAI Hubの事前設定は完了です。
Inception-v3モデル用ライブラリーをインストールする
このコマンドを実行することで、設定したモデルに対して以降の処理を行う際に必要なPythonパッケージを自動でインストールします。
(qai_hub_venv) macni@macnica:~$ pip install qai-hub-models
モデルをエクスポートする
今回の例では、
・量子化を w8a8
・ターゲットランタイムを TensorFlow Lite
・デバイスを Dragonwing RB3 Gen 2 Vision Kit
とし、以下のコマンドでQualcomm AI Hubで用意されているモデルexportのモジュールを実行します。
(qai_hub_venv) macni@macnica:~$ python -m qai_hub_models.models.inception_v3.export \
--quantize w8a8 \
--target-runtime=tflite \
--device "Dragonwing RB3 Gen 2 Vision Kit" \
--output-dir /home/macni/aihub/
exportモジュールの実行が成功すると、下記のディレクトリにTensorFlow Lite形式(.tflite)のモデル、ラベル、モデル情報が生成されます。
(qai_hub_venv) macni@macnica:~$ ls aihub/inception_v3-tflite-w8a8/
inception_v3.tflite labels.txt metadata.json
各ファイルごとの簡単な説明分を記載します。
inception_v3.tflite:RB3 Gen2のNPU向けに最適化・量子化されたモデル本体。このファイルを推論エンジンに読み込んで実行します。
labels.txt:モデルの出力(0〜999のインデックス)と実際のクラス名("tabby"、"Yorkshire terrier"など)を対応付けるファイルです。
metadata.json:モデルの入出力仕様が記載されたファイル。入力サイズ(224×224×3)・データ型(uint8)・量子化パラメータ(スケール・ゼロ点)などが含まれます。
エッジデバイス上でinception_v3の画像分類アプリを実行する
Qualcomm SoCには、tflite形式のモデルをQualcomm独自DSPコアのランタイムで実行する仕組みがあります。
そのため、AI Hubでエクスポートしたtfliteモデルを実機へ転送し、そのまま実行可能です。
本例では、Qualcomm Dragonwing QCS6490 SoC搭載のRB3 Gen2開発キットを使い、エッジデバイス上でinception_v3-classificationの画像分類アプリを実行します。
モデル・ラベルの準備
前のステップでAI Hub経由でエクスポートしたinception_v3.tfliteとlabels.txtをRB3 Gen2に転送します。
(PC) $ adb push [任意のパス]/inception_v3.tflite /etc/models
(PC) $ adb push [任意のパス]/label.txt /etc/models
画像の準備
本デモでは入力ソースとして弊社で用意した画像ファイルを使用します。
推論実行時には入力画像をリサイズして使用しています。
これでデモの準備は完了です。
サンプルアプリ実行
Qualcomm AI Hub から取得したInception-v3モデルを使用して、NPU・CPU それぞれでの推論結果を比較します。
今回は弊社で用意したサンプルアプリを使用しています。
検証内容
- 使用モデル:Inception-v3(w8a8 / TFLite)
- 使用画像:弊社用意のサンプル画像(犬)
- 比較項目:推論結果(Top-5クラス・確率)/推論時間
推論結果
NPU / CPU 推論時間の比較
NPU:平均推論時間 3.3 ms / 枚
CPU:平均推論時間 62.2 ms / 枚
NPUを使用した場合において、CPU実行時と比較して推論時間が大幅に短縮されたのが確認できました。
おわりに
本記事では、Qualcomm AI Hubから取得した Inception-v3(w8a8 / TFLite)を RB3 Gen2 実機の NPU 上で動かすまでの手順を解説しました。
実際に NPU と CPU それぞれで推論を実行したところ、NPUでは平均 3.7 ms、CPUでは平均 62.2 ms という結果が得られました。
AI Hub を活用することで、モデルの量子化・最適化といった複雑な工程をスキップし、ダウンロードしたモデルをそのまま実機で動かすことができます。
初期のアルゴリズム検討から製品実装までをスムーズにつなぐツールとして、ぜひQualcomm AI Hubをお試しください。
お問い合わせ
本ページの内容に関するご質問や製品詳細情報をご希望の方は、こちらからお問い合わせください。
