web-dev-qa-db-ja.com

Keras深層学習モデルandroid

Android用のリアルタイムオブジェクト分類アプリを開発しています。最初に、「keras」を使用して深層学習モデルを作成し、「model.h5」ファイルとして保存されたモデルを既にトレーニングしました。画像分類にAndroidでそのモデルを使用する方法を知りたい。

9

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 このチュートリアル

8
Alex

まず、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の例を確認できます。

https://github.com/OmarAflak/Keras-Android-XOR

2
Omar Aflak