今週はラスベガスで開催されているAWS re:Inventに来ています。DeepLensのWorkshopに先程出てきたのでメモがてら貼っておきます。
概要
DeepLens自体は次の記事が詳しいです。
AWS DeepLens – Get Hands-On Experience with Deep Learning With Our New Video Camera | AWS News Blog
私はビデオもデバイスについても特に詳しいわけではないのですが、DeepLensがすごいなーと思ったのは、それ自体が今回発表されたサービスを含め、AWSのサービスを上手くつかって構築されていることです。
- SageMakerで作ったモデルを取り込む
- Greengrass Core上でlocal Lambdaを動かし、デバイスデータの送信とinferenceをする。
- eventのpubsub管理はAWS IoTで
- Greengrassに乗っているのでデプロイも簡単にできる
- ビデオデータはKinesis Video Streamでサーバ側へ送信 + バッファ可能
- inferenceの結果はAWS IoTトピックで扱えるので、任意のLambda functionのtriggerに設定可能
DeepLens自体のスペックは次のとおりです。
AWS DeepLens – Deep learning enabled video camera for developers - AWS
Workshopではこれらを一通り触りながらDeepLensにモデルをデプロイしていきました。次がWorkshopでつかったプロジェクトです。
GreengrassにDeepLensをデバイスとして関連付けすると、AWS IoT Device Gateway経由でイベントが流れてきます。例えば物体認識したイベントは次のようなデータが流れてきます。GreengrassではLambda functionをデバイスのlocalで実行できるので、ここでinferを実行するわけです。Greengrass SDKをつかったコードは次にあります。infer結果をpublishしているのがわかります。この例だとMXNetを使っています。
https://s3.amazonaws.com/deeplens-managed-resources/lambdas/hotdog-no-hotdog/new_hot_dog_lambda.zip
ちなみに今日あったアップデートでGreengrassからカメラやGPUにアクセスできるようになっています。
今日試したところ、DeepLensにはProjectを1つだけデプロイできます。ProjectというのはModelとFunctionの組み合わせでつくられるDeepLensの挙動のだと思うとわかりやすいです。
公式ページにもあるとおり、DeepLensがProgrammableというのはここで実現されています。
AWS DeepLens is easy to customize and is fully programmable using AWS Lambda. The deep learning models in DeepLens even run as part of an AWS Lambda function, providing a familiar programming environment to experiment with.
1つ1つをみるとやっていることはシンプルですが、よく考えられているなあと思ったポイントは以下のとおりです。
- Greengrass Coreの設定をしなくていい。DeepLensのconsoleからdeviceを紐付けるだけ。
- ゆえに証明書の配置とかも気にしなくていい。(出荷時点で組み込みのはず)Greengrassの設定するの若干面倒ですし・・
- ひとまずつなげばAWS IoTのpubsubにつなげるのでユーザはmodelとLambdaをどう書くかだけ考えるのに集中できる
あたりかなと。Greengrassで管理してるのでnetwork connectivityが安定しなければ再送される、あるいは他のGreeengrass Coreと連携して端末間通信する、あたりも便利そうですね。
感想
まとめ
*1:Workshop後にDeepLensももらえます