Dog Park

インスピレーション

AWS DeepLens を使用してすぐに何ができるかを知りたいと思いました。DeepLens の新しいユーザーのほとんどは、機械学習や深層学習の経験がほとんどありません。Amazon SageMaker は強力なツールですが、使いこなせるようになるまでに時間がかかります。そこで、サンプルアプリケーションを使用して何ができるのかを確認してみることを思い立ちました。さまざまなことができることがわかりました。

内容

Dog Park では、「ホットドッグかホットドッグでないか」モデルを実行し、最も一致した項目の確率を取得します。次に、最も一致した項目を調べ、それが犬かどうかを確認します。これは、1,000 カテゴリの犬種のサブセットと照合することで行われます。一致する場合、確率をチェックします。確率がしきい値 (任意で 0.5 に設定) を上回る場合、犬が見つかったと判断します。次にカテゴリ照合を実行し、犬かどうかを判断します。犬である場合、(認識の実行時に使用される小さいフレームではなく) フルサイズの画像を S3 バケットに書き込み、上位 2 つの犬種の確率と画像の URL を MQTT トピックに書き込みます。結果は、AWS IoT コンソールでモニタリングできます。DogParkNotifier という 2 つ目の Lambda 関数 (Node.js で作成) で、トピックからメッセージを受け取り、SQL ステートメントを使用して関連するフィールドを抽出します。これらのフィールドは、確率の値を切り捨てて整数になるように書式設定されており、SNS を使用してユーザーに送信されます。これらのフィールドは、SMS テキストメッセージまたは E メールとして送信できます。E メールのパスを設定するには追加のステップ (トピックを作成し、E メールを確認する) が必要です。

視覚的に最もわかりやすい結果は電話に送信される SMS テキストメッセージで、SMS テキストメッセージでは犬の写真と一緒に確率の結果が表示されます。実際に、DeepLens のカメラを犬に向けた数秒後に結果を取得できたことに感動しました。

興味深かったことは、フレームごとに確率が変化することです。犬はじっとしていません。このため、認識の確率は変化し、犬の動きによっては最大で 10% 変化しました。

人々は技術実験に快く参加してくれました。DeepLens で自分の犬がどのように判定されるのかに非常に興味を持っていました。

作成者: Dan Brennan

構築方法

まず、「ホットドッグかホットドッグでないか」サンプルアプリケーションから始めました。さまざまな犬種を認識できることがわかったため、初心者にとって優れたユースケースになると思いました。作成したコードは簡単に再利用できます。ユーザーは AWS アカウントを作成し、Lambda 関数をデプロイするリージョンと同じリージョンに S3 バケットを作成します。S3 バケットに対して IAM ロールを作成し、十分な権限を使用して IAM ロールを Lambda 関数に組み込みます。[YOUR_BUCKET_NAME] にはプレースホルダーがあります。また、DeepLens の「ホットドッグかホットドッグでないか」サンプルアプリケーションにアクセスする必要があります。

このアプリケーションのもう 1 つの部分は DogParkNotifier Lambda です。ここでは、ユーザーの電話番号または E メールアドレスを SNS 通知に使用できます。 

課題

このデモを作成するために優に 100 を超えるビルドを作成しました。4 週間で 100 時間以上の時間を費やし、習得するまでに時間がかかりました。DeepLens での Python Lambda コードのデバッグに慣れるまで時間がかかりました。DeepLens デバイスはすぐに登録されました。手順の説明は良かったです。同時に、DogParkNotifier を作成するために Node.js についても学習しました。当然、オペレーティングシステムの自動アップグレード問題が発生し、それが原因で Wi-Fi が機能しなくなりましたが、DeepLens AWS チームが回避策をすぐに提供してくれました。

課題の 1 つは、屋外で使用するときに DeepLens の電源供給をどうするかということでした。電話を充電するときに使用する DC バッテリーパックを試してみました。ところが出力電流は 3.2 A で、DeepLens には 4.0 A が必要です。システムによって出力を増やそうとしましたが、数秒後に失敗しました。出力が 4.8 A の DC バッテリーパックも市販されていることがわかりましたが、DeepLens が壊れるといけないと思い、確実な AC 電源を使用することにしました。AC 電源では大量のエネルギーを蓄えることができるため、DeepLens を 10 時間以上連続して動作させることができます。マイナス面はややかさばることです。費用は、DC バッテリーパックの購入費用よりも少し高く、79 USD でした。

数百件のメッセージを受信した後、契約している携帯電話事業者 (Verizon) によって Dog Park からの受信テキストメッセージがブロックされました。この値はリセットできませんでした。また、この制限に関して Verizon が提供しているドキュメントもありません。AWS 側でメッセージの送信を試しましたが、通信事業者からまったくメッセージを送信できなかったことが報告されました。回避策は、E メールでメッセージを送信することでした。

テストの量に影響する天気の問題も発生しました。ニュージャージーでは大寒波が発生し、犬を連れて歩いている人がいませんでした。その後、数日間雨が降り続き、コンテストの終了まであと数日しかありませんでした。それでもドッグランに 2 回行くことができ、実験の結果は驚くほど正確でした。

もう 1 つの問題はインターネットの接続でした。DeepLens では、画像を S3 に送信し、MQTT トピックに書き込むためにインターネット接続が必要です。自分の電話をホットスポットとテキストメッセージの受信の両方に使用しました。その際に、ホットスポット接続は、需要がない場合は終了することがわかりました。また、DeepLens からは再接続しようとしません。解決策として次の 2 つの方法を使用しました。まず、iPad を持って行き、ホットスポットを使用するように設定しました。どういう訳か、電話が動作している間、iPad ではホットスポットへの接続が維持されたため、DeepLens をインターネットに接続したままの状態にできました。次に、DeepLens の Ubuntu システムから代替のワイヤレス接続を削除しました。私は、開発用に 1 つ、リモートで使用するためのホットスポット用に 1 つ、高速ワイヤレス接続を使用していました。ホットスポットでは、到達不能になると、高速 Wi-Fi ネットワークに再接続しようとします。これは、当然、ドッグランでは利用できません。そこから動かず、ホットスポットに戻ることはありません。このため、ドッグランに出かける前にリストにある他のすべての Wi-Fi 接続を削除する必要がありました。

不思議な問題も経験し、Lambda 関数によって DeepLens にデプロイするのですが、カメラのライトが点灯しませんでした。デバイスの Python ログファイルを見てもエラーはありませんでした。AWS チームは (#officehours の 1 つで)、

DeepLens システムで「aws_cam@Deepcam:~$ git clone https://github.com/boto/boto3.git aws_cam@Deepcam:~$ cd boto3 aws_cam@Deepcam:~$ sudo cp -r boto3 /usr/local/lib/python2.7/dist-packages aws_cam@Deepcam:~$ sudo pip install awscli –force-reinstall –upgrade」と入力するよう教えてくれました。

これがうまくいきました。AWS CLI の再インストールが原因でした。

成果

うまくいったことに満足しています。Lambda、DeepLens、Python、IAM、トピックや、プロジェクトの成功を妨げる多数の問題について多くを学びました。このプロジェクトにかかるのは 10 時間ぐらいだと考えていましたが、実際には 100 時間かかりました。ほとんど毎晩、午前 1 時過ぎまで起きていました。
プロジェクトを完成できたことを誇りに思います。ホットドッグのサンプルを利用しそれを拡張して、面白いもの、屋外でできる何かを作りました。深層学習を利用し、人々の興味をそそるものにしました。人から、どのような仕組みになっているのか聞かれます。

学んだこと

自分は、プロジェクトにかかる時間を適切に見積もることができない人間だということがわかりました。 AWS のサービスについて多くを学びました。すべてをまとめることの実用的な側面を学びました。慣れると作業を速くすることができるようになりました。Lambda 関数をデプロイしたときに関数がどこに行くのか不思議に思わなくなりました。DeepLens で Python のログメッセージを確認できる場所がわかりました。

Dog Park の次のステップ

Dog Park では小型の DC バッテリーパックを使用する必要があります。しきい値を Apple iOS アプリケーションからプログラム可能にし、現場で調整できるようにする必要があります。セキュリティを強化する必要があります。テスト中は無防備にしすぎました。
他にもバードフィーダーで鳥を認識するというアイデアがありますが、モデルの微調整を行い、さまざまな鳥の写真を使用してトレーニングを行う必要があります。もちろん、Amazon SageMaker がそれを実現するための鍵となります。

使用したもの

Lambda
DeepLens
Python
Node.js
S3
Amazon SNS

今すぐ試す