GCPのAutoMLVisionを試してみた

# はじめに
* GCPのAutoML Visionの単一ラベル分類を試してみたときのメモです
* 検証用のデータは[Indoor Scene Recognition](http://web.mit.edu/torralba/www/indoor.html)を利用しました
  * 屋内の画像とラベルが付与されたデータセットです

![スクリーンショット 2021-03-03 9.36.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/ffcead0a-7912-39a4-a8e4-839e55007195.png)

# 手順
## 1. データ収集
### データセットダウンロード（ローカルに）
* 下記から画像tarファイルとラベルCSVファイルをダウンロード・解凍する
  * http://web.mit.edu/torralba/www/indoor.html
    * indoorCVPR_09.tar
    * TrainImages.txt
    * TestImages.txt

* ディレクトリ構成例

```
├── data
│   ├── 01_raw
│   │   └── raw_01
│   │       ├── extracted
│   │       │   ├── CSV
│   │       │   │   ├── TestImages.txt
│   │       │   │   └── TrainImages.txt
│   │       │   └── Images
│   │       │       ├── airport_inside
│   │       │       |   ├── XXX.jpg
│   │       │       |   ├── ...
│   │       │       ├── artstudio
│   │       │       ├── ...
│   │       │       └── winecellar
│   │       └── tar
│   │           └── indoorCVPR_09.tar
```

```TrainImages.txt
gameroom/bt_132294gameroom2.jpg
poolinside/inside_pool_and_hot_tub.jpg
winecellar/bodega_12_11_flickr.jpg
...
(Total 67*80 images)
```

```TestImages.txt
kitchen/int474.jpg
operating_room/operating_room_31_03_altavista.jpg
restaurant_kitchen/restaurant_kitchen_google_0075.jpg
...
(Total 67*20 images)
```

## 2. データ前処理
### データ前処理（ラベリング整形）
* AutoML用に、ラベルCSVファイルを作成する
  * 1列目に自分で `TRAIN, VALIDATION, TEST` を指定しても良い。指定しなければ、8:1:1に分けられる

* ディレクトリ構成例

```
├── 03_primary
│   └── primary_01
│       ├── CSV
│       │   └── label_train.csv
│       └── Images
│           ├── gym
│           │   ├── XXX.jpg
│           │   ├── ...
│           ├── library
│           └── winecellar
```

```label_train.csv
gs://indoor_scene_reckognition_bucketXX/data/03_primary/primary_01/Images/library/bibliotheque55.jpg,library
gs://indoor_scene_reckognition_bucketXX/data/03_primary/primary_01/Images/library/students_library_computers.jpg,library
gs://indoor_scene_reckognition_bucketXX/data/03_primary/primary_01/Images/winecellar/bodega_12_11_flickr.jpg,winecellar
gs://indoor_scene_reckognition_bucketXX/data/03_primary/primary_01/Images/winecellar/cave_vin_10_10_altavista.jpg,winecellar
gs://indoor_scene_reckognition_bucketXX/data/03_primary/primary_01/Images/winecellar/wine_cellar_24_10_altavista.jpg,winecellar
...
```

### AutoML用GCSバケット作成
* GCPコンソールから作成する
  * リージョンは `us-central1` （AutoMLがus-central1しか対応していなかったため）
  * Standard
  * 均一

### サービスアカウント作成
* GCPコンソールから作成する
  * ストレージ
  * AutoML
  * → 秘密鍵（json）も作成しておく

### データアップロード（ローカルからGCSバケットに）

## モデル学習
### AutoML設定
* GCPコンソールで `Vision` を選択
* AutoML API有効化（最初のみ）


### データセット作成
* `単一ラベル分類` を選択
* GCSバケット上のラベルCSVファイルを指定

![スクリーンショット 2021-03-03 0.07.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/d2cf6123-85ba-8ca9-985c-df6772fdbff1.png)

![スクリーンショット 2021-03-03 0.07.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/54e25229-74ce-2081-8d5c-ceeccc85023e.png)

### AutoML実行
* `トレーニング` タブを選択
* `8 node hours` が最小
  * 料金に注意
  * 学習状況次第で、早めに打ち切ってくれる

![スクリーンショット 2021-03-03 0.12.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/93b918f1-4a42-ce64-554f-95025d3a749e.png)

![スクリーンショット 2021-03-03 8.26.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/43938343-db24-b043-bf7f-a40d2f29e4af.png)

## モデル評価
* `評価` タブを選択
  * 平均適合率: 適合率 / 再現率トレードオフ曲線の下の面積を計算することによって、すべてのスコアしきい値におけるモデルのパフォーマンスを測定したもの（範囲は 0～1）。
  * 適合率: 予測が正しかった割合（真陽性率）。適合率が高いほど予測の偽陽性率は低くなる。
  * 再現率: 再現率が高いほど、偽陰性や予測ミスが少なくなる

```confusion_matrix.csv（コンソールからダウンロード可能）
N/A,winecellar,gym,library
winecellar,8,0,0
gym,0,8,0
library,1,0,7
```

![スクリーンショット 2021-03-03 8.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/01cf234a-cf7a-411d-e8ea-91b486cabb23.png)

![スクリーンショット 2021-03-03 8.32.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/6e160dbd-44f7-ba73-15ab-6cd7595080cd.png)

## 注意点
* リージョンは `us-central1` （2020.03.01時点）
* ラベルごとに約 1,000 個のトレーニング画像を推奨（最小は10 or 50）
* トレーニング用ファイルの最大サイズは 30 MB
* 予測用ファイルの最大サイズは 30 MB

# 参考
* [GCPドキュメント-トレーニング データの準備](https://cloud.google.com/vision/automl/docs/prepare)
* [GCPドキュメント-料金](https://cloud.google.com/vision/automl/pricing?_ga=2.49268070.-1384356724.1614404777&_gac=1.15701060.1614496103.Cj0KCQiA-OeBBhDiARIsADyBcE5XhZrSsMSP-7MDWFtSPOr0eun6p9op1eet7DEOvszraoGH7pAejtoaAo5BEALw_wcB)
* [GCPドキュメント-クライアント ライブラリ](https://cloud.google.com/vision/automl/docs/client-libraries)