LoginSignup
2
1

More than 3 years have passed since last update.

Google Cloud AutoML Vision で、10人の女優を識別する

Posted at

はじめに

画像

  • 画像は、グレースケール化とリサイズ 28x28 したものを利用します。
  • 以下が画像の概要です。
名前 フォルダ名 画像数
安倍乙 0_abe_oto 415
石原さとみ 1_ishihara_satomi 492
大原優乃 2_ohara_yuno 372
小芝風花 3_koshiba_fuka 400
川口春奈 4_kawaguchi_haruna 369
森七菜 5_mori_nana 389
浜辺美波 6_hamabe_minami 481
清原果耶 7_kiyohara_kaya 428
福原遥 8_fukuhara_haruka 420
黒島結菜 9_kuroshima_yuina 448

image.png

image.png

AutoML

画像のzip化

  • AutoML へ画像をアップロードするために zip 化を行います。
  • .jpeg を複数ファイルアップロードすることも出来ますが、この場合は、UIでラベル付等をする必要があります。
  • 以下の様なフォルダ構成を準備します。
  • images 等の中にラベル名とするフォルダ名 0_abe_oto を作成します。ラベル名は、安倍乙等の日本語は使えません。
  • 0_abe_oto には、トレーニング、検証、テストに利用する画像ファイルを保存します。
$ tree
.
├── images
│   ├── 0_abe_oto
│   │   ├── 0002-0001.jpeg
│   │   ├── 0004-0001.jpeg
省略
│   ├── 1_ishihara_satomi
│   │   ├── 0001-0001.jpeg
│   │   ├── 0004-0001.jpeg
  • 上記を zip 化します。
$ zip images.zip -r images
  adding: images/ (stored 0%)
  adding: images/2_ohara_yuno/ (stored 0%)
  adding: images/2_ohara_yuno/0393-0001.jpeg (deflated 1%)
省略

プロジェクトの作成

  • GCPコンパネでプロジェクトを作成しました。

image.png

AutoML Vision の有効化

image.png

新しいデータセット

image.png

  • データセット名を適当につけます。
  • 今回は、10人の女優の画像があるので、マルチラベル分類を選びます。

image.png

  • パソコンから画像をアップロードします。今回は、images.zip ですね。

image.png

image.png

  • 保存する Cloud Storage を選択します。
  • 新規プロジェクトから AutoML APIを有効にした場合は、バケットが作成されているはずです。

image.png

image.png

  • 画像のインポートは、ある程度の時間がかかります。images.zip 内のファイル数は約4,000、ファイルサイズは約4Mバイトです。
  • 終了すると、メール通知があります。だいたい、20分かかりました。

image.png

image.png

イメージの確認

  • ラベル、画像等が確認できます。

image.png

トレーニング

  • アップロードした画像は、トレーニング、検証、テストに分けられていました。

image.png

  • マニュアルには、以下の記載があります。
  • 各ラベルの画像は、最低100枚、理想的には1,000枚とのこと。

image.png

  • モデルは、Cloud hosted にしました。

image.png

  • ノード時間は、悩ましいところです。今回の推奨では、32ノード時間になっていました。
  • これは、画像数が約4,000枚だからでしょう。
  • 料金は、以下の様になります。
    • 32ノード時間 * 3.15ドル = 100.8ドル = 約11,000円

image.png

image.png

  • 今回は、以下の説明があったので 8ノード時間 にしました。
  • また、REST API も試してみたいので、デプロイしました。
  • だいたい、1時間後に完了のメールが届きました。

image.png

image.png

image.png

image.png

トレーニング結果

image.png

image.png

image.png

テストと使用

  • 画像をアップロードして確認することが出来ます。

image.png

image.png

REST API

  • REST API を使ってみます。

  • 画像をBASE64にします。

$ base64 -i input.jpg -o output.txt

$ cat output.txt
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/wAALCAAcABwBAREA/8QAFwABAQEBAAAAAAAAAAAAAAAACQcICv/EACsQAAEDBAEEAQMEAwAAAAAAAAECAwQFBgcRCAASEyExCUFRCiIycRRhof/aAAgBAQAAPwDG+IL1g1Wj0CVftWjQUX1fkGXWnJLqUJTGXUEABSlaCW0tMqBHxpQ66G6hnPFdKx+q9nLxhCiRofkXUmXkqZDYT7IUnY0B9x0Uf1wsxcdOSfHSHcuJrslVOrUOvtSoM5duTI7D7KwW3fDIdaSh0DuSSEk/G/evRAXdLZqdbcqjDYaTKSl3sHsAkbP/AHfV54rYpyryvzfbeJcZzGUPxPHK80yA1LZitNBLaStl0Ft3167FAje/R66MsX8UqPbXGeJY15mM7JiojvzlMw22m/2kfLTaQhI9JJSAE/PoD11jT6h308sbYo4l5VzDkrMN4XNKatudKoqrmu2XOS1KUsLZUEuLDaQj022hCEpSk69+ugZET/IQkkgdg7dHXrpI/wBO2xabOWKlXVOtpqwUG3w6sb8Q/glI/G+4n8k/10ofMLkVWqVbsulY5ydka2ELZ8VUVTLOg9jw7gVPR5E91o77U9oUnvaA2dEnrC31xee1OyBxCoeJ6FCq9Lk3MiM0KbW0tomuspUD5HEtLWgBQSFelH+Q+N66IMR3nE94JBJPdr87PVL4sZNvzEmWEXrju5ZFLnwkKcQtggocAAJQtBBStB+4I/rR99PZYPK69L84Z0DMl22JZ9QrS6WHwudQA+htYbJ2gOqUUex9j0FmaM+ZF5ac6o92ZinR5DhvBiAzChseKNHjokpT2Ib2db1tRJJJ/wBaAlh0002UgfvClnf2JWonXX//2Q==
  • request.json を作成します。上記のBASE64の結果を imageBytesに設定します。
{
  "payload": {
    "image": {
      "imageBytes": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/wAALCAAcABwBAREA/8QAFwABAQEBAAAAAAAAAAAAAAAACQcICv/EACsQAAEDBAEEAQMEAwAAAAAAAAECAwQFBgcRCAASEyExCUFRCiIycRRhof/aAAgBAQAAPwDG+IL1g1Wj0CVftWjQUX1fkGXWnJLqUJTGXUEABSlaCW0tMqBHxpQ66G6hnPFdKx+q9nLxhCiRofkXUmXkqZDYT7IUnY0B9x0Uf1wsxcdOSfHSHcuJrslVOrUOvtSoM5duTI7D7KwW3fDIdaSh0DuSSEk/G/evRAXdLZqdbcqjDYaTKSl3sHsAkbP/AHfV54rYpyryvzfbeJcZzGUPxPHK80yA1LZitNBLaStl0Ft3167FAje/R66MsX8UqPbXGeJY15mM7JiojvzlMw22m/2kfLTaQhI9JJSAE/PoD11jT6h308sbYo4l5VzDkrMN4XNKatudKoqrmu2XOS1KUsLZUEuLDaQj022hCEpSk69+ugZET/IQkkgdg7dHXrpI/wBO2xabOWKlXVOtpqwUG3w6sb8Q/glI/G+4n8k/10ofMLkVWqVbsulY5ydka2ELZ8VUVTLOg9jw7gVPR5E91o77U9oUnvaA2dEnrC31xee1OyBxCoeJ6FCq9Lk3MiM0KbW0tomuspUD5HEtLWgBQSFelH+Q+N66IMR3nE94JBJPdr87PVL4sZNvzEmWEXrju5ZFLnwkKcQtggocAAJQtBBStB+4I/rR99PZYPK69L84Z0DMl22JZ9QrS6WHwudQA+htYbJ2gOqUUex9j0FmaM+ZF5ac6o92ZinR5DhvBiAzChseKNHjokpT2Ib2db1tRJJJ/wBaAlh0002UgfvClnf2JWonXX//2Q=="
    }
  }
}
  • サービスアカウントを AutoML 編集者で作成して、keyをダウンロードします。
$ export GOOGLE_APPLICATION_CREDENTIALS=/Users/maeda_mikio/Downloads/automl-20200111-67d782c3de3c.json
  • curlを実行します。予測結果が取得出来ました。
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" https://automl.googleapis.com/v1beta1/projects/655668842161/locations/us-central1/models/ICN6623260133629624320:predict -d @request.json
{
  "payload": [
    {
      "annotationSpecId": "3339315769602211840",
      "classification": {
        "score": 0.8167497
      },
      "displayName": "0_abe_oto"
    }
  ]
}

Python

  • Pythonでも実行します。
$ pip install google-cloud-automl
predict.py
import sys

from google.cloud import automl_v1beta1
from google.cloud.automl_v1beta1.proto import service_pb2


# 'content' is base-64-encoded image data.
def get_prediction(content, project_id, model_id):
  prediction_client = automl_v1beta1.PredictionServiceClient()

  name = 'projects/{}/locations/us-central1/models/{}'.format(project_id, model_id)
  payload = {'image': {'image_bytes': content }}
  params = {}
  request = prediction_client.predict(name, payload, params)
  return request  # waits till request is returned

if __name__ == '__main__':
  file_path = sys.argv[1]
  project_id = sys.argv[2]
  model_id = sys.argv[3]

  with open(file_path, 'rb') as ff:
    content = ff.read()

  print(get_prediction(content, project_id, model_id))
$ python3 predict.py input.jpg 655668842161 ICN6623260133629624320
payload {
  annotation_spec_id: "3339315769602211840"
  classification {
    score: 0.8167496919631958
  }
  display_name: "0_abe_oto"
}

おわりに

  • AutoML Vision で画像の分類をやりました。
  • 評価結果は、非常にわかりやすいですね。また、REST API、Pythonからの利用も簡単です。
  • ただ、料金はきになる部分ですね。個人での利用は、悩ましいな。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1