AWS DeepLensのトレーニング済みサンプルモデル全部試す！

こんにちは。からっきーです。
[IoTLT Advent Calendar 2017](https://qiita.com/advent-calendar/2017/iotlt_neo)の7日目の記事です！

先週ラスベガスで開催されたAWSのカンファレンス**re:Invent**に参加してきました。

キーノートではたくさんの新サービスや新機能が発表されて盛り上がっていたことをご存じの方もいるかもしれませんが、その中で**AWS DeepLens**というものも発表されました。

DeepLensはサービス名でもあり、そのサービスで使用するデバイス名でもあります。
これを使うことでなにが嬉しいのかを簡単に説明すると、**カメラで撮影した映像のエッジ解析をよりビジネスロジックに集中して実現することができる**、といったところでしょうか。
ハードウェアの設計、セッティング、学習モデルのデプロイ、クラウドとの連携といった部分をAWSでマネージしてくれていて、開発者は学習モデルの開発と解析したデータの使い方を考えることに注力できます。

[AWS公式の説明ブログ](https://aws.amazon.com/jp/blogs/news/aws-deeplens-extensions-build-your-own-project/)

# 未発売！これが激レアのDeepLens

DeepLensデバイスはre:Inventで実施されたワークショップに参加した人だけに配布されたもので、なかなかレア度が高いです。
日本にも数個しか存在していないのでは・・

実際のブツはこんな感じ。
下の部分がコンピュータになっていて上にでている黒い部分がカメラです。

![deeplens-1-825x510.png](https://qiita-image-store.s3.amazonaws.com/0/99248/c21713b0-4b49-ffae-430b-1bc36ad15894.png)

なんとも愛着の湧くフォルムをしたこの子ですが、中身は立派なコンピュータ。

<img width="670" alt="スクリーンショット 2017-12-07 02.22.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/99248/5f85a8cd-8329-c559-2e88-db95d91c42e9.png">

Amazon.comでは2018/4/14に発売開始されるそうでお値段は$249！！
[商品ページ](https://www.amazon.com/dp/B075Y3CK37)

# 学習モデル、ファンクション、出力データ

機器の初期セットアップは[こちら](https://www.hands-lab.com/tech/entry/3191.html)を参考にしてみてください。

セットアップが終わったら、あとは学習モデルとファンクションをDeepLensに流し込むだけです。


**学習モデル**は、こちらもre:Inventで新しく発表された**SageMaker**というものを使ってよりシンプルに作れるようになったみたいです。しかしながらまだ学習モデルを作るというところまで私ができないため、最初から幾つか用意されているサンプルを使用します。

**ファンクション**は、**学習モデルの実行**と、**推論した結果をどうするのか**、ということが書かれたLambda　Functionです。

**推論されたデータアウトプット**は、[AWSのブログ](https://aws.amazon.com/jp/blogs/news/aws-deeplens-extensions-build-your-own-project/)を見ると、AWS IoTにパブリッシュしたり、S3に保存したり、映像をkinesisに流し込んだりなどしてますね。

# サンプルプロジェクトを試してみる！
AWSコンソールからDeepLensのページに行くと、予め以下のプロジェクトが使えるようになっています。

- Object detection
    - ２０種類のオブジェクトを検出します
- Artistic style transfer
    - ゴッホが描いた絵っぽくします
- Face detection
    - 顔を検出します
- Hotdog recognition
    - ホットドッグなのか、そうじゃないのかを識別します
- Cat and dog recognition
    - 犬なのか猫なのかを識別します
- Action recognition
    - 30種類以上の動きを識別します


順番に試していきます！！
なお、カメラに写すものを実際に用意するのはしんどいのでブラウザで画像検索したものをDeepLensで撮影します。
リアルタイムに解析されて、**モニターに出力された映像**と、AWS IoTに解析結果が出力されるようになっているものについては**サブスクライブしたデータ**を記載します。

# Object detection
検出できるのは下記のオブジェクト
aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, dinning table, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor

### モニター映像
![Screenshot from 2017-12-06 07-39-54.png](https://qiita-image-store.s3.amazonaws.com/0/99248/c99a16fb-4108-300d-1ecf-9a0d9ad03195.png)

### AWS IoTでサブスクライブしたデータ

```
{
  "bottle": 0.39,
  "cat": 0.27,
  "chair": 0.44,
  "tvmonitor": 0.35,
  "null": 0
}
```

# Artistic style transfer
### モニター映像

![Screenshot from 2017-12-06 07-47-58.png](https://qiita-image-store.s3.amazonaws.com/0/99248/47e54727-0f57-e8af-928c-de5d095d3324.png)

左側がもとの画像、右側が出力結果です。
（これがゴッホの絵っぽいのかはちょっとよくわからない・・）

# Face detection

### モニター映像
![Screenshot from 2017-12-06 07-56-29.png](https://qiita-image-store.s3.amazonaws.com/0/99248/5de3e749-e780-4c06-30ed-92996c82c5b4.png)

### AWS IoTでサブスクライブしたデータ

検出されている時

```
{
  "1": 0.45,
  "null": 0
}
```

検出されていない時

```
{
  "null": 0
}
```
# Hotdog recognition
### モニター映像

ホットドッグじゃない時
![Screenshot from 2017-12-06 07-44-51.png](https://qiita-image-store.s3.amazonaws.com/0/99248/7ac7e137-6722-5028-d9b6-551366e90f1a.png)

ホットドッグと識別されると青のインジケーターがぐいーん
![Screenshot from 2017-12-06 07-44-31.png](https://qiita-image-store.s3.amazonaws.com/0/99248/ae0d5ca8-48b5-8fd8-6f59-a2c194cbc602.png)

### AWS IoTでサブスクライブしたデータ

```
{
  "Hotdog": 0.800466954708,
  "Not Hotdog": 0.199533045292
}
```

re:InventのDeepLensワークショップではこちらのサンプルを使用しました。
AWS IoTで`Hotdog`というキーワードを拾って、その値をイベントにしてLambdaをフックし、値が0.6以上だったらスマホのSMSに通知する、といった内容でした。
[公式ブログ](https://aws.amazon.com/jp/blogs/ai/extend-aws-deeplens-to-send-sms-notifications-with-aws-lambda/)

このホットドッグネタ、現地の方に聞いたところあるドラマでのネタらしく、向こうの人ならわかるやつとのことでした。
調べてみたらその部分がYouTubeに上がっていました。納得。
https://www.youtube.com/watch?v=ACmydtFDTGs


# Cat and dog recognition
## モニター映像
猫（左上にちっちゃく`cat`）
![Screenshot from 2017-12-06 08-06-46.png](https://qiita-image-store.s3.amazonaws.com/0/99248/e28c3bbd-16b6-a952-f500-f3bb36361666.png)

犬（左上にちっちゃく`dog`）
![Screenshot from 2017-12-06 08-07-34.png](https://qiita-image-store.s3.amazonaws.com/0/99248/6a6da280-0941-3c35-3521-d5e74db2afd2.png)

### AWS IoTでサブスクライブしたデータ

猫の時

```

{
  "cat": 0.991203427315,
  "dog": 0.00879661552608
}
```

犬の時

```
{
  "dog": 0.965661048889,
  "cat": 0.0343389473855
}
```

# Action recognition
識別できるのは下記の動き

applyeyemakeup, applylipstick, archery, basketball, benchpress, biking, billiards, blowdryhair, blowingcandles, bowling, brushingteeth, cuttinginkitchen, drumming, haircut, hammering, handstandwalking, headmassage, horseriding, hulahoop, jugglingballs, jumprope, jumpingjack, lunges, nunchucks, playingcello, playingflute, playingguitar, playingpiano, layingsitar, playingviolin, pushups, shavingbeard, skiing, typing, walkingwithdog, writingonboard, yoyo


### モニター映像

（左上にちっちゃく`horseriding`）
![Screenshot from 2017-12-06 08-17-00.png](https://qiita-image-store.s3.amazonaws.com/0/99248/9cfe2816-2e75-2fcc-0756-caa78a1f5e45.png)

### AWS IoTでサブスクライブしたデータ

```
{
  "horseriding": 0.86,
  "lunges": 0.14,
  "pushups": 0,
  "handstandwalking": 0,
  "hulahoop": 0
}
```

# まとめ
今回サンプルプロジェクトを使用しましたが、なんとなくDeepLensを使ってどんなことができるのかがイメージできたのではないでしょうか。
今後はSageMakerでモデルを作って遊んだりしてみたいです。