【发布时间】:2023-03-18 07:09:01
【问题描述】:
我一直在努力追随, https://www.tensorflow.org/lite/examples/object_detection/overview#model_customization 整天将任何 tensorflow Zoo 模型转换为 TensorFlow Lite 模型以便在 Android 上运行,但没有成功。
我从这里下载了几个模型, https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md (仅供参考,Chrome不会因为不是https而让您失望,我必须右键单击检查链接并单击检查器中的链接)
我有剧本,
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_frozen_graph(
graph_def_file='frozen_graph.pb',
input_shapes = {'normalized_input_image_tensor':[1,300,300,3]},
input_arrays = ['normalized_input_image_tensor'],
output_arrays = ['TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1', 'TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3']
)
tflite_model = converter.convert()
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
但给出错误, ValueError:找到了无效的张量“normalized_input_image_tensor”
线条,
input_shapes = {'normalized_input_image_tensor':[1,300,300,3]}, input_arrays = ['normalized_input_image_tensor'], output_arrays = ['TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1', 'TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3']
一定是错的,需要不同的形状,但是我如何为每个动物园模型得到这个, 还是我需要先运行一些预转换代码?
运行下面我得到的“代码片段”,
--------------------------------------------------
Frozen model layers:
name: "add/y"
op: "Const"
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "value"
value {
tensor {
dtype: DT_FLOAT
tensor_shape {
}
float_val: 1.0
}
}
}
Input layer: add/y
Output layer: Postprocessor/BatchMultiClassNonMaxSuppression/map/while/NextIteration_1
--------------------------------------------------
但我看不出这将如何映射到 input_shape 或帮助转换??
甚至可以将诸如faster_rcnn_inception_v2_coco之类的模型转换为tflite吗?我在某处读到仅支持 SSD 型号?
所以我尝试使用下面建议的代码将 faster_rcnn_inception_v2_coco 转换为 tflite,对话代码在 TF1 中不起作用,但在 TF2 中起作用,但是当我尝试在 TFlite 示例应用程序中使用 tflite 文件时,我得到了这个错误,
2021-12-14 13:23:01.979 24542-24542/org.tensorflow.lite.examples.detection E/tflite: Missing 'operators' section in subgraph.
2021-12-14 13:23:01.984 24542-24542/org.tensorflow.lite.examples.detection E/TaskJniUtils: Error getting native address of native library: task_vision_jni
java.lang.RuntimeException: Error occurred when initializing ObjectDetector: Could not build model from the provided pre-loaded flatbuffer: Missing 'operators' section in subgraph.
at org.tensorflow.lite.task.vision.detector.ObjectDetector.initJniWithByteBuffer(Native Method)
at org.tensorflow.lite.task.vision.detector.ObjectDetector.access$100(ObjectDetector.java:88)
at org.tensorflow.lite.task.vision.detector.ObjectDetector$3.createHandle(ObjectDetector.java:223)
at org.tensorflow.lite.task.core.TaskJniUtils.createHandleFromLibrary(TaskJniUtils.java:91)
at org.tensorflow.lite.task.vision.detector.ObjectDetector.createFromBufferAndOptions(ObjectDetector.java:219)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.<init>(TFLiteObjectDetectionAPIModel.java:88)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.create(TFLiteObjectDetectionAPIModel.java:82)
at org.tensorflow.lite.examples.detection.DetectorActivity.onPreviewSizeChosen(DetectorActivity.java:99)
at org.tensorflow.lite.examples.detection.CameraActivity$7.onPreviewSizeChosen(CameraActivity.java:446)
【问题讨论】:
-
您确定输入的张量名称正确吗?至少有一个模型输入张量被命名为
image_tensor。 -
不,它们不正确,我如何找到正确的名称?每个动物园模型
-
例如,您可以使用 Netron (github.com/lutzroeder/netron) 来可视化 protobuffs。找到输入和输出张量,就可以看到它们的名字了。
-
是否有简单的 python 代码来获取 input_shape、input_array、output_array,或者这些是否记录在某个地方用于动物园模型?
-
你使用 tensorflow 1 有什么原因吗?
标签: python android tensorflow tensorflow-lite