如何在Android上运行TensorFlow推理例如分类图像?

时间:2017-02-28 23:47:08

标签: android tensorflow raspberry-pi3 android-things

Android Things上是否支持TensorFlow?可以将TensorFlow Android示例移植到Android Things上运行吗?如果是这样,最简单的方法是什么?

1 个答案:

答案 0 :(得分:3)

简短回答:是的,您确实可以在运行Android Things的嵌入式设备上运行TensorFlow,例如Raspberry Pi 3.我们已将TensorFlow图像分类应用程序移植到Android Things。它位于:https://github.com/androidthings/sample-tensorflow-imageclassifier

答案很长:为了运行TensorFlow,您首先需要构建模型图并针对大输入数据集运行训练。完成后,您可以根据经过训练的模型进行推理,以做出明智的决策。培训的第一部分是资源饥渴和密集,通常事先完成,而推理部分相对轻量级。推理部分已移植到运行Android Things的设备上运行。

以下总结了将TensorFlow集成到Android Things项目时需要执行的操作:

  • 首先,将TensorFlow Android推理库文件添加到您的项目中:Tensorflow-Android-Inference-alpha-debug.aar

  • 接下来,在app的build.gradle文件中添加依赖项,如下所示: 编译(名称:' Tensorflow-Android-Inference-alpha-debug',ext:' aar')

要利用TensorFlow Android推理库,您可以实例化org.tensorflow.contrib.android.TensorFlowInferenceInterface实例,以便公开以下方法:

  • initializeTensorFlow:使用模型图作为输入初始化TensorFlow对象
  • fillNodeFloat:将输入数据复制到TensorFlow输入数组
  • runInference:运行推理并将结果保存在TensorFlow输出数组
  • readNodeFloat:从TensorFlow输出数组读取并保存到您自己的数组

查看图像分类器示例的TensorFlowImageClassifier.java中的实现,以了解如何将输入传递给TensorFlow,运行推理,然后从TensorFlow中提取输出标签。例如,在我们的图像分类示例中,我们的应用程序可以在显示狗的图像时检测出哪些品种的狗。

示例中的模型图是使用Google Inception V3 TensorFlow模型构建的,其中包含来自ImageNet的120万张图像的训练集。如果您想构建自己的模型图,请确保在分类器实现中相应地更新模型文件,标签文件和输入/输出名称。

简而言之,使用TensorFlow Android推理库作为gradle依赖关系的上述方法提供了一种快速简便的方法,可将TensorFlow核心功能添加到任何Android项目中,甚至包括具有本机代码和要求的the TensorFlow Android samples等复杂项目NDK集成。这种方法还将主机平台扩展到目前没有像Windows一样的完整Bazel支持的平台。