Google Cloud AutoML Visionを使ってみた

[公式クイックスタート](https://cloud.google.com/vision/automl/docs/quickstart?hl=ja)に従って使ってみました。
簡単にディープライニングで画像分類ができることに感動。コーディングしていません。しかもData Augmentation(画像水増し)やハイパーパラメータの設定も自動でやってくれるなんて・・・

# 前提
OS: Ubuntu18.04 LTS 64bitで
Google Cloud Shellインストール済

# 手順
## 1. プロジェクト登録とAPIの有効化
[Console](https://console.cloud.google.com/cloud-resource-manager?hl=ja&_ga=2.7179962.-988124870.1535106952)からプロジェクトを新規登録して、[ウィザード](https://console.cloud.google.com/flows/enableapi?apiid=storage-component.googleapis.com%2Cautoml.googleapis.com%2Cstorage-api.googleapis.com&hl=ja&_ga=2.40217258.-988124870.1535106952)からAPI有効化。

## 2. プロジェクトとバケットの環境変数設定
Cloud Shellを使ってプロジェクトIDを設定し、プロジェクトとバケットの環境変数設定。バケット名が重要で、接尾辞が-vcmでないと後でエラーが出ます。

```bash
gcloud config set project <project id>
PROJECT=$(gcloud config get-value project) && BUCKET="${PROJECT}-vcm"
```

## 3. AutoML Vision サービス アカウントの権限の追加
AutoML Vision サービス アカウントの権限の追加をします。

```bash
gcloud projects add-iam-policy-binding $PROJECT \
   --member="serviceAccount:custom-vision@appspot.gserviceaccount.com" \
   --role="roles/ml.admin"
gcloud projects add-iam-policy-binding $PROJECT \
   --member="serviceAccount:custom-vision@appspot.gserviceaccount.com" \
   --role="roles/storage.admin"
```

## 4. バケットの作成
バケットの新規作成をして、サンプル画像のコピーします。サンプル画像は[ブログ記事](https://cloud.google.com/blog/big-data/2016/12/how-to-classify-images-with-tensorflow-using-google-cloud-machine-learning-and-cloud-dataflow?hl=ja)に記載されている内容だそうです。チュートリアルには画像コピーに20分ほどかかると書かれていましたが、5分くらいで終わりました。

```bash
gsutil mb -p ${PROJECT} -c regional -l us-central1 gs://${BUCKET}
gsutil -m cp -R gs://cloud-ml-data/img/flower_photos/ gs://${BUCKET}/img/
```

[ワイルドカードも使えるようです](https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames?hl=ja)

```bash
gsutil -m cp -R <path>/1*.png gs://${BUCKET}/img/
```


##5. CSV ファイルの作成
コピーしたデータの中にCSVファイルがあり、編集してローカルPCにall_data.csvというファイルを作成します。

```bash
gsutil cat gs://${BUCKET}/img/flower_photos/all_data.csv | sed "s:cloud-ml-data:${BUCKET}:" > all_data.csv
```

中身を少し見てみます。Google Cloud Storageのパスに変換されています。

```bash
$ head all_data.csv
gs://automlvision01-vcm/img/flower_photos/daisy/10140303196_b88d3d6cec.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/10172379554_b296050f82_n.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/10172567486_2748826a8b.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/10172636503_21bededa75_n.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/102841525_bd6628ae3c.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/1031799732_e7f4008c03.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/10391248763_1d16681106_n.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/10437754174_22ec990b77_m.jpg,daisy
gs://automlvision01-vcm/img/flower_photos/daisy/10437770546_8bb6f7bdd3_m.jpg,daisy
```

ローカルファイルをクラウドに持っていきます。

```bash
gsutil cp all_data.csv gs://${BUCKET}/csv/
```

## 6. データセットの作成
[Auto ML Vision](http://beta-dot-custom-vision.appspot.com/?hl=ja)にアクセスします。上の"NEW DATASET"というボタンを押します。
![alt](https://cloud.google.com/vision/automl/docs/images/click-datasets.png?hl=ja)

「Dataset name」を"test"とします。
「Import images」で「Select a CSV file on Cloud Storage」を選択してストレージのパス"gs://automlvision01-vcm/csv/all_data.csv"を入力し、「CREATE DATASET」ボタンを押します。5分くらいかかります。

以下の警告が出ましたが無視しました。

> Dataset is not multilabel but more than one label assigned to gs://automlvision01-vcm/img/flower_photos/tulips/15922772266_1167a06620.jpg
Duplicated files detected gs://automlvision01-vcm/img/flower_photos/sunflowers/15066430311_fb57fa92b0_m.jpg and gs://automlvision01-vcm/img/flower_photos/sunflowers/14889392928_9742aed45b_m.jpg have the same content
Duplicated files detected gs://automlvision01-vcm/img/flower_photos/sunflowers/15072973261_73e2912ef2_n.jpg and gs://automlvision01-vcm/img/flower_photos/sunflowers/15069459615_7e0fd61914_n.jpg have the same content

下図のイメージでラベルごとに画像が見られます。いいUIだ・・・
<img width="336" alt="10.Train01.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/134273/295e87a8-6bd1-19a0-8d8e-c3c731bdc301.jpeg">


## 7. モデルのトレーニング
Trainタブで「START TRAINING」ボタンを押します。
<img width="325" alt="10.Train02.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/134273/4c66a244-f763-7173-57ed-163c4e623f46.jpeg">

Training budgetをfreeのやつにして「START TRAINING」ボタンを押します。
<img width="330" alt="10.Train03.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/134273/2bf61a5f-794b-c907-a157-e380f0d8c666.jpeg">

10分程度で完了しました。 結果画面がこんな感じで見やすい！
<img width="519" alt="20.Evaluate01.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/134273/11eb25a3-4846-50b4-5c63-76d701fa999c.jpeg">
<img width="537" alt="20.Evaluate02.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/134273/4733951f-c41a-7de0-8a92-8fe2d7a745e4.jpeg">
<img width="604" alt="20.Evaluate03.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/134273/14e27d19-3689-de63-8ab5-d342e3f531eb.jpeg">