在Tensorflow-lite中输入具有动态尺寸的图像

在Tensorflow-lite中输入具有动态尺寸的图像,第1张

在Tensorflow-lite中输入具有动态尺寸的图像

是的,您 可以 在TF-Lite中 使用动态张量 。您不能直接将形状设置

[None, 128, None,1]
为的原因是因为这样,将来您可以轻松支持更多语言。此外,它充分利用了静态内存分配方案。对于打算用于具有低计算能力的小型设备的框架来说,这是一个明智的设计选择。以下是有关如何动态设置张量大小的步骤

0.冻结

似乎您正在从冻结的GraphDef(即

*.pb
文件)进行转换。假设冻结的模型具有输入形状
[None, 128, None, 1]

1.转换步骤。

在此步骤中,将输入大小设置为模型可以接受的 任何有效 大小。例如:

tflite_convert   --graph_def_file='model.pb'   --output_file='model.tflite'   --input_shapes=1,128,80,1      # <-- here, you set an #     arbitrary valid shape  --input_arrays='input' --output_arrays='Softmax'
2.推论步骤

诀窍是

interpreter::resize_tensor_input(...)
在推理过程中实时使用TF-Lite
API的功能。我将提供它的python实现。Java和C ++实现应相同(因为它们具有相似的API):

from tensorflow.contrib.lite.python import interpreter# Load the *.tflite model and get input detailsmodel = Interpreter(model_path='model.tflite')input_details = model.get_input_details()# Your network currently has an input shape (1, 128, 80 , 1),# but suppose you need the input size to be (2, 128, 200, 1).model.resize_tensor_input(    input_details[0]['index'], (2, 128, 200, 1))model.allocate_tensors()

而已。现在

(2, 128, 200,1)
,只要您的网络体系结构允许输入这样的形状,就可以将该模型用于具有shape的图像。请注意,
model.allocate_tensors()
每次进行这样的重塑时都必须做,所以效率很低。这是
强烈建议 ,以避免在程序中使用此功能太多。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5664515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存