通过量化将Mobilenet SSD转换为TensorFlow Lite



我想我的目标很简单。我想将预先训练的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 tensorflow/lite/toco/import_tensorflow.cc:659]正在转换不支持的操作:TensorArrayWriteV32020-04-29 13:23:58.432342:I tensorflow/lite/toco/import_tensorflow.cc:659]正在转换不支持的操作:TensorArrayWriteV32020-04-29 13:23:58.782402:I tensorflow/lite/toco/graph_transformations/graph_transformations.cc:39]删除未使用的操作之前:4058个运算符,6882个数组(0个量化(2020-04-29 13:23:59.302999:I tensorflow/lite/toco/graph_transformations/graph_transformations.cc:39]删除未使用的操作后,通过1:4005个运算符,6778个数组(0个量化(2020-04-29 13:23:59.925648:I tensorflow/lite/toco/graph_transformations/graph_transformations.cc:39]在一般图转换之前:4005个运算符,6778个数组(0个量化(2020-04-29 13:24:00.227644:F。\tensorflow/lite/toco/toco_tooling.h:38]检查失败:s.ok((发现StridedSlice是Switch的非选定输出,但仅支持Merge。一般不支持像Switch和Merge这样的控制流操作。我们正在努力解决这个问题,请参阅Github问题https://github.com/tensorflow/tensorflow/issues/28485.Python致命错误:中止

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

我的问题可以总结如下:

  1. 如何使用类似于上述代码块的python代码,通过量化和优化将预先训练的mobilenetv2(或v1(ssd模型转换为TFLite
  2. 如何将预先训练的mobilenetv2(或v1(ssd模型转换为TFLite,并使用命令行进行量化和优化(对象检测API和TFLite API(如果有((

此模型中似乎存在不受支持的操作。

你可以在这里找到经过预训练的"COCO SSD MobileNet v1"tflite型号

最新更新