Android用のリアルタイムオブジェクト分類アプリを開発しています。最初に、「keras」を使用して深層学習モデルを作成し、「model.h5」ファイルとして保存されたモデルを既にトレーニングしました。画像分類にAndroidでそのモデルを使用する方法を知りたい。
Kerasを直接Androidにエクスポートすることはできませんが、モデルを保存する必要があります
TensflowをKerasバックエンドとして設定します。
model.save(filepath)
を使用してモデルワイトを保存します(既に実行済みです)
次に、次のいずれかの解決策をロードします。
解決策1:Tensflowでモデルをインポートする
1- Tensorflowモデルの構築
2-ビルドAndroidアプリを呼び出してtensflowを呼び出します。これを確認してください チュートリアル およびこの 公式デモ 方法を学ぶ.
解決策2:Javaでモデルをインポートする
1- deeplearning4j a Javaライブラリは、kerasモデルのインポートを許可します: チュートリアルリンク
2- Androidでdeeplearning4jを使用する:Java world。check このチュートリアル
まず、KerasモデルをTensorflowモデルにエクスポートする必要があります:
def export_model_for_mobile(model_name, input_node_names, output_node_name):
tf.train.write_graph(K.get_session().graph_def, 'out', \
model_name + '_graph.pbtxt')
tf.train.Saver().save(K.get_session(), 'out/' + model_name + '.chkp')
freeze_graph.freeze_graph('out/' + model_name + '_graph.pbtxt', None, \
False, 'out/' + model_name + '.chkp', output_node_name, \
"save/restore_all", "save/Const:0", \
'out/frozen_' + model_name + '.pb', True, "")
input_graph_def = tf.GraphDef()
with tf.gfile.Open('out/frozen_' + model_name + '.pb', "rb") as f:
input_graph_def.ParseFromString(f.read())
output_graph_def = optimize_for_inference_lib.optimize_for_inference(
input_graph_def, input_node_names, [output_node_name],
tf.float32.as_datatype_enum)
with tf.gfile.FastGFile('out/tensorflow_lite_' + model_name + '.pb', "wb") as f:
f.write(output_graph_def.SerializeToString())
必要なのはinput_nodes_names
およびoutput_node_names
グラフの。これにより、いくつかのファイルを含む新しいフォルダーが作成されます。その中で、tensorflow_lite_
。これは、Androidデバイスに移動するファイルです。
次に、TensorflowライブラリをAndroidでインポートし、TensorFlowInferenceInterface
を使用してモデルを実行します。
implementation 'org.tensorflow:tensorflow-Android:1.5.0'
Githubで私のシンプルなXORの例を確認できます。