VxWorksでTensorFlow Liteを試す‐その2
前回のおさらい
前回は組み込みデバイス上での推論を可能にするオープンソースのディープ ラーニング フレームワークであるTensorFlow Lite をVxWorks 7 21.07 + イノテック社製VX-6020ボード上で動作させ、その使用感などをレポートさせていただきました。
現状GPU対応がなくCPUのみで判定を行っていたため、Bay Trail E3800シリーズではTensorFlow Liteでの判定にはやはりパワー不足は否めませんでした。
詳細は下記記事を再読ください。
デモの構成
今回は前回のイノテック社製VX-6020ボードの後継機であるAX-1020ボードを使用してデモを構築しております。
Bay Trail E3800 → Elkhart Lake x6000E となることで、どの程度判定に掛かる時間が変わるか気になるところです。
前回と同様、ボード以外に必要な機材は起動用のUSBと画像を撮るためのUSBカメラです。
デモの準備
-
「VxWorks Source Build」の設定&ビルド
「VxWorks Source Build」プロジェクトを作成し、「TENSORFLOW_LITE」「TENSORFLOW_LITE_EXAMPLE」を追加します。
TensorFlow Liteそのものは上記で使用できますが、デモに必要な機能「OPENCV」「FBDEV」「ITLI915」を追加してビルドします。
-
「VxWorks Image Project」の設定&ビルド
前述の「VxWorks Source Build」を指定して「VxWorks Image Project」のプロジェクトを作成し、以下のコンポーネントを追加、設定してビルドを行います。
※ComponentINCLUDE_EHCI_INITINCLUDE_USB_GEN2_VIDEO_INITINCLUDE_USB_GEN2_STORAGE_INITINCLUDE_DOSFSINCLUDE_TENSORFLOW_LITE_SUPPORTINCLUDE_FBDEV_INITINCLUDE_FBDEV_ITLGMC_0INCLUDE_RAM_DISKINCLUDE_RAM_DISK_FORMAT_DOSFSDRV_PCI_SDHC_CTRLDRV_TIMER_MC146818※ParameterCONSOLE_NAME “/ttyS0”
CONSOLE_BAUD_RATE (115200)
FILESYSTEM_SYMLINK_CONFIG_STR “<def>=/bd0a/deploy;/bin=<def>/bin;/usr=<def>/usr;/etc=<def>/etc;/lib=<def>/lib;”
ITLGMC_FBDEV_DISPLAY_0 “DP”
USB_MEM_PART_SIZE 0x2000000
RAM_DISK_SIZE 0x400000
前述の「VxWorks Source Build」を指定して「Real Time Process」のプロジェクトを作成し、プロパティに「opencv」「tbb」「gfxJpeg」ライブラリを追加してアプリケーションを作成します。
今回作成するモデルやラベルは以下のTensorFlow Liteのsampleで使用されているものを流用して物体認識を行います。
- Model : mobilenet_v1_1.0_224.tflite
-
Labels : mobilenet_v1_1.0_224/labels.txt
アプリケーションは以下の2つを作成します。
- tflitedemo … USBカメラから映像を取得し、ディスプレイへ投影。「shutter」が実行されるとその時の映像を用いて物体認識を行う
- shutter … 「tflitedemo」へシグナルを送信し、物体認識を行わせる
アプリケーションの起動
TensorFlow LiteのデモはRTPで実行する必要があるためLinuxライクな「cmd」シェルからの実行が便利です。
「cmd」コマンドでシェルを移行し、「tflitedemo &」コマンドを使い、TensorFlow LiteとUSBカメラ、ディスプレイの初期化をバックグラウンドで実行します。
Target Name: vxTarget _________ _________ \........\ /......../ \........\ /......../ \........\ /......../ \........\ /......../ \........\ \......./ \........\ \...../ VxWorks SMP 64-bit \........\ \.../ \........\ \./ Release version: 21.07 \........\ - Build date: Jun 14 2022 11:46:25 \........\ \......./ Copyright Wind River Systems, Inc. \...../ - 1984-2022 \.../ /.\ \./ /...\ - ------- Board: x86_64 Processor (ACPI_BOOT_OP) SMP/SMT CPU Count: 4 OS Memory Size: ~7577MB ED&R Policy Mode: Deployed Adding 11854 symbols for standalone. -> cmd [vxWorks *]# tflitedemo & Launching process 'tflitedemo' ... Process 'tflitedemo' (process Id = 0xffff800000656b00) launched. Attachment number for process 'tflitedemo' is %1.
「shutter」コマンドを使って、その際に映像を入力画像として物体認識をさせます。下記のログは以下の画像が映っている時の解析結果です。
ログを見ると550msの時間を掛けて、48.97%の確率でPC用マウスとして認識しています。
[vxWorks *]# shutter Launching process 'shutter' ... Process 'shutter' (process Id = 0xffff80000078c070) launched. Shutter pressed ! [vxWorks *]# INFO: Loaded model /usr/share/mobilenet_v1_1.0_224.tflite INFO: resolved reporter INFO: invoked INFO: average time: 550 ms INFO: 0.48978: 674:mouse, computer mouse INFO: 0.115095: 837:sunglass INFO: 0.081512: 623:lens cap, lens cover INFO: 0.0648948: 519:crash helmet INFO: 0.0346326: 675:mousetrap
まとめ
今回はBay Trail E3800/Elkhart Lake x6000Eのパフォーマンス測定という形になりましたが同じATOMであっても、その性能差が大きく見えました。
TensorFlow Liteでの判定を1600ms→550msと1/3近くの時間で行うことができております。
VX-6020 | AX-1020 | |
実行速度 | 1600ms | 550ms |
リアルタイム処理で使用するにはGPUの対応などHW的な支援が必要になるとは思いますが、この速度で判定ができるのであれば用途次第では実用も可能なのではないでしょうか。
注
※ Wind RiverおよびVxWorksは、Wind River Systemsの登録商標です。
※ TensorFlow、TensorFlowロゴ、その他関連するマークはGoogle Inc.の商標又は登録商標です。