将Mobilenet SSD转换为具有量化功能的TensorFlow Lite。

问题描述 投票:0回答:1

我的目标很简单,我想。我想把一个预先训练好的mobilenetv2(或v1)ssd模型转换为TFLite,并进行量化和优化。这里. 但即使没有任何量化,我在将模型转换为TFLite模型时也出现了错误。

model = tf.saved_model.load(detection_model_dir)
concrete_func = model.signatures[tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
concrete_func.inputs[0].set_shape([1,300,300,3])
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
#converter = tf.compat.v1.lite.TFLiteConverter.from_saved_model(detection_model_dir, input_shapes={"image_tensor" : [1,300,300,3]})
tflite_model = converter.convert() 

错误信息。

2020-04-29 13:23:58.432192: I tensorflowlitetocoimport_tensorflow.cc:659] 。转换不支持的操作。TensorArrayWriteV3 2020-04-29 13:23:58.432342: I tensorflowlitetocoimport_tensorflow.cc:659] 。转换不支持的操作。TensorArrayWriteV3 2020-04-29 13:23:58.782402: I tensorflowlitetocograph_transformationsgraph_transformations.cc:39] 。删除未使用的操作符之前。4058个运算符,6882个数组(0个量化)2020-04-29 13:23:59.302999: I tensorflowlitetocograph_transformationsgraph_transformations.cc:39] 。删除未使用的操作通证1后:4005个操作符,6778个数组(0个量化)2020-04-29 13:23:59.925648: I tensorflowlitetocograph_transformationsgraph_transformations.cc:39] 。在一般图变换之前。4005个运算符,6778个数组(0个量化)2020-04-29 13:24:00.227644: F .\tensorflowlitetocotoco_tooling.h:38] 。检查失败:s.ok() 发现StridedSlice为Switch的非选择输出,但只支持Merge。一般不支持Switch和Merge这样的控制流操作。我们正在努力解决这个问题,请看Github问题,地址是 https:/github.comtensorflowtensorflowissues28485。. Fatal Python 错误。终止

我花了好几天时间将一个预先训练好的mobilenetv2 ssd模型转换为TFLite。我知道命令行(export_tflite_ssd_graph.py)的解决方案可以用于转换,但不能用于定性部分。我也想写python代码来做同样的事情并优化(压缩、量化)模型。我一直做不到。有什么建议吗?

我的问题可以总结为以下几点。

  1. 如何使用类似上述代码块的python代码,将一个预先训练好的mobilenetv2(或v1)ssd模型转换为TFLite,并进行量化和优化。
  2. 如何通过命令行(对象检测API和TFLite API(如果有的话))将预先训练好的mobilenetv2(或v1)ssd模型转换为带量化和优化的TFLite。
tensorflow object-detection tensorflow-lite object-detection-api mobilenet
1个回答
0
投票

似乎在这个模型中有不支持的操作。

你可以找到预先训练好的 "COCO SSD MobileNet v1 "tflite模型。 此处

© www.soinside.com 2019 - 2024. All rights reserved.