Help us understand the problem. What is going on with this article?

GCP Cloud AutoML Vision Edgeを使ってカスタムモデルを作ってエッジデバイスで動かす話(Firebase ML Kit)

More than 1 year has passed since last update.

はじめに

Google Cloud Next'19(4/9-11@サンフランシスコ)にて、AutoML Vision Edgeが発表されたので、少し触ってみました。

そもそもAutoMLとは

専門的な知識なしで、ユーザは学習させたいデータを集めて、学習させるだけで、高品質のカスタム機械学習モデルを作成できるサービスです。
リリース当初は、ラーメン二郎の店舗分類などで、非常に高精度な結果を出し、注目もされました。
現在は、ベータ版で、Vison(画像分類)、NaturalLanguage(自然言語処理のテキスト分類)、Translation(カスタム翻訳)があります。ほかに、Google Cloud Next'19で、AutoML Tables(テーブルデータでの予測)も発表されました。Qiitaで早速書かれていました。

AutoML Vision Edgeとは

今回の本題AutoML Vision Edgeは、AutoML Visionの拡張で、Edgeデバイスで動くカスタムモデルを作成できるサービスとなっています。

では早速動かしてみます。

前提と流れ

トレーニングデータの保存方法などは、AutoML Visionと同一なので、割愛し、異なる点のみ記載します。
また、作成されたカスタムモデルは、Firebase ML Kitを活用して、自分のAndroid端末で動作させるサンプルアプリ上で動かしました。参考:ML Kit for Firebase(on device)でカスタムモデルを動かす話(TensorFlowLite/Keras)

流れは以下です。

  1. GCPポータルで、AutoML Vision Edgeモデルの作成
  2. tfliteファイルを、GCSに保存、ダウンロード
  3. ML Kit for Firebaseで動くようにコードを修正
  4. アプリを端末へ転送し、動かします。完成。

GCP以外の環境

ローカルPC

AndroidStudioを入れて、タブレットとUSB接続し、アプリをインストールする用途

  • Windows 10
  • AndroidStudio 3.2.1

タブレット端末

作成したカスタムモデルを入れて、Androidアプリを動かす用途

  • HuaweiMediaPad
  • Android7.0

1. GCPポータルで、AutoML Vision Edgeモデルの作成

まず、学習データは、9種類のラベルと、それぞれ100枚の画像を用意(計900枚の画像)しました。
それをAutoML Visionに読み込ませておき(このあたりは他のサイト参照)、「TRAIN NEW MODEL」ボタンを押して、生成するためのパラメータを入力します。

Model Typeが選べるようになっており、Cloud-hosted(これまでのクラウドホスト型)のほかに、Edgeが選択可能となっており、今回はEdgeを選択します。

また、遅延と精度も最適化手法が選べ、Best trade-offを選びました。
遅延の推定値は、GooglePixel1/Samsung Galaxy S7/iPhone8(iOS11)/Edge TPUから選択できます。
ちなみに、今回のモデルはGalaxyだと65msec処理のものでしたが、Edge TPUだと3msecという推定結果です。Edge TPUは爆速ですね。
最後に、ノード時間に対する予算を設定します。リコメンドで2 node hoursになっていたので、そのままにしています。

train new model1

train new model2

約一時間ほどで、処理が完了しました。
https://storage.googleapis.com/permanent_koizumi/20190414_processing.png

2. tfliteファイルを、GCSに保存、ダウンロード

得られた結果は、以下のようなもので過学習の疑いしかありませんが、取り急ぎ、完成したので良しとして、tfliteファイルをエクスポートします。GCS(Google Cloud Storage)にエクスポートされます。

https://storage.googleapis.com/permanent_koizumi/20190414_score.png

https://storage.googleapis.com/permanent_koizumi/20190414_export.png

エクスポートされた先には、以下のファイルがありました。

ファイル名 内容
labels.txt ラベル情報(今回は、9種類のラベルがoutputされていました)
model.tflite tfliteファイル
tflite_metadata.json メタデータファイル(設定もろもろ)

このメタ情報を見ることで、イメージの縦横サイズや、input type(quantized_uint8)であるとかが分かります。

tflite_metadata.json
{
    "batchSize": 1, 
    "imageChannels": 3, 
    "imageHeight": 224, 
    "imageWidth": 224, 
    "inferenceType": "QUANTIZED_UINT8", 
    "inputTensor": "image", 
    "inputType": "QUANTIZED_UINT8", 
    "outputTensor": "scores", 
    "supportedTfVersions": [
        "1.10", 
        "1.11", 
        "1.12"
    ]
}

3. ML Kit for Firebaseで動くようにコードを修正

AndroidStudioで、ML Kit for Firebaseのクイックスタートを使って、作成したカスタムモデル(tflite)を利用するようにコードを変更します。

app/java/custommodel/CustomImageClassier.java
    //private static final String LOCAL_QUANT_MODEL_NAME = "mobilenet_quant_v2_1.0_299";
    private static final String LOCAL_QUANT_MODEL_NAME = "automl_model";

    //private static final String LOCAL_QUANT_MODEL_PATH = "mobilenet_quant_v2_1.0_299.tflite";
    private static final String LOCAL_QUANT_MODEL_PATH = "automl_model.tflite";

    //private static final int DIM_IMG_SIZE_X = 299;
    //private static final int DIM_IMG_SIZE_Y = 299;
    private static final int DIM_IMG_SIZE_X = 224;
    private static final int DIM_IMG_SIZE_Y = 224;

次に、app/assets に格納されているlabels.txtを修正
最後に、tflite自体を、app/assetsに格納(automl_model.tflite)

4. アプリを端末へ転送し、動かします。完成。

AndroidStudioで、Runして、自分の端末を指定してアプリを転送します。
とりあえず、9つの分類タスクが動いたことを確認しました。。

結果1 結果2

端末のせいですごくモッサリとした処理だったのですが、ある程度の結果が得られました。

コスト

気になるかかったコストは、AutoML Vision Edgeでのトレーニングコスト、0円(無料枠?)+ Edgeデバイスでの実行はコストがかからないので、無料でした。

https://storage.googleapis.com/permanent_koizumi/20190414_automlvisionedge_cost.jpg

おわりに

躓くことなく、驚くほど簡単な操作(GUI)で、お手軽に、tfliteモデルを作成、(しかもダウンロードも!!)でき、かつEdgeデバイスででも利用できるので、今後活躍の場が増えること間違いありません。

shinkoizumi0033
通信キャリアで、元NWエンジニア。法人向けSI。現在はDX目指し、デジタライゼーション案件を主に対応。サーバサイドのアプリ開発エンジニアでML/DLも勉強中(JDLA E資格2019#2取得済み)。好きなクラウドはGCP。必要に応じフロントエンドも対応。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした