当前位置: 首页 > 知识库问答 >
问题:

如何修复:AndroidTensorFlow Lite推理比标准TensorFlow推理慢得多

裴卓君
2023-03-14

我用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量化未能提高推理延迟,为什么TensorFlow Lite在桌面上比TensorFlow慢?,CPU上的Tensorflow对象检测推理很慢,但没有收到任何满意的答案。

根据我发现的所有文档,TFLite在Android设备上应该要快得多。那么,我能做些什么来加速我在Android上的TFLite推理呢?在我的电脑上,TFLite确实更快,这更令人惊讶。

非常感谢您的帮助!

共有1个答案

查宜修
2023-03-14

您可能希望使用TFLite Benchmark工具分析您的模型,该工具为您提供平均推理时间

如果您观察到的延迟明显大于基准工具显示的延迟,那么您的推理代码可能效率低下。如果不是,那么某些操作可能是瓶颈,您可以为此提交Github问题。

 类似资料:
  • 我试图量化我的模型(CNN),以便将其转换为量化模型。tflite模型。我将在以下位置阅读教程:https://github.com/tensorflow/tensorflow/tree/r1.13/tensorflow/contrib/quantize#quantization-意识训练 首先,我通过调用以下命令在我的图中引入假量化节点: 但是,当最后我尝试调用此函数以确保图形以正确的格式导出量

  • 许多用户认为这是切换到 Pytorch 的原因,但我还没有找到牺牲最重要的实际质量、速度来换取急切执行的理由/解释。 下面是代码基准测试性能,TF1与TF2-TF1的运行速度从47%到276%不等。 我的问题是:在图形或硬件级别,是什么导致了如此显着的减速? 寻找详细的答案-我已经熟悉广泛的概念。相关Git 规格:CUDA 10.0.130、cuDNN 7.4.2、Python 3.7.4、Win

  • 怎么修这个东西?我需要“Karetski”用户名而不是“Pavelmetsko”

  • 我目前正在将一个模型从TensorFlow转换为TensorFlow Lite。通过首先创建一个检查点和一个保存的失重图(.pbtxt),然后使用freeze\u graph()函数将模型冻结为具有图权重的.pb,最后在冻结的模型文件上运行tflite\u convert命令,我将模型从常规TF1.x会话转换为.tflite文件。在此过程中没有量化-保留了浮动。在那之后,我把模型放进Android

  • 将docker图像推送到注册表时,我收到以下消息: 唯一的方法是通过web界面在docker repository中创建标记,然后docker push工作。 是否有创建docker push的命令行?

  • 我正在尝试让TensorFlow Lite示例在带有ARM Cortex-A72处理器的机器上运行。不幸的是,由于缺乏关于如何使用C API的示例,我无法部署测试模型。我将努力解释我迄今为止所取得的成就。 创建tflite模型 我创建了一个简单的线性回归模型并对其进行了转换,它应该近似于函数。我从一些教程中得到了这个代码片段,但是我再也找不到了。 这将创建一个名为的二进制文件,我应该能够加载它。