AWS DeepLensのサンプルプロジェクトを使って物体検出を実行する

半年の時を経て降臨。CameraはBottleじゃない。
2020.01.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部の貞松です。

昨年の7月に注文したAWS DeepLens(第2世代)が、半年の時を経てようやく届いたので早速検証しています。

本記事では、一連の動作確認を兼ねて、予め用意された幾つかのサンプルプロジェクトの中から物体検出のプロジェクトをデプロイ、実行してみます。

DeepLensとは

AWS DeepLens (深層学習に対応したビデオカメラ) - AWS

AWS DeepLensは一言で言うと「深層学習に対応したビデオカメラ」です。
DeepRacerやDeepComposerと同様に、機械学習を学ぶ為の新しいプラットフォームとしてAWSから提供されており、高い処理能力と幅広い開発ツールのサポート(一般的な機械学習フレームワークのサポートやAWSのAI・機械学習系サービスとの統合)によって、コンピュータビジョンプロジェクトを体験・開発することができます。

DeepLensのハードウェアに関する技術仕様は以下の通りです。

  • CPU : Intel Atom® プロセッサ
  • メモリ : 8GB RAM
  • OS : Ubuntu OS-16.04 LTS
  • 内蔵ストレージ : 16GB メモリ (拡張可能)
  • グラフィックス : Intel Gen9 グラフィックエンジン
  • サポート : インテル® Movidius™ Neural Compute Stick およびインテル® RealSense™ 深度センサー

DeepLensの外観。手のひらサイズと言うにはちょっと大きいですね。

DeepLens用のサンプルプロジェクト

DeepLens用のサンプルプロジェクトとして以下の8つが用意されており、これらをデバイスにデプロイすることで簡単にDeepLensの機能を試すことができます。

プロジェクト名 概要
物体検出 20個の一般的なオブジェクトを検出します。
画風変換 周囲の風景をゴッホの絵画のように変換します。
ホットドッグ認識 食べ物がホットドッグかそうでないかを分類します。
猫/犬認識 猫または犬を探して認識します。
鳥の分類 200種を超える鳥を検知します。
行動認識 歯を磨く、口紅を塗る、ギターを弾くなど、30種類を超える動作を認識します。
顔認識 人の顔を検出します。
頭部姿勢の検出 9つの異なる角度の頭部姿勢を検出します。

今回は「物体検出」のプロジェクトをデバイスにデプロイして実行します。

物体検出のサンプルプロジェクトを実行する

サンプルプロジェクトは以下の手順で実行します。

  1. デバイスの登録
  2. プロジェクトの作成
  3. プロジェクトをデバイスにデプロイ
  4. デプロイされたプロジェクト(モデル)の動作を確認する

1. デバイスの登録

まずはデバイスをDeepLensのコンソールで登録する必要があります。
一度登録してしまえば、次回以降は「2. プロジェクトの作成」から進めることができます。

DeepLensのコンソール画面のトップページから「デバイスの登録」をクリックします。

ハードウェアバージョンを選択する画面が表示されます。
今回使用したデバイス(第2世代のDeepLens)の底面を確認すると「HW 1.1」と表記されていたので、「HW v1.1」の方を選択して次に進みます。

デバイスをコンピュータに接続する画面が表示されます。
画面の表示に従って、DeepLensに同梱のUSBケーブルでデバイスと作業中のPCを接続します。
画面に表示されている通り、デバイス登録用のUSBポートは下のポートなので挿し間違えないように注意しましょう。

シリアル番号の入力画面が表示されるので、またもやデバイスの底面を確認してシリアル番号を入力します。

デバイスのネットワーク接続を設定する画面が表示されます。
利用可能な無線ネットワークを選択して接続します。

最後に登録デバイスに名前を付けつつ、DeepLensの実行に必要なIAMロールを自動的に作成することを許可します。
デバイス名は登録デバイスの一覧に表示される名前なので、識別しやすい名前であれば何でも良いです。

これでようやくデバイスの登録が完了します。
デバイスの登録が完了したらデバイスとPCを接続しているUSBケーブルは外して大丈夫です。
以降はデバイス登録時に設定したネットワーク経由でデプロイや映像の確認を行います。

2. プロジェクトの作成

次にデバイスで実行するプロジェクトの作成を行います。
「個のプロジェクト画面」で「新しいプロジェクトの作成」をクリックします。

プロジェクト作成の画面が表示されます。 今回はサンプルプロジェクトを実行するので、プロジェクトタイプは「プロジェクトテンプレートを使用する」を選択します。
そして、プロジェクトテンプレートから「物体検出」を選択して次に進みます。

プロジェクト名とプロジェクトの概要を入力する画面が表示されます。
今回はサンプルプロジェクトを使用するので、デフォルトで入力されている内容そのままでプロジェクトの作成を実行します。

3. プロジェクトをデバイスにデプロイ

プロジェクトの作成が正常に完了すると、「個のプロジェクト」一覧に作成したプロジェクトが表示されるので、それを選択します。

選択したプロジェクトの詳細画面が表示されるので、右上の「デバイスへのデプロイ」をクリックします。

ターゲットデバイスの一覧から、登録済みのデバイスを選択して、右下の「確認」をクリックします。

デプロイ前の最終確認画面が表示されます。
問題なければ右下の「デプロイ」をクリックしてデプロイを実行します。

プロジェクトのデプロイが正常に完了しました。

4. デプロイされたプロジェクト(モデル)の動作を確認する

デプロイされたプロジェクトの動作を確認する方法として、以下で2種類の方法をご紹介します。

4.1. AWS IoTコンソールでプロジェクトからの出力を確認

1つ目は、AWS IoTコンソールでデバイス固有のトピックをサブスクライブする方法です。
デバイスの詳細ページある「プロジェクト出力」のセクションから、デバイス固有のトピックをコピーして、IoTコンソールの画面を開きます。

上図のリンクからIoTコンソールを開くとテスト用のMQTTクライアントの画面が表示されます。
ここで上述でコピーしたトピックを貼り付けて「トピックへのサブスクライブ」をクリックします。

デバイス固有のトピックがサブスクライブされ、プロジェクトの出力がリアルタイムに表示されます。
「person」や「tvmonitor」など、物体を検出した結果が流れ込んできているのが確認できます。

4.2. ビデオストリーミングでカメラの映像を確認

2つ目はビデオストリーミングでカメラの映像を確認する方法です。
この方法では、まずデバイスの詳細画面の「ビデオストリーミング」セクションにある「デバイスの設定」を開いてストリーミング証明書を作業中のPCにインストールする必要があります。

デバイスのビデオストリーミング設定画面で、まずは使用するブラウザに合わせてストリーミング証明書をダウンロードします。
あとは表示されている手順に従ってダウンロードした証明書を登録します。

ストリーミング証明書がインストールできたら、デバイスの詳細画面の「ビデオストリーミング」セクションにある「ビデオストリームの表示」をクリックします。

ビデオストリームの画面が表示されます。
「Project stream」のタブで、実際にカメラからの入力画像に対して、物体検出を実行した結果がリアルタイムに表示されます。
下の画面キャプチャでは、撮り方やらタイミングが悪かったのか、カメラを「bottle」と認識していたり、メガネをそもそも物体として検出してなかったりしていますが、絶えず物体検出を連続的に実行しつつ結果を画面に返してきているので、撮る方向であったり、タイミングによってうまく認識していたりしていなかったりという様子でした。

※ 2019.01.30 更新
そもそも「物体検出」のサンプルプロジェクトで検出できる対象が、以下の通りであり、そもそもカメラやメガネは対象外でした。
よって、このケースではボトルだけが検出されるのが正しい動作です。大変失礼致しました。

AWSドキュメント - AWS DeepLens開発者ガイド - AWS DeepLens サンプルプロジェクトの概要

(上記リンクのページから抜粋)
このモデルが認識できるオブジェクトは、飛行機、自転車、鳥、ボート、ビン、バス、車、猫、椅子、牛、食卓、犬、馬、バイク、人、鉢植え、ヒツジ、ソファー、電車、およびTVモニターです。

まとめ

DeepLensのデバイス登録から、サンプルプロジェクトの実行までを実際に試してみました。
他のサンプルプロジェクトや独自の学習モデルを用いたプロジェクトなども引き続き検証していきます。