webentwicklung-frage-antwort-db.com.de

Keras Deep Learning-Modell für Android

Ich entwickle eine Echtzeit-Objektklassifizierungs-App für Android. Zuerst habe ich ein tiefes Lernmodell mit "Keras" erstellt, und ich habe bereits trainiert, dass das Modell als "model.h5" -Datei gespeichert wurde. Ich würde gerne wissen, wie ich dieses Modell in Android zur Bildklassifizierung verwenden kann. 

6

Sie können Keras nicht direkt auf Android exportieren, aber Sie müssen das Modell speichern 

  • Konfigurieren Sie Tensflow als Ihr Keras-Backend.

  • Speichern Sie die Modellgewichte mit model.save(filepath) (Sie haben dies bereits getan)

Laden Sie es dann mit einer der folgenden Lösungen:

Lösung 1: Modell in Tensflow importieren

1- Erstellen Sie das Tensorflow-Modell

2- Erstellen Sie eine Android-App und rufen Sie tensflow an. Überprüfen Sie dieses Tutorial und dieses offizielle Demo von Google, um zu erfahren, wie es geht.

Lösung 2: Modell in Java importieren 
1- deeplearning4j eine Java-Bibliothek erlaubt das Importieren von Keras-Modellen: Tutorial-Link
2- Verwenden Sie deeplearning4j in Android: Es ist einfach, da Sie sich in der Java-Welt befinden. check dieses Tutorial

7
Alex

Zuerst müssen Sie das Keras -Modell in ein Tensorflow -Modell exportieren:

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())

Sie müssen lediglich den input_nodes_names und output_node_names Ihres Diagramms kennen. Dadurch wird ein neuer Ordner mit mehreren Dateien erstellt. Unter ihnen beginnt man mit tensorflow_lite_. Dies ist die Datei, die Sie auf Ihr Android-Gerät verschieben müssen.

Importieren Sie dann die Tensorflow-Bibliothek unter Android und führen Sie Ihr Modell mit TensorFlowInferenceInterface aus.

implementation 'org.tensorflow:tensorflow-Android:1.5.0'

Sie können mein einfaches XOR Beispiel auf Github überprüfen:

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

1
Omar Aflak