#はじめに
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)
流れは以下です。
- GCPポータルで、AutoML Vision Edgeモデルの作成
- tfliteファイルを、GCSに保存、ダウンロード
- ML Kit for Firebaseで動くようにコードを修正
- アプリを端末へ転送し、動かします。完成。
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になっていたので、そのままにしています。
2. tfliteファイルを、GCSに保存、ダウンロード
得られた結果は、以下のようなもので過学習の疑いしかありませんが、取り急ぎ、完成したので良しとして、tfliteファイルをエクスポートします。GCS(Google Cloud Storage)にエクスポートされます。
エクスポートされた先には、以下のファイルがありました。
ファイル名 | 内容 |
---|---|
labels.txt | ラベル情報(今回は、9種類のラベルがoutputされていました) |
model.tflite | tfliteファイル |
tflite_metadata.json | メタデータファイル(設定もろもろ) |
このメタ情報を見ることで、イメージの縦横サイズや、input type(quantized_uint8)であるとかが分かります。
{
"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)を利用するようにコードを変更します。
//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デバイスでの実行はコストがかからないので、無料でした。
##おわりに
躓くことなく、驚くほど簡単な操作(GUI)で、お手軽に、tfliteモデルを作成、(しかもダウンロードも!!)でき、かつEdgeデバイスででも利用できるので、今後活躍の場が増えること間違いありません。