やってみたシリーズ、AWS Deep Lensを利用した顔認識の精度はいかに?

はじめに

富士ソフト社内で2021年度の優秀社員賞を受賞しました。その賞金で好きな物を買っていいよ(意訳)と会社からお達しが来たので、興味本位でAWS Deep Lensを買ってしまいました。

せっかくなので、日頃の業務で利用しているAWSクラウド上にあるモデリングを使って、私の顔がどのくらいの精度で読み取れるのか、認識されるのかを確認してみたいと思います。
では、やってみましょう!レッツゴー!

梱包物

まずはAWS Deep Lensを購入すると何がついてくるのかご紹介します。 AWS Deep Lensを購入した際に箱に入っていたのは以下の物です。

  • AWS Deep Lens 本体(スペック)
カメラ1080P, 4MP
CPUIntel Atom® プロセッサ
OSUbuntu 16.04.4 LTS
Memory8GB
電源5 VDC – 6.0 A
Wi-Fi2.4/5Ghz MIMO 802.11 a/b/g/n
SSID/パスワード本体底面に記載
ハードウェアバージョン本体底面に記載(HW v1.1)
  • 専用AC電源アダプター
  • 専用アダプター専用の電源コード
  • マイクロSDカード
  • USB接続コード

本体

●やってみた環境、日頃の業務で利用しているAWSクラウドの環境は以下の通りです。
【利用PC】
Windows 10 Enterprise
【AWS DeepLens Device】
HW v1.1
【AWSサービス】
AWS DeepLens
AWS IoT Greengrass
AWS Lambda
AWS IoT
Amazon CloudWatch Logs
Amazon S3

セットアップ偏

AWS DeepLensは開封したままでは利用できません。AWS社のマニュアルを参考にして、セットアップします。セットアップ後、AWSクラウドとAWS DeepLensを接続することによってモデリングができるようになります。

AWS DeepLensの使用開始
https://docs.aws.amazon.com/ja_jp/deeplens/latest/dg/deeplens-getting-started.html

AWS Deep Lensデバイスの登録

まずはAWS Deep Lensデバイスの登録を行います。

AWS DeepLens デバイスの登録
https://docs.aws.amazon.com/ja_jp/deeplens/latest/dg/deeplens-getting-started-register.html

  1. 自分のAWSアカウントにサインインして、AWS Deep Lensのコンソールから[デバイスの登録]をクリックして登録を開始します。
  2. 「ハードウェアバージョンの選択」画面が表示されますので、[HW v1.1]を選択して[開始]をクリックします。
  3. 「ハードウェアバージョンの選択」画面が表示されますので、[HW v1.1]を選択して[開始]をクリックします。
  4. デバイスが正常に検出されると、[次へ]が有効になってクリックできるはずです。しかし、私のPCでは、AWS DeepLensデバイスの検出ができませんでした。

    PCのデバイスマネージャーからAWS DeepLensデバイスの確認をしたところ、「このデバイスのドライバーがインストールされていません。(コード28)」が表示されました。オンラインで検索してみましたが利用可能なドライバーが見つからなかったため、仕方なく、AWS DeepLensのコンソールからトラブルシューティングの[情報]をクリックし、[v1.0のプロセスを利用して登録]を試みることにしました。
  5. 表示されている「AWS DeepLensソフトウェアを更新」画面の手順に従い、AWS DeepLensデバイスのリセットボタンを押します。
  6. デバイスのリセットピンホールはとても小さいので、今回は針を使いました。

  7. 「AWS DeepLens v1.0デバイスを登録する」プロセスのステップ1ではAWSアカウントの設定を行います。デバイス名を設定し、AWS DeepLensデバイスで利用するIAMロールのセットアップを行い、AWSクラウドとAWS DeepLensをセキュアに接続するための証明書の発行を行います。
  8. ステップ2のプロセスでは、「デバイスに接続する」画面に表示された手順に従って、PCをAWS DeepLens Wi-Fiネットワークと接続します。
  9. [次へ]をクリックするとステップ3の「Configure your AWS DeepLens」(デバイスの設定)ページへリダイレクトされ、この画面で「Connect your device to your home or office network」(AWS DeepLensがインターネットと通信する為のネットワークの設定)、「Upload security certificate to associate your AWS DeepLens to your AWS account」(AWSクラウドと通信する為の証明書の設定)、「Set a password to control how you access the device」(デバイスのパスワードの設定)を行います。
  10. デバイスのパスワードの設定で「SSH Server」を[Enable]にしておくことで、PCからAWS DeepLensデバイスへのSSH接続ができるようになります。
    基本的にAWS DeepLensのログはAmazon CloudWatch Logsにリアルタイムで出力されますが、トラブル等の際にデバイスにログインするためにこの設定をEnableにしておくのも有効かと思います。私は、今回が初めてのAWS DeepLensの検証だったため、デバイスの確認のためにSSH Serverの設定をEnableにしました。しかし、万が一、SSH用に設定したパスワードを失念した場合、パスワードの再発行の手続きが煩雑らしいので、心配な場合はお勧めしません。

  11. [Finish]をクリックしたら登録完了です。登録が完了するとデバイスステータスが"登録済み"と表示されます。

AWS Deep Lensデバイスの更新

デバイスの登録でSSH Serverを[Enable]に設定すると、デバイスに対してSSHクライアントからSSH接続が可能になります。
AWS社の「AWS DeepLens デバイスの更新」の手順に従って、デバイスをアップデートします。

AWS DeepLens デバイスの更新
https://docs.aws.amazon.com/ja_jp/deeplens/latest/dg/deeplens-manual-updates.html

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install awscam
$ sudo reboot

ブラウザ上でAWS DeepLensデバイスからのビデオストリームを表示するための設定

Webブラウザを利用してAWS DeepLensデバイスからのビデオストリームを表示する方法を説明します。私はGoogle Chromeを使用しているのでChromeでの方法です。AWS社の「ブラウザでの AWS DeepLens デバイスからのビデオストリームの表示」を参考にして設定します。

ブラウザでの AWS DeepLens デバイスからのビデオストリームの表示
https://docs.aws.amazon.com/ja_jp/deeplens/latest/dg/deeplens-viewing-device-output-in-browser.html

  1. PCからデバイスにSSHクライアントで接続し、ストリーミング証明書をダウンロードします。
  2. root@AWSDeepLens:~# ls -l /opt/awscam/awsmedia/certs/client.pfx
    -rwxrwxr-- 1 aws_media_server aws_media_server 2413 Jun 10 2019 /opt/awscam/awsmedia/certs/client.pfx
    root@AWSDeepLens:~# sudo cp /opt/awscam/awsmedia/certs/client.pfx /home/aws_cam/my_streaming_cert.pfx
    root@AWSDeepLens:~# exit
    logout
    aws_cam@AWSDeepLens:~$ ls -l
    total 16
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Desktop
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Documents
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Downloads
    -rw-r--r-- 1 aws_cam aws_cam 8980 Apr 23 2019 examples.desktop
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Music
    -rwxr-xr-- 1 root root 2413 Apr 29 07:41 my_streaming_cert.pfx
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Pictures
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Public
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Templates
    drwxr-xr-x 1 aws_cam aws_cam 0 Apr 23 2019 Videos
  3. ストリーミング証明書をブラウザにインポートします。
  4. 証明書をインポートしたブラウザで "https://DeepLensデバイスのIPアドレス:4000" にアクセスします。
  5. 設定が正しければAWS DeepLensが稼働し、デバイスで撮影している画像がLive streamに配信されます!

サンプルプロジェクトのデプロイ

AWSではAWS DeepLensを利用して、既にトレーニング済のモデルでプロジェクトを作成できます。(AWS社の「AWS DeepLens サンプルプロジェクトの概要」参考)

今回はその中で、顔の認識と検出を実施してみます。

AWS DeepLens サンプルプロジェクトの概要
https://docs.aws.amazon.com/ja_jp/deeplens/latest/dg/deeplens-templated-projects-overview.html

プロジェクトの作成とデプロイ

  1. AWS DeepLensのコンソールで「個のプロジェクト」を選択し、[新しいプロジェクトの作成]をクリックします。
  2. 今回は既存のテンプレートを利用して顔認証の新しいプロジェクトを立ち上げるので、「プロジェクト選択」画面では、プロジェクトタイプは[プロジェクトテンプレートを使用する]、テンプレートタイプは[顔検知]を選択します。
  3. 「プロジェクトの詳細を指定する」画面では、プロジェクト名、説明を記載し、[作成する]をクリックします。
    このプロジェクトを作成し、AWS DeepLensデバイスにデプロイされると、AWS DeepLensからのビデオストリームを取り込み、顔を検知し、プロジェクトストリームに配信します。
  4. 作成が完了すると、「プロジェクト(プロジェクト名)が正常に作成されました」と表示され、プロジェクトが作成されていることが確認できます。

  5. 作成したプロジェクトを開き、[デバイスへのデプロイ]をクリックします。
  6. 「ターゲットデバイス」画面でデプロイ対象のデバイスを選択し、[確認]をクリックします。
  7. 「確認とデプロイ」画面が表示されるので、[デプロイ]をクリックします。
  8. デプロイ中は以下のような画面が表示されます。「デバイスステータス」が"デプロイメント進行中"であることが確認できますね。

    AWS DeepLensデバイスへのデプロイが完了すると、青色の通知から緑色の通知へ変わり、「デバイスステータス」が"オンライン"になります。

  9. 動作確認をします。
  10. トピックをサブスクライブしてみましょう。トピックをサブスクライブすることによって、AWS DeepLensデバイスからリアルタイムで検出され、送られてきたログを確認できるようになります。
    AWS DeepLensのデバイスコンソール「プロジェクト出力」の「1.登録されたデバイスに固有のトピックをコピーします。」でトピックをコピーしてAWS IoTコンソールに移動します。

    AWS IoTコンソール「MQTTテストクライアント」の「トピックをサブスクライブする」タグでトピックを張り付けて「サブスクライブ」を実行します。

    サブスクライブしたトピックが「サブスクリプション」に表示され、"face"として検知されている様子が分かりますね。このトピックはリアルタイムで絶えず流れてきます。

    ビデオストリームのProject Stream側でも以下のように顔が検出されているのが分かります。 カメラから距離を置くと顔の検知率が下がります。また、動いているものに対しては認識率が低いようです。ポイントは静止距離ですね。

    カメラに近づくほど、顔の検知率が上がるのが分かります。(47.14% ⇒ 99.12%)

    ちなみにセットアップ偏ではLive streamで配信されましたが、今回のように自分でプロジェクト(モデル)を作成してデプロイしたものを利用する場合はProject Stream側で実行されます。
    Live streamはあくまでも、AWS DeepLensが見たものをそのまま配信しているのであって、デプロイしたモデリングでフィルタをかけた映像を見たい場合はProject Streamで確認することになります。

まとめ

今回は構築済のモデル(テンプレート)を利用して顔認識を行いましたが、正直ここまで高い精度で検出されるとは思いませんでした。

ポイントにも書きましたが、動いているものに対しての検出率はやはり低い(概ね50%以下)です。認識率を上げるには、検知する物体を静止させることと、検出する側のカメラ等のデバイスから物体までの距離が近いほうが検知率が上がることが、この検証を通して分かりました。また、顔認識の精度を上げることで、例えば社員証代わりに顔認識で承認するといった運用もできそうな気がします。また、温度センサー等をつなげて、例えばコロナ禍での温度検出などにも利用できそうですね。

AWS DeepLensはかなり応用が利きそうだと感じました。もっといろいろ検証してみたいと思います。


安斎 寛之安斎 寛之(Hiroyuki Anzai)

ソリューション事業本部
インフラ事業部 クラウドソリューション部
第1技術グループ
リーダー / シニアマスター

この記事を読んだ人はこちらの記事も読んでいます。