ねこIoTトイレtolettaはDeep Learningでねこを見分ける

## はじめに
こんにちは、ハチたまの大渕です。
2018/7/17に、SIerIoTLT vol.10で[toletta](https://toletta.jp/)の紹介をさせていただきました。（当時の発表資料は[こちら](https://speakerdeck.com/clockpulse/sumatonekotoire-toletta)）
今回はその続報とtolettaに搭載された猫の個体識別機能について簡単にお伝えしようと思います。

## tolettaとは
まずはじめに、tolettaについてご説明します。
tolettaは猫のヘルスケアサービスで、猫用トイレとスマホアプリで構成されています。

トイレにはセンサが組み込まれており、体重や尿量を測ることができます。
飼い主さんは、アプリで自分の猫の情報を見ながら猫の健康管理をすることができます。

こちらがtolettaの猫用トイレです。
トイレとしての使い勝手は一般的なシステムトイレと同様です。
<img width="60%" alt="ねこIoTトイレ" src="https://qiita-image-store.s3.amazonaws.com/0/315319/978a7bcc-b86e-dee4-e6c1-deac01bb1117.png">

こちらがアプリです。
飼い主さんはグラフや数値を見て、猫の健康情報を知ることができます。
<img width="30%" alt="tolettaアプリ" src="https://qiita-image-store.s3.amazonaws.com/0/315319/582694f7-9a6e-5312-5229-29f32da5be69.png">

## 現在のtolettaの状況とCTOの紹介
現在私たちは、弊社にいる２匹のCTO (Chief Toilet Officer)のきびしい監督の下、オフィスにある一点物（厳密には２台あるので二点物？）の試作機を使って日々開発を進めています。

![弊社CTOのうーちゃま](https://qiita-image-store.s3.amazonaws.com/0/315319/e7a5af7d-6c41-20c6-c92d-4703cd31e99e.jpeg "弊社CTOのうーちゃんとちゃま")

手前が「うーちゃん」で、奥が「ちゃま」です。
2匹ともかわいいですね〜。

この写真ではうーちゃんの後ろに隠れていてわかりにくいですが、実はちゃまはわがままボディの持ち主で、一部からは「ぽっちゃり王子」という不名誉な二つ名で呼ばれていたりします。


## ちゃまのダイエット大作戦！
おまんじゅうのような福々しい姿はとってもかわいいのですが、健康のことを考えると、ちゃまにはダイエットが必要でした。
そこで、tolettaを使った「ちゃまのダイエット大作戦！」が決行されたのです。

作戦の内容は、ごはんを適正量にしておやつを控えるといういたってシンプルなもの。
ダイエットの効果が出ているかをtolettaアプリを使って確認します。

tolettaを使ったダイエットは10月中旬から始まりました。
まずは10月の体重を見てみましょう。
赤い矢印に沿って、徐々に体重が減少していることがわかると思います。（赤い矢印は説明のために追加しました）
<img width="50%" alt="10月のちゃま" src="https://qiita-image-store.s3.amazonaws.com/0/315319/19fb4a77-0b63-090a-116c-1cc5bb66219e.png">

良い傾向ですね！
続いて、11月のデータを見てみましょう。
<img width="50%" alt="11月のちゃま" src="https://qiita-image-store.s3.amazonaws.com/0/315319/8b00dc70-268f-7499-d475-2c61dcdf9d14.png">

なんということでしょう。完全に停滞期に入ってしまっています。
ちゃまが、うーちゃんのご飯の食べ残しを食べていると言う噂は本当かもしれません。
ちゃまのカロリーコントロールをもっとしっかり行う必要がありそうです。

## 画像を使った猫の個体識別
当然ですが、うーちゃんとちゃまは２匹合わせてCTOですから、２匹ともtolettaを使います。
そのため、ちゃまのダイエットが進んでいるのかを確認するには、tolettaで測定した体重が、うーちゃんとちゃまのどちらのものなのかを見分ける必要があります。
tolettaは、画像を使って猫を見分けています。

### tolettaが撮影する画像
tolettaにはカメラが搭載されていて、猫がトイレに入ってきたら撮影を行います。
撮影される画像はこんな感じです。
<img width="50%" alt="tolettaが撮影したちゃまの画像" src="https://qiita-image-store.s3.amazonaws.com/0/315319/59df27d3-d907-82a6-8d02-49d4c3a3c740.png">


トイレに入ってくる瞬間のちゃまが撮影されているのがわかると思います。
tolettaではこれらの画像をDeep Learningの入力として使用して個体識別を行います。
Deep Learningを使っているということは、すなわちはじめに飼い主さんに教師データを作っていただかなければなりません。

### 猫の学習
以下の画像の左の画面の下に、右の画面が続きます。
飼い主さんは、リストから正しい猫の名前を選択します。
<img width="100%" alt="データ振り分け画面" src="https://qiita-image-store.s3.amazonaws.com/0/315319/a48e8aa8-f84b-305f-16f4-4261e65d5e92.png">

しばらくは、このように飼い主さんに画像の振り分けをしていただく必要がありますが、何回か振り分けを行うと自動で識別されるようになります。
おおよそ３日くらい振り分けをしていただくと自動識別が効いてきます。
１日のトイレの回数が猫によって１回から数回とだいぶ異なるので、トイレの回数が少ない子はもう少し時間がかかることもあります。

### 前処理
tolettaが設置される場所は、朝と夜、飼い主が在宅のときと留守のとき、などで周囲の明るさが結構変わります。
弊社オフィスでも、部屋の電気が点いているときと消えているときで、これくらい見え方が変わります。
<img width="100%" alt="明るい画像と暗い画像" src="https://qiita-image-store.s3.amazonaws.com/0/315319/97c0feb8-8440-329b-72e3-27d01e00287a.png">

tolettaは部屋の明るさが変わっても正しく識別するために、画像の前処理をしています。
識別精度を下げる要因は明るさの変化だけでなく他にもありますが、それらを除外するための前処理は欠かせません。
とはいえ、画像処理は負荷の高い処理のためリッチにやりすぎるとサーバのリソースを消費してしまうというジレンマもあり、そのバランスを考えるのが大事だったりします。
今後は、効果と処理負荷のバランスを見ながら識別精度を上げていくつもりです。

## さいごに
先日、tolettaの発売延期をご案内し、みなさまには大変ご迷惑とご心配をおかけしてしまいました。

少しでも早くtolettaをみなさまにお届けできるよう、スタッフ一同全力を尽くしておりますので、もう少しお待ちいただければ幸いです。