Keras 深度学习模型到 android
Posted
技术标签:
【中文标题】Keras 深度学习模型到 android【英文标题】:Keras deep learning model to android 【发布时间】:2018-02-03 01:57:37 【问题描述】:我正在为 android 开发一个实时对象分类应用程序。首先,我使用“keras”创建了一个深度学习模型,并且我已经将训练好的模型保存为“model.h5”文件。我想知道如何在 android 中使用该模型进行图像分类。
【问题讨论】:
似乎keras模型不是为支持android而设计的,但我认为你可以将模型文件转换为tensorflow模型文件,然后将tensorflow模型文件部署到android,这个issue可以帮助你做转换和这个tutorial 可以帮助您了解如何将 tensorflow 模型部署到 android 【参考方案1】:您不能将 Keras 直接导出到 Android,但您必须保存模型
将 TensorFlow 配置为您的 Keras 后端。
使用model.save(filepath)
保存模型(你已经这样做了)
然后使用以下解决方案之一加载它:
解决方案 1:在 Tensflow 中导入模型
1- 构建 TensorFlow 模型
从 keras 模型 use this code 构建 tensorflow 模型(链接已更新)2- 构建 Android 应用并调用 Tensorflow。检查这个tutorial 和这个来自谷歌的official demo 以了解如何做到这一点。
解决方案2:在java中导入模型 1- deeplearning4j 一个允许导入 keras 模型的 java 库:tutorial link 2- 在 Android 中使用 deeplearning4j:这很容易,因为您在 Java 世界中。检查this tutorial
【讨论】:
【参考方案2】:如果您想优化分类方法,那么我建议您使用 armnn android 库对您的模型进行推理。
您必须遵循几个步骤。 1. 在 ubuntu 中安装和设置 arm nn 库。您可以从以下网址获取帮助
https://github.com/ARM-software/armnn/blob/branches/armnn_19_08/BuildGuideAndroidNDK.md
-
只需导入您的模型并进行推理。您可以从以下网址获取帮助
https://developer.arm.com/solutions/machine-learning-on-arm/developer-material/how-to-guides/deploying-a-tensorflow-mnist-model-on-arm-nn/deploying-a-tensorflow-mnist-model-on-arm-nn-single-page
编译后你会得到二进制文件,它将接受输入并给你输出
您可以在任何安卓应用程序中运行该二进制文件
是优化方式。
【讨论】:
【参考方案3】:首先您需要将 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 设备的文件。
然后在 Android 上导入 Tensorflow 库并使用 TensorFlowInferenceInterface
运行您的模型。
implementation 'org.tensorflow:tensorflow-android:1.5.0'
你可以在 Github 上查看我的简单异或示例:
https://github.com/OmarAflak/Keras-Android-XOR
【讨论】:
以上是关于Keras 深度学习模型到 android的主要内容,如果未能解决你的问题,请参考以下文章
Keras深度学习实战(28)——利用单词向量构建情感分析模型
用Python/Keras/Flask/Docker在Kubernetes上部署深度学习模型