Googleから以下のようなメールがやってきた.
昨年の11月にAutoML VisionのGA(General Availability)版のリリースと共に価格改定が行われた.
そして, 以前に学習したモデルは, 再デプロイしないと2020/2/20で使えなくなるようだ.
あと1か月ほどということで, 最後の警告のようだ!!
(見落としていたが, この料金改定に関する通知は2019年10月頃にもメールで送信されているそうだ....)
対象となっているベータ版モデルはCODE for YAMATOKORIYAMAがらみで開発している「Kingyo AI Navi」[1]で, 金魚の種類を認識するのに使用しているものだ.
以前は予測はAPIのコール回数で課金されていたが, 価格改定後は予測を行うためにはモデルを再度デプロイする必要があるとのこと.
デプロイの料金は, ノード時間あたり $1.25. 1か月利用すると約$900[2]だそうだ.
さすがに, これでは趣味のアプリでちょっと使うといったことはできない.
TensorFlow/Kerasで独自にモデル学習することも以前やったことがあるが, やっぱりカスタムモデル作成にはAutoML Visionが便利. 使わない手はない!!
そこで, AutoML Vision Edgeでモデル学習し, 学習済モデルをエクスポートしてローカルのPCで予測することを試してみた.
関連記事:
・Cloud AutoML Vision Edgeを試してみる(1)
・Cloud AutoML Vision Edgeを試してみる(2)
1. モデルの学習[3][4]
AutoML Vision Edgeモデルの学習は, 基本的にはこちらの手順に沿ってやればよい.
PCで予測するので, モデル最適化のオプションは"Higher accuracy"で, そして学習データはいつものやつ.
4時間ほどで学習終了.
とりあえず, こんな感じに仕上がった!!
2. 学習済モデルのエクスポート[5]
学習済モデルのエクスポートは, 以前に比べると使用できるものがかなり増えている.
PCで予測をやるにあったて使えそうなものがいくつかあるが, 今回は「TF Lite」を試したみた.
(精度を求めるなら「Container」の方がいいと思うが, それは次回以降で...)
エクスポートは, こちらを参考にやればよい.
以下ものがエクスポートできる.
・dict.txt
・model.tflite
・tflite_moetadata.json
3. 予測[6]
エクスポートしたクラス情報とtflite modelを使って, 画像分類を行う.
[コード]
import numpy as np import pandas as pd import tensorflow as tf import cv2 CANDIDATE_MAX = 5 THRESHOLD = 30 IMAGE_SIZE = 224 # Load the dictionary and the tflite model def load_dict(): global names names = pd.read_csv('./model/dict.txt', header=None) print(names) def load_model(): global interpreter, input_details, output_details interpreter = tf.lite.Interpreter(model_path='./model/model.tflite') interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() print('Model loading completed.') # Classify a image def recog_image(img): dim = (IMAGE_SIZE, IMAGE_SIZE) img = cv2.resize(img, dim) img = img.reshape(1, IMAGE_SIZE, IMAGE_SIZE, 3) input_data = np.array(img, dtype=np.uint8) interpreter.set_tensor(input_details[0]['index'], input_data) interpreter.invoke() output_data = interpreter.get_tensor(output_details[0]['index']) return output_data[0] # Set candidates with good probability def set_result(output): data = [] for i in range(CANDIDATE_MAX): no = np.argsort(output)[::-1][i] prob = np.sort(output)[::-1][i] if prob < THRESHOLD: break r = {'label': names.iat[no, 0], 'probability': str(prob)} data.append(r) return data if __name__ == '__main__': load_dict() load_model() img = cv2.imread('./sample.jpg') input = img[:,:,::-1] output = recog_image(input) cand = set_result(output) print(cand) cv2.imshow('View Window', img) cv2.waitKey(0) cv2.destroyAllWindows()
[動作例]
入力:
結果:
"蝶尾"が正しく予測できてるー!!
AutoML Vision Edgeで学習したモデルをエクスポートし, ローカルのPCで画像分類ができることを確認した.
これで, Auto ML Visionでモデルをデプロイしなくて, アプリ内に画像分類処理を組み込んだり, 独自に画像分類サーバをたてることができそうだ.
----
参照URL:
[1] 「Kingyo AI Navi」のアプリ化を考える (1)~(4)
[2] 料金 | Cloud AutoML Vision | Google Cloud
[3] Edge device model quickstart | Cloud AutoML Vision | Google Cloud
[4] Training Edge exportable models | Cloud AutoML Vision | Google Cloud
[5] Exporting Edge models | Cloud AutoML Vision | Google Cloud
[6] AutoML Vision Edge: Build machine learning models for mobile and edge devices—in hours
GoogleCloudPlatform 実践 機械学習基礎開発MachineLearning/データ分析
|
|