製品情報

他社GPUからSiMa.aiに置き換えてみた![実装編]

SiMa.ai(以降SiMa)はGPU(グラフィックス処理ユニット)を提供するα社の性能に匹敵する、エッジでのAIに強みを持ったデバイスです。そんなSiMaのMLSoC(Machine Learning System-on-Chip)を実際に使ってみたいという声も上がっています。今回は、α社のGPUで動作していたモデルをSiMaに移植し、実際に動かす方法をご紹介いたします。

全体の目次

移植の手順は以下の通りです。

Step-1:概要編

Step-2:準備編

Step-4:実装編

  • 実装編

本章「実装編」のゴール

  • SiMaの開発キットでのシステム構築がわかる

なお、今回デモ動画結果は以下です。

α社動画

SiMa動画

アプリケーションの実装

今回は、いよいよα社のGPU上で実行した人の動きを追跡して
滞在状況をヒートマップ分析するシステムをSiMaで構築していきます。

実装までの大まかな流れ

  1. YoloV7のデモを複製
    app_zooディレクトリの中にSiMaから提供されているデモ用のプログラムがいくつかあります。今回はYoloV7のデモが一番近いので、そのフォルダを複製して欲しい機能を追加していきます。
  2. CvHelpersにヒートマップ描画用メソッドを実装
    plugin_zooディレクトリの中に、SiMaから提供されているC++のGstreamerのoverlayプラグインのソースコードがあります。 CvHelpersというOpenCVを活用するヘルパークラスを利用しているため、draw_heatmapメソッドをCvHelpersクラスに追加してヒートマップの描画処理ができるようにします。
  3. overlayプラグインにheatmapオプションを追加
    SiMaのMLAが処理した結果を元にoverlayプラグインでrender-rules引数を取って任意の描画を行う仕様となっています。ここでapplication.jsonでoverlayプラグインを呼び出すときにheatmapオプションを指定するように改修します。
  4. ビルドとデプロイ
    改修したoverlayププラグインのビルドとMPKツールを使ったアプリケーションのビルド・デプロイを実施します。
  5. UDPで送られた動画をホストマシンで再生
    今回はホストマシンのIPアドレス宛に動画データをUDPの9000ポートに送信するようにしているため、それをGstreamerで受け取って再生します。

なお、上記の手順はすべて「ホストマシンの環境構築」の章で構築したDockerコンテナの中での実行を前提としています。

ヒートマップをライブラリに実装して呼び出す

YoloV7のデモを複製

app_zooディレクトリにあるYoloV7デモを複製するために、以下のコマンドを実行してください。
また、フォルダの中には固定でファイルパスの値を持つものが多数あるため、パス名の一斉置換も行います。

sima-user@docker-image-id:/home$ cd /usr/local/simaai/app_zoo/Gstreamer/ cp -r YoloV7 YoloV7_heatmap_demo
sima-user@docker-image-id:/home$ find YoloV7_heatmap_demo -type f \( -name "*.json" -o -name "*.sh" \) -exec sed -i 's/YoloV7/YoloV7_heatmap_demo/g' {} \; -print
sima-user@docker-image-id:/home$ find YoloV7_heatmap_demo -type f \( -name "*.json" -o -name "*.sh" \) -exec sed -i 's/yoloV7/yoloV7_heatmap_demo/g' {} \; -print
CvHelpersにヒートマップ描画用メソッドを実装

draw_heatmapメソッドをCvHelpersクラスに追加してヒートマップの描画処理ができるようにします。
ソースコードの修正差分は以下です。

なお、今回はNV12のみを利用するので、実際に実装をしているのは具象クラスのCvHelpersNV12クラスだけですが、CvHelpersYUV420クラスにも同様の実装を行うことでYUV420でも利用可能です。

overlayプラグインにheatmapオプションを追加

overlayプラグインの呼び出し時にheatmapオプションを指定するように改修します。
ソースコードの修正差分は以下です。
なお、application.jsonのgst内にある location=rtsp://192.168.2.10:5005/routecam といったカメラのrstpサーバー情報はお手持ちのカメラの仕様に合わせて適宜修正をしてください。

ビルドとデプロイ

プラグイン追加後のビルドのために、以下のコマンドを実行してください。
プラグインは通常のMPKツールを使ったビルド手順とは別でビルドを行う必要があります。

sima-user@docker-image-id:/home$ cd /usr/local/simaai/plugin_zoo/a65-apps/build &&
source /opt/poky/4.0.10/environment-setup-cortexa65-poky-linux &&
cmake -DCMAKE_INSTALL_PREFIX=/opt/poky/4.0.10/sysroots/cortexa65-poky-linux/usr/ .. &&
sudo make install

※DCMAKE_INSTALL_PREFIXに指定しているパスはMPKツールでビルドの際に必要なプラグインのビルド済みのsoファイルを探しに行く先と同様のため、そのパスに吐き出されるように指定しています。

※今回はまとめてビルドしていますが、対象のプラグインだけをビルドしても問題ありません。

次にデプロイのために、以下のコマンドを実行してください。

sima-user@docker-image-id:/home$ PIPELINE_PATH='/usr/local/simaai/app_zoo/Gstreamer/YoloV7_heatmap_demo' &&
mpk device connect -t sima@192.168.2.10 &&
mpk kill -i yoloV7_heatmap_demo_Pipeline &&
mpk remove -a com.sima.awesome_app -t 192.168.2.10 &&
mpk create -s $PIPELINE_PATH -d $PIPELINE_PATH &&
mpk deploy -f $PIPELINE_PATH/project.mpk -t 192.168.2.10

overlayプラグインの方はMPKツールでcreateする際に自動でビルドされるため、個別でmakeコマンドを実行してビルドする必要はありません。

ビルドやデプロイがうまくいかない場合、/var/log/simaai/ に各エラーログが出力されるので確認してみるとよいかと思います。

UDPで送られた動画をホストマシンで再生

動画データの再生のために、以下コマンドを実行してください。

sima-user@sima-user-machine:~$ gst-launch-1.0 udpsrc port=9000 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

ホストマシンで9000番ポートが許可されているか確認してください。許可されていない場合、ポートを変更するか、許可の設定をしてください。

結果、以下の動画が出力されます。

ここまでの作業を行うことでα社のGPUからSiMa.ai MLSoCへの移植が完了しました。
α社から無事に移植ができることを確認していただけたと思います。
全章を通して実際の性能などを体感いただき、今後の開発に役立てていただければ幸いです。

本章についてご質問などありましたら、以下よりお問い合わせください。

会社概要

会社名
SiMa Technologies, Inc.
設立
2018年
所在地
アメリカ(シリコンバレー)
事業
画像処理エッジAIに特化したSoCとSDKの提供
この製品に関するお問い合せ先

この製品に関するお問い合せ先

電話でのお問い合せ

第三ソリューション技術部

03-6361-8095

受付時間:平日午前9:00から午後17:00まで

メールでのお問い合せ

お問い合せフォーム