如何解决:在Android TensorFlow Lite推断上比标准TensorFlow推断慢得多

时间:2019-05-18 15:54:33

标签: android performance tensorflow

我用TensorFlow和Keras开发并训练了卷积神经网络。现在,我想将此模型部署到Android设备上,以便在其中用于实时应用程序。

我发现了将Keras模型部署到Android的两种方法:

  1. 将图形冻结为.pb文件(例如'model.pb'),然后使用 Android设备上的“ TensorFlowInferenceInterface”。
  2. 将冻结的图转换为.tflite模型(例如'model.tflite') 然后在Android设备上使用TesorFlow Lite解释器。

这两种方法都可以在Android设备上使用,并且可以产生预期的结果。然而,令我惊讶的是,使用TensorFlow Lite解释器进行推理的时间至少是使用TensorFlowInterface进行推理的时间(当然是在同一设备上)的两倍。我在各种设备上进行了检查,结果在所有情况下都是相似的。

为了创建tflite模型,我使用以下代码:

tflite_convert --graph_def_file=" + frozen_graph_name + "
--output_file=" + TFLite_file_name + " --inference_type=FLOAT 
--input_type=FLOAT --input_shape=1,768,64,1 
--input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE 
--input_arrays=input_1 --output_arrays=conv2d_10/Sigmoid" \ 

或者,我尝试了以下python代码

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model_file('keras_model.h5')        
tflite_model = converter.convert()
open(TFLite_file_name, "wb").write('model.tflite')

在两种情况下,结果都是相同的-tflite推理比所有Android设备上的TensorFlowInterface推理慢得多。添加优化标志“ OPTIMIZE_FOR_LATENCY”将tflite推理时间增加了两倍。

我检查了TensorFlow Lite quantization fails to improve inference latencyWhy is TensorFlow Lite slower than TensorFlow on desktop?Tensorflow Object Detection inference slow on CPU,但没有收到满意的答案。

根据所有文档,我发现TFLite应该在Android设备上更快。那么,如何在Android上加快TFLite推理速度呢?在我的PC上,TFLite确实更快,这更加令人惊讶。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可能希望使用TFLite Benchmark tool对模型进行概要分析,从而为您提供平均推断时间,甚至是操作级延迟。

如果观察到的延迟明显大于基准测试工具显示的延迟,则推断代码可能效率不高。如果没有,那么某些操作可能会成为瓶颈,您可以为此提出Github问题。