如何在 Python 中导入 tensorflow lite 解释器?
Posted
技术标签:
【中文标题】如何在 Python 中导入 tensorflow lite 解释器?【英文标题】:How to import the tensorflow lite interpreter in Python? 【发布时间】:2018-11-26 20:42:30 【问题描述】:我正在 Raspberry Pi 3b 上使用 TF lite 开发一个 Tensorflow 嵌入式应用程序,运行 Raspbian Stretch。我已将图形转换为 flatbuffer (lite) 格式,并在 Pi 上本地构建了 TFLite 静态库。到目前为止,一切都很好。但是该应用程序是 Python 并且似乎没有可用的 Python 绑定。 Tensorflow Lite 开发指南 (https://www.tensorflow.org/mobile/tflite/devguide) 指出“有 Python 绑定和演示应用程序的计划。”然而,/tensorflow/contrib/lite/python/interpreter_wrapper 中有包含所有需要的解释器方法的包装器代码。然而,从 Python 调用它却让我难以理解。
我已生成 SWIG 包装器,但构建步骤失败并出现许多错误。没有描述interpreter_wrapper 状态的readme.md。所以,我想知道包装器是否对其他人有用,我应该坚持下去,还是它从根本上被破坏了,我应该去别处寻找(PyTorch)?有人找到 Pi3 的 TFLite Python 绑定的路径吗?
【问题讨论】:
【参考方案1】:我能够在运行 Ubuntu 和 ARM64 的 x86 上编写 python 脚本来进行分类1、对象检测(使用 SSD MobilenetV1,2 测试)2 和图像语义分割3主板运行 Debian。
如何为 TF Lite 代码构建 Python 绑定:使用最近的 TensorFlow 主分支构建 pip 并安装它(是的,那些绑定在 TF 1.8 中。但是,我不知道为什么没有安装它们)。有关如何构建和安装 TensorFlow pip 包的信息,请参阅 4。【讨论】:
我尝试在 Raspbian 上的 ci.tensorflow.org/view/Nightly/job/nightly-pi-python3 的夜间版本中安装 TF,但收到错误消息“tensorlflow... is not a supported wheel on this platform”。鉴于 Google 对 RPi 的测试已在 64 位 Ubuntu (github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/…) 和其他关于 Tensorflow 未在 32 位目标上运行 (***.com/questions/38646036/…) 的 cmets 上完成,我得出结论,TF 无法在 32 位上运行目标。 我不认为这是 64 位与 32 位的问题。我猜它类似于 Python 3.5,当前 Raspbian 中使用的一种,以及 3.4 pip 包。也许你可以试试nightly Python 2.7 pip package。 你是对的关于 64 位。看来 PyPi 链接现在已经更新,我可以在普通的 32 位 RPi3 上使用 pip 安装所有 TensorFlow。问题解决了。 @freedom 您能否提供使用相机馈送而不是单个图像进行对象检测的示例代码?我正在尝试使用它,但我收到 ValueError: Cannot set tensor: Dimension mismatch【参考方案2】:关于在 Python 中使用 TensorFlow Lite 解释器,以下示例复制自 documentation。该代码在TensorFlow GitHub 的master
分支上可用。
使用模型文件中的解释器
以下示例展示了在提供 TensorFlow Lite FlatBuffer 文件时如何使用 TensorFlow Lite Python 解释器。该示例还演示了如何对随机输入数据进行推理。在 Python 终端中运行 help(tf.contrib.lite.Interpreter)
以获取有关解释器的详细文档。
import numpy as np
import tensorflow as tf
# Load TFLite model and allocate tensors.
interpreter = tf.contrib.lite.Interpreter(model_path="converted_model.tflite")
interpreter.allocate_tensors()
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Test model on random input data.
input_shape = input_details[0]['shape']
input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
print(output_data)
【讨论】:
@Napu,感谢您的意见。问题是在 Raspbian 中没有定义 Tensorflow 绑定。没有这些绑定,就不可能“将 tensorflow 导入为 tf”。 解释器已从 contrib 模块直接移至 tensorflow(tf.lite.Interpreter
而不是 tf.contrib.lite.Interpreter
)。该文档现在位于github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/…以上是关于如何在 Python 中导入 tensorflow lite 解释器?的主要内容,如果未能解决你的问题,请参考以下文章
在 python 3.4 中导入 tensorflow 时出错“无法加载本机 TensorFlow 运行时”
TensorFlow 在 Python CLI 和 IPython CLI 中导入,但不在 IPython QtConsole 中