今年のGoogle Cloud Next '18で発表されたCloud AutoML Vision(Public Beta) [1]を試してみた.
Cloud AutoMLは, 機械学習やコーディングに関する専門知識がなくても, 誰でも独自のニーズに合わせてカスタマイズした機械学習モデルを作れるというサービスだ.
基本的な使い方は, Cloud AutoML Visionドキュメント(ただし, Alpha版用)[2] の入門ガイドや「Google Cloud AutoML Visionの使い方 機械学習モデルを作ってみよう」[3]などが参考になる.
今回は, 「金魚って見分けられる? (1)」[4]で収集した22種類の金魚画像を使って, 金魚の分類をやってみることにした.
1. データの準備
データセットの作成方法は, AutoML Visionインタフェースを使用して, 簡単に作成することができる.
[手順]
1) 「ADD IMAGES > Upload from your computer」で, 画像を選択してアップロードする.
2) Add labelで, ラベルを登録する.
3) 各画像を選択し, ラベルを付与する.
かなり簡単な操作で, ラベル付きのデータセットが作成できるようになっている.
しかし, すでにラベルがあるデータや, 多数のデータをこれでやるのは結構大変そうである.
そのような場合は, データをCloud Storageにあげておき, ファイル名とラベルを記載したimage list(CSVファイル)をインポートし, データセットを作成することもできる.
CSVファイルの例:
で, 出来上がったデータセットはこちら.
ちょっと便利なところは, 同一の画像がアップロードされると, チェックして除去してくれる点だ.
Duplicated files detected gs://PROJECT_ID-vcm/DATASET_NAME/images/chakin/GF13-00014.jpg and gs://PROJECT_ID-vcm/DATASET_NAME/images/chakin/GF13-00012.jpg have the same content
それゆえ, 集めたデータ内に重複があるかどうかをあまり気にせず, データをどんどん登録すればよい.
2. モデルの学習&評価
モデルの学習は, AutoML Visionインタフェースの「TRAIN」から行うことができる.
学習には数十分くらいかかったと思うが, AutoMLがよきに計らってくれるので, とても簡単である.
データセットは, デフォルトではランダムに3つのセットに分割され, 学習&評価に使用されるそうだ.
・80%がトレーニングに
・10%がハイパーパラメータ調整と, トレーニングの停止するタイミングの決定に
・10%がモデルの評価に. (トレーニングには使用しない)
学習した結果がこちら.
3. 分類テスト
AutoML Visionインタフェースの「PREDICT」から画像をアップロードすることで行うことができるが, 今回はPythonからAPIコールして分類をやってみた.
[コード]
import argparse import cv2 import numpy as np from google.cloud import automl_v1beta1 as automl # AutoML情報 project_id = 'PROJECT_ID' compute_region = 'us-central1' model_id = 'MODEL_ID' def main(args): # AutoML & Model情報 automl_client = automl.AutoMlClient() prediction_client = automl.PredictionServiceClient() model_full_id = automl_client.model_path(project_id, compute_region, model_id) params = {} if args.threshold: params = {"score_threshold" : args.threshold } # データ読み込み with open(args.input, 'rb') as image_file: content = image_file.read() payload = {"image": {"image_bytes": content}} # 予測 response = prediction_client.predict(model_full_id, payload, params) print('prediction results:') for result in response.payload: print('Predicted class name: {}'.format(result.display_name)) print('Predicted class score: {}'.format(result.classification.score)) # 結果表示 if args.view: img = cv2.imread(args.input) if img is not None: width, height, channel = img.shape[:3] print(width, height) cv2.putText(img, result.display_name, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255)) score = '{:06f}'.format(result.classification.score) cv2.putText(img, score, (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255)) cv2.imshow('Image', img) cv2.waitKey(0) cv2.destroyAllWindows() if __name__ == '__main__': parser = argparse.ArgumentParser() help_ = 'Input file' parser.add_argument('-i', '--input', help=help_) help_ = 'Score threshold (0.0 - 0.5)' parser.add_argument('-t', '--threshold', help=help_) help_ = 'View window' parser.add_argument('-v', '--view', help=help_, action='store_true') args = parser.parse_args() main(args)
一応金魚画像で, 分類を試せるようになった.
数枚程度しか試してないが, 学習データが少なくてもそこそこ認識している感じ.
わりと簡単にカスタム学習モデルが作れたので, アイデアとデータ/ラベルがあれば画像認識を活用したちょっとしたものが意外と簡単に作れるかも...
次は, Androidのjavaから利用できるか試してみよう.
----
参照URL:
[1] Cloud AutoML - カスタム機械学習モデル | AutoML | Google Cloud
[2] Cloud AutoML Vision ドキュメント | Cloud AutoML Vision | Google Cloud
[3] Google Cloud AutoML Visionの使い方 機械学習モデルを作ってみよう | あぱーブログ
[4] 金魚って見分けられる? (1) - みらいテックラボ
Google Cloud Platformではじめる機械学習と深層学習
|
Google Cloud Platformによる機械学習システム構築
|
Google Cloud Vision APIとPythonで文字認識
|
ビッグデータを支える技術―刻々とデータが脈打つ自動化の世界 (WEB+DB PRESS plus)
|