VRChatのスクショで自分が映っているものを自動判定する～学習編～

#AutoML Vision (beta)
GoogleのAutoML Visionを使えば画像をアップしてラベルをつけるだけで画像を自動分類してくれます。
今回VRChat([※下記参照](https://qiita.com/drafts/2c79d67ce7ba8264701c#vrchat))のスクリーンショットで自分が映っているものを判定させてみます。

# スクリーンショットを集める
VRChatのスクリーンショットから自分が使うぎんぎつねアバター画像、シャーロアバター画像とそれ以外が映っている他画像を用意します。
またトレーニング用と判定用を用意したいので計6種類用意します。トレーニング用はそれぞれ100枚以上でzipで纏めておきます。

* ぎんぎつねアバター画像  
![A.png](https://qiita-image-store.s3.amazonaws.com/0/375610/beb66028-462c-9c0a-e9e8-1d6a1b7e2bb2.png)
* シャーロアバター画像  
![B.png](https://qiita-image-store.s3.amazonaws.com/0/375610/52a73e46-4669-23af-a8d9-ae049dcc017f.png)
* 他画像  
![Other.png](https://qiita-image-store.s3.amazonaws.com/0/375610/12d6e900-1741-c1c3-e72c-cb47d4492d65.png)

スクリーンショットは下記googleフォト([下記参照](https://qiita.com/drafts/2c79d67ce7ba8264701c#google%E3%83%95%E3%82%A9%E3%83%88))に保管していると容量無制限でアルバムで種類ごとに整理できzipでまとめてダウンロードできるので便利です。

# 料金
少し試すだけなら無料(2019/3時点)
https://cloud.google.com/vision/?hl=ja
トレーニング:
毎月 10 個のモデルまで、モデルごとの最初の 1 時間のトレーニングは無料
予測:
1～1,000 個の画像は無料

# Google Could Platformに登録
AutoML利用のため先にGoogle Cloud Platformに登録する。
https://console.cloud.google.com/ 
<img width="834" alt="スクリーンショット 2019-03-12 14.12.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/375610/a1ce12d7-fce3-b76a-2c8c-87c99a35e323.png">

# プロジェクトを作成
https://console.cloud.google.com/ 
コンソール上のメニュー(My First Project)からプロジェクトを作成します。
<img width="847" alt="スクリーンショット 2019-03-12 14.17.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/375610/a676717a-5d80-b87e-528e-5a06928906c1.png">
<img width="906" alt="スクリーンショット 2019-03-12 14.17.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/375610/38ea4210-d76d-22c2-9266-583e8ef85a32.png">

# Auto MLを登録する
https://cloud.google.com/automl/ui/vision/overview
![startml.png](https://qiita-image-store.s3.amazonaws.com/0/375610/af522857-864a-afa9-b6e1-42cdbba384ba.png)
「Get started with autoML」から開始する。
![2019-03-09 (12).png](https://qiita-image-store.s3.amazonaws.com/0/375610/2ccab750-20d4-d616-4a29-8feb83ef0961.png)
Project IDは先ほど作成したプロジェクトを選択し「CONTINUE」で登録していく。
![2019-03-09 (13).png](https://qiita-image-store.s3.amazonaws.com/0/375610/39dd734c-b0d7-ff36-a149-e5f389014298.png)
Datasets画面が開きます。まだ何も画像を登録していない状態。
「NEW DATASET」から画像とラベルを登録していきます。

# データセットを作成
データセット単位で学習を行えます。これに画像とラベルを後から登録していきます。
https://cloud.google.com/automl/ui/vision/
「NEW DATASET」からデータセットを作成します。
![newdataset.png](https://qiita-image-store.s3.amazonaws.com/0/375610/22904685-bb25-fe25-e2b9-89854faa2e4a.png)
Dataset nameは適当で後は画像の通り。
複数ラベルを付けて分類するのでEnable multi-label classificationを選択しています。

# 画像とラベルを登録
![addimage.png](https://qiita-image-store.s3.amazonaws.com/0/375610/22a3593a-d9da-92a0-e969-9b7f11243ef7.png)
「ADD IMAGES」> Upload from your computerから画像をzipでまとめてアップロードします。（少し時間がかかります）
※ZIP化するときにラベル名のフォルダに画像をいれておくとアップロード後に自動で画像にラベルが付きます。
アップロード後は<font color="Red">「IMAGES」</font>の画面から画像にラベルを付けられます。<font color="Blue">「Add label」</font>でラベルを作っておき<font color="Green">「Unlabeled」</font>で画像を表示選択してラベルを付けます。
![IMAGE.png](https://qiita-image-store.s3.amazonaws.com/0/375610/0c60225f-5134-e625-dfcc-655bc4fe4ca5.png)

# トレーニング(学習)
![2019-03-10 (3).png](https://qiita-image-store.s3.amazonaws.com/0/375610/cb121caf-2eec-5641-b8da-e3ab5fe4b057.png)
画像とラベル付けが終わったら「TRAIN」からトレーニングを開始できます。
ラベルごとに最低100枚以上の画像が必要なようです。
（時間がかかります。10分くらいで終わりました）
終ると「EVALUATE」から結果がみれます。
Precisionが精度で画像は88.406%です。（画像増やしてもっと上げたい)
![EVALUATE.png](https://qiita-image-store.s3.amazonaws.com/0/375610/ca116157-7a7a-038a-32c4-1c5119e9bcea.png)

# 試しに自動判定
「PREDICT」から画像をwebからアップして判定できます。
画像ではぎんぎつねが映っている画像でgingituneとうまく判定されたようです。
![2019-03-10 (8).png](https://qiita-image-store.s3.amazonaws.com/0/375610/e9d67923-9ae5-760c-e95a-9b4a58c27dcd.png)
シャーロ
![2019-03-10 (15).png](https://qiita-image-store.s3.amazonaws.com/0/375610/e7448eac-7bee-0294-f98d-494e95f395cd.png)
他
![2019-03-10 (9).png](https://qiita-image-store.s3.amazonaws.com/0/375610/c8f020f0-7fd3-9376-5895-325269b5d726.png)
これは失敗
![2019-03-10 (28).png](https://qiita-image-store.s3.amazonaws.com/0/375610/fb2a5320-30fb-6d00-484e-4577229cd11d.png)
学習データにないパターンだとうまくいかないようでした。
顔アップで顔が隠れていない単純な画像だと判定してくれる印象です。

# API/SDKでも判定可能
プログラム書ける方ならAPI/SDKでも判定可能です。
「PREDICT」画面にやり方が記載されています。

# ついでに紹介
## googleフォト
googleフォトは容量無制限で画像を保管できるので便利です。
VRChatのスクリーンショットフォルダを同期しておけば自動で保存されます。
https://photos.google.com/apps?hl=ja
![容量無限.png](https://qiita-image-store.s3.amazonaws.com/0/375610/160ac4b5-ef3b-954b-663c-ecf6397890d0.png)
https://photos.google.com/settings
画像はアルバムで整理できるので自分が使うアバターとそれ以外で分類しておくと纏めてzipでダウンロードできます。

## VRChat
ここ見ている方は知っている方が多そうですが、VR空間でアバターによるコミュニケーションができるプラットフォームです。
アバターはunity/blender等で自作できますし有志で販売されているものもあります。
[紹介のCM](https://www.youtube.com/watch?v=kBd6co4bX4o)
[VRChat日本wiki](https://vrchatjp.playing.wiki/d/%bd%e9%bf%b4%bc%d4%a5%ac%a5%a4%a5%c9%20%28%a4%e4%a4%eb%bb%f6%a4%de%a4%c8%a4%e1%29)
[VRChat公式](https://www.vrchat.com/)