2019年1月6日日曜日

ML Kit Custom Model その5 : Inception_V1_quant を使う

前回の 「ML Kit Custom Model その4 : Mobilenet_V2_1.0_224_quant を使う」 と同じように今回は Inception_V1_quant モデルを使ってみます。



Inception_V1_quant

まずは https://www.tensorflow.org/lite/models からモデルをダウンロードしましょう。



中には tflite ファイルの他に checkpoint(ckpt.*)も入っています。
$ ls inception_v1_224_quant_20181026 graph.pbtxt inception_v1_224_quant.ckpt.data-00000-of-00001 inception_v1_224_quant.ckpt.index inception_v1_224_quant.ckpt.meta inception_v1_224_quant.tflite inception_v1_224_quant_frozen.pb inception_v1_224_quant_info.txt
inception_v1_224_quant.tflite も入力の shape が [ 1, 224, 224, 3]、出力の shape が [ 1, 1001] です。
使い方は その2, その3 と同じなので割愛します。


左: Mobilenet V1, 右: Mobilenet V2

Inception V1


Inception V1 の確率は Mobilenet V1 と V2 の間くらい

左: Mobilenet V1, 右: V2

Inception V1


Inception V1 と Mobilenet V2ではミーアキャットと認識されているが、Inception V1 の確率は Mobilenet V2 より低い

左: Mobilenet V1, 右: V2

Inception V1


Inception V1 も Mobilenet V2と同じく tusker と認識されているが、Inception V1 の確率は Mobilenet V2 より低い



ML Kit Custom Model その4 : Mobilenet_V2_1.0_224_quant を使う

「ML Kit Custom Model その1 : TensorFlow Lite Hosted Models を利用する」
「ML Kit Custom Model その2 : Mobilenet_V1_1.0_224_quant を LocalModel として使う」
「ML Kit Custom Model その3 : Mobilenet_V1_1.0_224_quant を CloudModel として使う」
で Mobilenet_V1_1.0_224_quant.tflite を使いました。

ここでは Mobilenet V2 のモデルを使ってみます。



Mobilenet_V2_1.0_224_quant

まずは https://www.tensorflow.org/lite/models からモデルをダウンロードしましょう。



中には tflite ファイルの他に checkpoint(ckpt.*)も入っています。
$ ls mobilenet_v2_1.0_224_quant mobilenet_v2_1.0_224_quant.ckpt.data-00000-of-00001 mobilenet_v2_1.0_224_quant.ckpt.index mobilenet_v2_1.0_224_quant.ckpt.meta mobilenet_v2_1.0_224_quant.tflite mobilenet_v2_1.0_224_quant_eval.pbtxt mobilenet_v2_1.0_224_quant_frozen.pb mobilenet_v2_1.0_224_quant_info.txt
使い方は その2, その3 と同じなので割愛します。


左: V1, 右: V2


サイなのだがトリケラトプスと出るのは変わらず、確率は上がっている

左: V1, 右: V2


V2ではミーアキャットになった(猫はないのか?)

左: V1, 右: V2


V2 だと tusker と認識され確率も上がっている



2019年1月4日金曜日

ML Kit Custom Model その3 : Mobilenet_V1_1.0_224_quant を CloudModel として使う

前回の「ML Kit Custom Model その2 : Mobilenet_V1_1.0_224_quant を LocalModel として使う」では、assets に tflite ファイルをバンドルして LocalModel として利用しました。

今回は firebase 上に tflite ファイルをホストして CloudModel として利用します。

まず firebase console から tflite ファイルをアップロードします。



モデル名は mobilenet_v1_quant にしました。この名前はアプリ側からモデルを指定するときに使います。


firebase にホストしてある model を使うには FirebaseCloudModelSource を用意します。 FirebaseCloudModelSource.Builder() の引数には firebase console で設定したモデル名(ここでは "mobilenet_v1_quant")を指定します。

モデルが更新されたときにダウンロードするようにするには enableModelUpdates() で true を指定します。

setInitialDownloadConditions() で初回ダウンロード時の、setUpdatesDownloadConditions() で更新モデルダウンロード時の設定をすることができます。設定の FirebaseModelDownloadConditions はFirebaseModelDownloadConditions.Builder を使って生成します。設定できる項目は requireCharging(), requireDeviceIdle(), requireWifi() です。

作成した FirebaseCloudModelSource は FirebaseModelManager.registerCloudModelSource() で登録しておきます。

FirebaseModelOptions.Builder の setCloudModelName() には FirebaseCloudModelSource.Builder() の引数に指定した名前(ここでは "mobilenet_v1_quant")を渡します。

最後に FirebaseModelOptions を渡して FirebaseModelInterpreter のインスタンスを取得します。

private val interpreter: FirebaseModelInterpreter by lazy { val cloudModelSource = FirebaseCloudModelSource.Builder("mobilenet_v1_quant") .enableModelUpdates(true) .setUpdatesDownloadConditions( FirebaseModelDownloadConditions.Builder() .requireWifi() .build() ) .build() FirebaseModelManager.getInstance().registerCloudModelSource(cloudModelSource) val modelOptions = FirebaseModelOptions.Builder() .setCloudModelName("mobilenet_v1_quant") .build() FirebaseModelInterpreter.getInstance(modelOptions)!! }

interpreter を使って推論を行う部分は前回の「ML Kit Custom Model その2 : Mobilenet_V1_1.0_224_quant を LocalModel として使う」と同じです。