コラム

Column

ご挨拶

VxWorksでTensorFlow Liteを試す

Wind River コラム

TensorFlow Liteとは

TensorFlow Lite は、組み込みデバイス上での推論を可能にするオープンソースのディープ ラーニング フレームワークになります。モバイルデバイスをはじめ、スマートデバイスなどで動作しており、自然言語処理や画像認識、音声認識など多岐の分野で使用されております。ただ現状では学習そのものはTensorFlowで行う必要があり、あくまで推論エンジンとしての立ち位置となります。

組込み製品で使う場合のハードル

対応デバイスがモバイルデバイス、組み込みLinux及びいくつかのマイクロコントローラになっており、それ以外の環境には移植が必要となります。そして、そのビルドにはC++11の対応が必要となるため、古いC言語の規格にしか対応していないコンパイラでは移植が困難になります。

VxWorks 7 21.07でサポート

VxWorks 7 21.07バージョンではReal Time Process(以下RTP)用にC++11に対応したコンパイラをサポートされている為、TensorFlow Liteをはじめとする多数のオープンソースのミドルウェアをサポートする事が可能となりました。

このことは移植の手間やサポートからユーザーが解放されたことを意味し、ユーザーは本来行うべきアプリケーションの作成に専念することができます。新しく対応されたミドルウェアに関する詳しい情報はVxWorks 7の情報をご覧ください。

デモの構成

VX-6020
以下デモ構成の概略です。今回はイノテック社製VX-6020ボードを使用してデモを構築しております。

他に必要なのは起動用のSDカード(※)と画像を撮るためのUSBカメラです。

必須ではないですがディスプレイがあれば画像を見ながら物体認識を実行できます。

※VX-6020ではSDカードからの起動は非推奨となります。製品開発時には信頼性のあるSSDなどをご使用ください。

デモの準備

  • 「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」のプロジェクトを作成し、以下のコンポーネントを追加、設定してビルドを行います。

※Component
INCLUDE_EHCI_INIT
INCLUDE_USB_GEN2_VIDEO_INIT
INCLUDE_DOSFS
INCLUDE_TENSORFLOW_LITE_SUPPORT
INCLUDE_FBDEV_INIT
INCLUDE_FBDEV_ITLGMC_0
INCLUDE_RAM_DISK
INCLUDE_RAM_DISK_FORMAT_DOSFS
DRV_PCI_SDHC_CTRL
※Parameter
CONSOLE_NAME “/ttyS2”
CONSOLE_BAUD_RATE (115200)
FILESYSTEM_SYMLINK_CONFIG_STR “<def>=/sd0a/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

  • 「Real Time Process」アプリケーションの設定&ビルド

前述の「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つを作成します。

  1. tflitedemo     …   USBカメラから映像を取得し、ディスプレイへ投影。「shutter」が実行されるとその時の映像を用いて物体認識を行う
  2. 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: Oct 28 2021 18:32:37
          \........\
           \......./         Copyright Wind River Systems, Inc.
            \...../   -                 1984-2021
             \.../   /.\
              \./   /...\
               -   -------

                   Board: x86_64 Processor (ACPI_BOOT_OP) SMP/SMT
               CPU Count: 2
          OS Memory Size: ~3926MB
        ED&R Policy Mode: Deployed
     Debug Agent: Not started
         Stop Mode Agent: Not started

Loading symbol table from /host.host/vxWorks.sym ...done

-> cmd
[vxWorks *]# tflitedemo &
Launching process 'tflitedemo' ...
Process 'tflitedemo' (process Id = 0xffff800000778040) launched.
Attachment number for process 'tflitedemo' is %1.
Error opening /dev/fb2.
Open device:/dev/fb0 instead
Screen information.
   Width:  1920
   Height:  1080
   Stride:  7680
   Channels:  4
   Buffers:  3
   Pixel format = 0x2

「shutter」コマンドを使って、その際に映像を入力画像として物体認識をさせます。下記のログは以下の画像が映っている時の解析結果です。ログを見ると1600msの時間を掛けて、69.24%の確率で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: 1600 ms
INFO: 0.692461: 674 674:mouse, computer mouse
INFO: 0.0673922: 883 883:vacuum, vacuum cleaner
INFO: 0.0536963: 675 675:mousetrap
INFO: 0.027106: 623 623:lens cap, lens cover
INFO: 0.0128276: 519 519:crash helmet

 

まとめ

VxWorks上のTensorFlow Liteで機械学習したモデルを推論エンジンとして動かすことにより、属人的であった経験と解析からなる判定アルゴリズムだけではなく、機械学習をベースとした判定は今までとは異なるアプローチでの判定を可能とする為、より精度を増した判定が可能になるはずです。また機械学習の分野は急速な発展をしている為、そのモデルによる判定の精度の向上も見込めるでしょう。

次回以降の予定

現在のVxWorks 7 21.07ではGPUのサポートは無い為、次回はCPUによる推論エンジンのパフォーマンスへの影響を調べてみたいと思います。ソフトウェアをそのままに、数種類のターゲットでそのパフォーマンスを測定する予定です。

※ Wind RiverおよびVxWorksは、Wind River Systemsの登録商標です。

※ TensorFlow、TensorFlowロゴ、その他関連するマークはGoogle Inc.の登録商標です。

 

    お問い合わせは​こちら

    メールマガジンの登録はこちら

     
    ※ご登録いただきましたメールアドレスは弊社の掲げる個人情報保護方針に沿って管理し、
     お客様の同意なく第三者に開示・提供することはございません。
     詳細につきましては、当サイトの「個人情報保護方針」をご参照ください。

      製品リストはこちら

      メールマガジン

      ご登録いただきましたメールアドレスは弊社の掲げる個人情報保護方針に沿って管理し、お客様の同意なく第三者に開示・提供することはございません。 詳細につきましては、当サイトの「個人情報保護方針」をご参照ください。

      CONTACT

      まずはお気軽に
      お問い合わせください!

      PAGE TOP