CreateMLで、はなさんとみるくさんを後ろ姿で判別できるか

[qnoteアドベントカレンダー2018](https://qiita.com/advent-calendar/2018/qnote)の10日目です。

# はじめに
当社には、猫社員が７名在籍しております。
うち５名は兄弟姉妹であるため、判別に少し観察が必要です。
今回はその内の2名を機械学習によって、判別できるかを試してみます。

# CreateMLとは
CreateMLとは、たった3行のコードでお手軽に機械学習（画像認識など）をさせることができるツールです。
[Create ML | Apple Developer](https://developer.apple.com/documentation/createml/)
[WWDC 2018のムービー](https://developer.apple.com/videos/play/wwdc2018/717)

CreateMLの使い方は、多くの方が書かれているので紹介は省きます。

# 対象の２名の紹介
では、今回の主役の２名を紹介します。
![IMG_3494.png](https://qiita-image-store.s3.amazonaws.com/0/185846/bd331114-9762-e972-43fd-5271a28afe5b.png)

奥が`はなさん`で手前が`みるくさん`です。
どうでしょう？見分けが難しいですよね。

## 見分けのポイント
それでは、簡単に見分けるポイントをご紹介します。

### 鼻の線と口周りの色 
![みるく](https://www.qnote.co.jp/wp-content/uploads/2017/08/qnote_cats_milk.png)![はな](https://www.qnote.co.jp/wp-content/uploads/2017/08/qnote_cats_hana.png)
（1枚目）みるくさん、（2枚目）はなさん
[弊社HPより引用](https://www.qnote.co.jp/qnote_cats/)

`はなさん`には、鼻に縦線があります。
あと少し分かりヅラいですが、`みるくさん`の方が`はなさん`より口周りが白っぽいのです。

### しっぽ
![IMG_3422.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/89fa6c84-9906-cf59-5382-42ffa1f4d2c1.jpeg) ![IMG_3386.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/f563687c-9642-3add-3835-f036f164547f.jpeg)
（1枚目）みるくさん、（2枚目）はなさん

尻尾が、`みるくさん`は丸っこく、`はなさん`はシュッとしています。

### 全体のシルエット
![IMG_3367.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/66161e2d-f9d0-8e33-9e20-7e4133cdedda.jpeg) ![hana_側面.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/3a7f4174-800e-3d56-5243-b0e92c9442c9.jpeg)

（1枚目）みるくさん、（2枚目）はなさん

`みるくさん`は、全体的に`はなさん`より大きいです。
愛くるしいので私は好きです。

こんなところです。

# 画像収集
機械学習でもっとも重要となる作業です。
なるべく、バラエティを持たせる必要があります。

今回は両者共に50枚ずつ用意しました。
![MILK](https://qiita-image-store.s3.amazonaws.com/0/185846/3bccf3ec-fdbd-814f-0c4c-a4640209df34.png)

![HANA](https://qiita-image-store.s3.amazonaws.com/0/185846/6f185965-dc0e-9a80-e7d6-eec8eabb2a1f.png)

# テストデータ
テスト用として、一応正面・側面・後ろ姿と3種類のデータを用意しました。
難易度も簡単に付けてみたので、みなさんもチャレンジしてみてください。
（答えは最後に記載しています。）

## 初級（正面）
![IMG_3475.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/a12e809f-eebc-aed5-d984-b91fd1159d8d.jpeg)　![IMG_3474.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/07b35653-9dbc-b89a-ca9d-2fa8007e612f.jpeg)


## 中級（側面）
![IMG_3478.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/24f6594a-f4fa-3abb-d7f0-d36972e1ace7.jpeg)　![IMG_3476.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/28204d62-59a5-b49d-3c22-1bcda83266b7.jpeg)


## 上級？（後ろ姿）
![IMG_2966のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/185846/0f13eb3a-a2e2-848e-b22c-0ec2c2825d80.png)　![IMG_3479.jpg](https://qiita-image-store.s3.amazonaws.com/0/185846/ccd198b1-fdb5-b50e-e5b6-e6f4c8edafbe.jpeg)

## 答え
| |左側|右側|
|:-:|:-:|:-:|
|初級（正面）|はなさん|みるくさん|
|中級（側面）|みるくさん|はなさん|
|上級？（後ろ姿）|みるくさん|はなさん|

# 結果
## Maxiterations:20、オプションなし
結果、みるくさんの後ろ姿以外がはなさんと認定されてしまいました。
<img width="315" alt="スクリーンショット 2018-12-09 11.37.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/83571981-523f-4c74-5559-aa9adcccca01.png">
<img width="309" alt="スクリーンショット 2018-12-09 11.37.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/fbb2fd6e-109e-2c09-ee30-b11355654a5e.png">
<img width="310" alt="スクリーンショット 2018-12-09 11.37.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/6c1fdfc2-b216-ab95-a077-cbee6726a525.png">

## Maxiterations:20、オプション：Rotate/Blur/Expose/Noise
結果はやはり`みるくさん`の後ろ姿のみが、`はなさん`に判定されてしまった。
さらに`はなさん`の割合が96%に上がってしまった。
<img width="310" alt="スクリーンショット 2018-12-09 12.25.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/7cd7c944-9b59-1e2b-24db-0d7c02c36c46.png">

## Maxiterations:20、オプションフルチェック
今回は、結果はやはり`みるくさん`の後ろ姿のみが、正しく判定されました。
<img width="307" alt="スクリーンショット 2018-12-09 13.22.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/ddd3630c-7629-09ae-1d6d-8cca0d431172.png">

しかし、今度は逆に、全て`みるくさん`に判定されてしまった。。。
<img width="308" alt="スクリーンショット 2018-12-09 13.17.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/9f45ebe7-59ce-ccd8-457e-30ce75a06e62.png">
<img width="308" alt="スクリーンショット 2018-12-09 13.17.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/185846/0df03730-a7e5-4a4b-5058-2df546433130.png">



# まとめ
結局、弊社のみるくさんとはなさんの紹介になってしまいました。

画像認識って、敷居が高い気がしてましたが50枚ずつ画像を集めるだけで、これだけの精度の作れるなんて素晴らしい。
今回はまだ素材が足りないのか、使い方が良くないのか一歩及ばない結果になってしまいました。

次は、CreateMLで作ったCoreMLを使って、iPhoneでカメラを向けたら判定してくれるアプリを作りたいなと思っています。