デバイス上で動作する物体検出可能なデーモンを作成

はじめに

このドキュメントでは、ABEJA Platform の GUI を利用して、 MXNet のモデルで物体検出を行い、 結果をログ書き出すデーモンを Jetson 上にデプロイする設定について説明します。

このガイドの流れ

このガイド内では、 Jetson に ABEJA Platform のエージェントをインストールし、 管理コンソールから物体検出のモデルを Jetson 上にデーモンとしてデプロイする流れを説明します。

モデルはサンプルとして MXNet を用いた画像内の物体検出を行うモデルを利用します。あらかじめ こちら よりモデルをダウンロードしてください。

このサンプルモデルは下記の構成になっています。 MXNet のアプリケーション上で、カメラからビデオストリームを取得し、フレームを物体検出のネットワークである SSD (Single Shot Multiple Detector) で処理した後、検出結果をログとして出力するモデルです。

$ ls -l
total 16
-rw-r--r--@  1 abeja  staff     1 12 22 19:10 README.md
drwxr-xr-x@  4 abeja  staff   128 12 25 12:04 detect
-rw-r--r--@  1 abeja  staff  3069 12 25 15:02 main.py
drwxr-xr-x@  4 abeja  staff   128 12 22 19:07 model
drwxr-xr-x@ 12 abeja  staff   384 12 25 12:04 symbol2

前提環境

  • JetsonTX2 Developer Kit が必要です
  • 外付け USB カメラが /dev/video1 にマウント済みである必要があります

Jetson の設定

L4T のインストール

NVIDIA DEVELOPER サイト に沿って、Jetson に L4T 28.2 をインストールします。 L4T 28.2JetPack 3.2 に含まれており、こちらから取得できます。

Docker のインストール

Jetson にログインします。

Universe リポジトリを追加するため、 /etc/apt/sources.list にて、以下の行のコメントを解除します。

# deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
# deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
# deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
# deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe

docker と依存パッケージをインストールします。

$ sudo apt-get update
$ sudo apt-get install ca-certificates curl -y
$ curl https://get.docker.com | bash
$ sudo usermod -aG docker nvidia
$ echo "DOCKER_OPTS=\"--storage-driver=overlay\"" | sudo tee /etc/default/docker
$ sudo systemctl restart docker
$ sudo docker ps  # make sure docker is running

デバイスの作成

管理コンソールへのログイン

管理コンソールへのログイン方法 に従って管理コンソールへのログインを行ってください。

デバイスの作成

新たにデバイスを作成します。

エッジデバイス一覧画面

デバイスの名前と説明を入力します。

エッジデバイス登録画面

作成が完了したら、証明書と公開鍵・秘密鍵をダウンロード出来るようになります。 表示された Device ID を記録し、証明書と公開鍵・秘密鍵を必ずダウンロードしてください。

エッジデバイス登録後画面

abeja-device-agent のインストールと設定

Jetson 上にて、以下を実行して abeja-device-agent をインストールします。

$ wget https://s3-ap-northeast-1.amazonaws.com/abeja-device-resources/0.9.0/abeja-device-agent.deb
$ sudo dpkg -i abeja-device-agent.deb

ダウンロードした zip ファイルを Jetson にコピーし、証明書と公開鍵・秘密鍵を /etc/abeja/keys に展開します。

$ sudo mkdir /etc/abeja
$ sudo unzip device_xxxxxxxxxxxxx_certifications.zip -d /etc/abeja/keys

次に、 /etc/default/abeja-device-agent に記述されているデバイスの設定を更新します。 設定ファイル内の DEVICE_NAME の値に管理コンソールに表示されていた Device ID を設定します。また、 DEVICE_TYPE の値に jetson_tx2 を設定します。

$ sudo vim /etc/default/abeja-device-agent
DEVICE_NAME=1234566789
DEVICE_TYPE=jetson_tx2
LOCAL_LOGGING=1

変更した設定を反映させるため、 abeja-device-agent を再起動します。

$ sudo systemctl restart abeja-device-agent.service
$ sudo systemctl status abeja-device-agent.service

サンプルのモデルの作成

モデル一覧画面を表示し、Create を選択

サイドメニューより、 Model を選択し、モデル一覧画面から Create Model を選択します。

モデル一覧画面

作成するモデルの詳細を入力

作成するモデルの詳細情報を入力します。

モデル新規追加画面

入力項目

  • Name : 作成するモデル名
  • Description : モデルの概要を入力
  • Model Version : モデルのバージョンを入力。初回なので、 0.0.1 と入力
  • Deploy after creating : チェックを on
  • Source Code
    • Upload
      • Runtime : モデルの実行環境を選択。 abeja-inc/mxnet:0.1.0-arm64v8 を選択
      • Model Handler : モデルを実行に呼び出される関数。 main:handler と入力
      • Training Definition : 学習済みモデルが存在する学習ジョブ定義。今回は、学習済みモデルがダウンロードした zip ファイルに含まれているため入力不要
      • Source Code : ダウンロードした zip ファイルを選択

上記を入力後、 Create Model を選択し、モデルの作成を行います。

Deploy after creatingon の場合、モデル作成後は、作成したモデルのデプロイメントの詳細画面へ遷移します。 デプロイメントとは、作成したモデルを特定のオーガニゼーションで動作させるためのプロジェクトに相当します。

デーモンの作成

作成されたモデルのデプロイメント詳細画面から、デーモンの追加を行います。

Create Daemon を選択

タブ Daemon 内の Create Daemon を選択

デプロイメント詳細画面

デーモンの作成

作成するデーモンの詳細情報を入力します。

入力項目

  • Model Version : モデルのバージョンを入力。先に作成した、 0.0.1 を選択
  • Device : 先に作成したデバイスを選択
  • Environments : 環境変数。今回は不要

デーモンの詳細情報の入力

作成が完了すると下記の表示になります。

デプロイメント詳細画面

動作確認

ログの確認

デーモンのログ画面では、モデルから出力されるログを確認することができます。

デバイス一覧画面

デーモンのログ画面