はじめに
オクタコア(Arm® Cortex-A78 x4 + A55 x4)の MediaTek® Genio 1200 を搭載した
ADLINK社 I-Pi SMARC 1200 を使用して AI 推論を実行してみました。
その手順をまとめてみましたのでぜひお試しください。
<今回使用した主な製品>
-
I-Pi SMARC 1200 (I-Pi SMARC Plusキャリア、ADLINK社 SMARC LEC-MTK-I1200 モジュール, 4GB LPDDR4X, 64GB UFSストレージ)
MediaTek® Genio 1200 プラットフォームベースのI-Pi SMARC開発キットです
その他に今回用意するもの:
- 1.事前準備用
- Linux Host PC ( SMARC の UFS ストレージへの Yocto イメージの書き込みとして使用)
- HDMI ケーブル・モニター
- USB マウス・キーボード
- LAN ケーブル(インターネットへの接続に使用)
- ウェブカメラ(AIデモに使用)
- 2.以降用
- シリアルコンソールでアクセスする Host PC (Linuc もしくは Windows)
- シリアルコンソール用ケーブル等
- HDMI ケーブル・モニター
- LAN ケーブル(インターネットへの接続に使用)
- ウェブカメラ(AIデモに使用)
参考:
主な手順としては、以下のとおりです。
- 事前準備
- シリアルコンソール
- AI推論の事前準備
- AI推論の実行
1. 事前準備
下記記事を参考に ADLINK社が用意したプリビルドの Yocto Image を使用して SMARC が起動できる環境を構築します。
注意事項として、今回使用する Yocto Image は下記をご使用下さい。
adlink-lec-1200-yocto-kirkstone_V3_R1_240201
2. シリアルコンソール
下記記事を参考に Host PC から SMARC へシリアルコンソールで接続します。
ipiwiki:Reading The Data From Serial Port
下記は Windows PC での例となりますが、SMARC 起動時に Host PC の TeraTerm で下記のようなコンソールが出てくればシリアルコンソールの接続は成功です。
3. AI推論前の事前準備
SMARC を起動します。
Host PC のコンソール画面に、"Hit any key to stop autoboot:" が出力されている間に
何かしらのキー入力を行うと U-Boot のプロンプトが表示されます。
(この間にキー入力がなければ自動的に起動します。その場合は root でログインして、reboot して再度チャレンジしてください。)
下記コマンドを実行します。
setenv boot_conf "#conf-mediatek_lec-mtk-i1200-ufs.dtb#conf-gpu-mali.dtbo#conf-video.dtbo#conf-apusys.dtbo"
saveenv
reset
下記画面が表示されたら、root でログインします。
接続したウェブカメラのビデオデバイス名を確認します。
# v4l2-ctl --list-devices
/dev/video5 であることが判りました。
カメラ情報を取得します。
# v4l2-ctl --list-formats-ext -d /dev/video5
接続しているカメラのフォーマット、サイズ、フレームレートをご確認下さい。
4. AI推論の実行
こちらにNNStreamer のサンプルが Python で用意されています。いくつか試してみます。
/usr/bin/nnstreamer-demo/
Python script |
Category |
run_nnstreamer_example.py |
Demo Runner |
nnstreamer_example_image_classification.py |
Image classification |
nnstreamer_example_object_detection.py |
Object detection |
nnstreamer_example_object_detection_yolov5.py |
Object detection |
nnstreamer_example_pose_estimation.py |
Pose estimation |
nnstreamer_example_face_detection.py |
Face detection |
nnstreamer_example_low_light_image_enhancement.py |
Image enhancement |
cd コマンドで /usr/bin/nnstreamer-demo/
に移動します。
# cd /usr/bin/nnstreamer-demo/
オプション --engine
:
サンプル実行時に --engine でプラットフォームがサポートしている下記バックエンドから1つを選択
neuronsdk
, tflite
, armnn
オプション --camera
:入力カメラを選択
オプション --performance
:プラットフォームのパフォーマンスモードを設定
■ 姿勢推定
サンプルの nnstreamer_example_pose_estimation_uvc.py
を実行します。
・neuronsdk で MDLA で 実行:--engine neuronsdk
# python3 nnstreamer_example_pose_estimation_uvc.py \
--engine neuronsdk --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・tflite で CPU で実行:--engine tflite
# python3 nnstreamer_example_pose_estimation_uvc.py \
--engine tflite --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・Armnn で GPU で実行:--engine armnn
# python3 nnstreamer_example_pose_estimation_uvc.py \
--engine armnn --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
■ 顔検出
サンプルの nnstreamer_example_face_detection.py
を実行します。
・neuronsdk で MDLA で 実行:--engine neuronsdk
# python3 nnstreamer_example_face_detection_uvc.py \
--engine neuronsdk --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・tflite で CPU で実行:--engine tflite
# python3 nnstreamer_example_face_detection_uvc.py \
--engine tflite --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・Armnn で GPU で実行:--engine armnn
# python3 nnstreamer_example_face_detection_uvc.py \
--engine armnn --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
■ 物体検出 (ssd_mobilenet_v2_coco)
サンプルの nnstreamer_example_object_detection_uvc.py
を実行します。
・neuronsdk で MDLA で 実行:--engine neuronsdk
# python3 nnstreamer_example_object_detection_uvc.py \
--engine neuronsdk --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・tflite で CPU で実行:--engine tflite
:
# python3 nnstreamer_example_object_detection_uvc.py \
--engine tflite --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・Armnn で GPU で実行:--engine armnn
# python3 nnstreamer_example_object_detection_uvc.py \
--engine armnn --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
■ 物体検出 (yolov5)
サンプルの nnstreamer_example_object_detection_yolov5_uvc.py
を実行します。
・tflite で CPU で実行:--engine tflite
:
# python3 nnstreamer_example_object_detection_yolov5_uvc.py \
--engine tflite --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
・Armnn で GPU で実行:--engine armnn
# python3 nnstreamer_example_object_detection_yolov5_uvc.py \
--engine armnn --cam 5 --width 640 --height 480 --performance G1200 --fullscreen 1
まとめ
今回、NNStreamer を使用した 姿勢推定、顔検出、物体検出 のサンプルを動かしてみました。
スクリプトを編集してぜひいろいろお試しください。
参考: