DeepLensはAWSの新サービスてんこ盛りデバイスだった
今週はラスベガスで開催されている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と連携して端末間通信する、あたりも便利そうですね。
感想
お、これは早速実物だ #reinvent #deeplens pic.twitter.com/lwbFhAfQ8x
— suzuken@re:Invent (@suzu_v) 2017年11月29日
あーこれgreengrassd動いてるのかな。まだ触らないでね!っていわれてる
— suzuken@re:Invent (@suzu_v) 2017年11月29日
ということでDeeplens Workshop始まった。デバイスのチームとMLのチームがコラボして開発されたとのこと。開発者が簡単にMLを扱えることを目指して開発しているとのこと。Video CameraではなくてDL enabled developer kitだと。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Workshopではすでにサンプルプロジェクトが用意されている。物体認識、行動認識、顔認識など。機能をカスタムしてもいいし、自分でプロジェクトを作ることもできる。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
SageMakerで作ったモデルをgreengrass経由でlocal Lambdaつかってデプロイするのかなーと想像してるけどどんな感じで進むのかしら
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Deeplens, Ubuntuのってるのか https://t.co/kIAck0l1aQ
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Deeplensはlambdaでinferenceする。VideoをKinesis Video Streamにおくる。デバイス管理はGreengrass。trainingなどはSageMakerで。今回発表されたサービスをもりもりつかっているなあ。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Deeplensのstorageは拡張できるらしい。MXNet用にclDNNが入ってる。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Tensorflowもサポート予定とのこと
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Alexaは入ってない。Audio StreamingではなくVideo Streaming。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
ホットドッグが配布されたw 「ホットドックの検出やるからまだ食べないでください!」とのこと
— suzuken@re:Invent (@suzu_v) 2017年11月29日
あ、これGreengrass Coreの1.2.0入ってるな。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
DeepLens consoleではmodelの設定とGreengrass上のLambda functionの設定ができる
— suzuken@re:Invent (@suzu_v) 2017年11月29日
あーDeepLensのinferenceの結果はMQTT topicでsubscribeできるのか。なるほど。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
なんていうか、DeepLens自体はGreengrassがpresetされたシンプルな構成だけど、Greengrass + Lambdaのおかげでデプロイもしやすいのがいいな。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
DeepLens上のLambda functionではpreprocess, inference, publishをしている。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
昨日Greengrass Workshopにいったので理解しやすくてよい
— suzuken@re:Invent (@suzu_v) 2017年11月29日
検出できた #deeplens #reinvent pic.twitter.com/ae4iolMad2
— suzuken@re:Invent (@suzu_v) 2017年11月29日
コードあった https://t.co/7E7fucz4p2 SageMakerつかってmodelを組んでみる
— suzuken@re:Invent (@suzu_v) 2017年11月29日
お、SageMakerでJupyter Notebookさくっと開いて実行できるじゃん便利
— suzuken@re:Invent (@suzu_v) 2017年11月29日
あーSageMakerでたてたJupyter NotebookでtrainしてmodelをS3にuploadしてそれをDeepLensですぐつかえるのかなにこれ便利
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Hotdog判別モデルをSageMakerでつくってs3に配置し、それをDeepLensのプロジェクトに追加してデプロイしている。
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Lab 4だとsubscribeしたtopicをLambdaのIoT RuleでSQLで絞り込むというのをしているな。これあったっけ? https://t.co/GMRrGffPlU
— suzuken@re:Invent (@suzu_v) 2017年11月29日
LambdaでIoT topicをsubscribeして、一定以上のp値でHotdogだと判定したらSNSでメールとばすのできた。無限にホットドック検出メールが飛んでくる・・w
— suzuken@re:Invent (@suzu_v) 2017年11月29日
これがないとDeepLensできないもんなあ。これ、DeepLensを作ろうとして用意したのかどうかとか気になる。SageMakerないとこのWorkshopも面倒だったろうし。https://t.co/fQheSFNnOA
— suzuken@re:Invent (@suzu_v) 2017年11月29日
Greengrass + Local Lambda + SageMakerの実用例がDeepLensっていうのはプレゼンテーションとしてもわかりやすいよなあ
— suzuken@re:Invent (@suzu_v) 2017年11月29日
今回のワークショップだとDeepLens上のUbuntuにはいってるデスクトップ環境つかってconsoleでの操作とかもできるし、なんていうか忍者の小道具みたいな感じがすごい
— suzuken@re:Invent (@suzu_v) 2017年11月29日
DeepLens Challenge Virtual Hackathonとな https://t.co/AhuooPL0oY #reinvent #deeplens
— suzuken@re:Invent (@suzu_v) 2017年11月29日
まとめ
*1:Workshop後にDeepLensももらえます