将saved_model.pb 转换为model.tflite [英] Converting saved_model.pb to model.tflite
本文介绍了将saved_model.pb 转换为model.tflite的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
TensorFlow 版本:2.2.0
Tensorflow Version: 2.2.0
操作系统:Windows 10
OS: Windows 10
我正在尝试将 saved_model.pb 转换为 tflite 文件.
I am trying to convert a saved_model.pb to a tflite file.
这是我正在运行的代码:
Here is the code I am running:
import tensorflow as tf
# Convert
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir='C:\Data\TFOD\models\ssd_mobilenet_v2_quantized')
tflite_model = converter.convert()
fo = open("model.tflite", "wb")
fo.write(tflite_model)
fo.close
此代码在转换时出错:
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\convert.py", line 196, in toco_convert_protos
model_str = wrap_toco.wrapped_toco_convert(model_flags_str,
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\wrap_toco.py", line 32, in wrapped_toco_convert
return _pywrap_toco_api.TocoConvert(
Exception: <unknown>:0: error: loc("Func/StatefulPartitionedCall/input/_0"): requires all operands and results to have compatible element types
<unknown>:0: note: loc("Func/StatefulPartitionedCall/input/_0"): see current operation: %1 = "tf.Identity"(%arg0) {device = ""} : (tensor<1x?x?x3x!tf.quint8>) -> tensor<1x?x?x3xui8>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:/Data/TFOD/convert.py", line 13, in <module>
tflite_model = converter.convert()
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\lite.py", line 1076, in convert
return super(TFLiteConverterV2, self).convert()
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\lite.py", line 899, in convert
return super(TFLiteFrozenGraphConverterV2,
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\lite.py", line 629, in convert
result = _toco_convert_impl(
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\convert.py", line 569, in toco_convert_impl
data = toco_convert_protos(
File "C:\Users\Mr.Ace\AppData\Roaming\Python\Python38\site-packages\tensorflow\lite\python\convert.py", line 202, in toco_convert_protos
raise ConverterError(str(e))
tensorflow.lite.python.convert.ConverterError: <unknown>:0: error: loc("Func/StatefulPartitionedCall/input/_0"): requires all operands and results to have compatible element types
<unknown>:0: note: loc("Func/StatefulPartitionedCall/input/_0"): see current operation: %1 = "tf.Identity"(%arg0) {device = ""} : (tensor<1x?x?x3x!tf.quint8>) -> tensor<1x?x?x3xui8>
推荐答案
好的,我终于解决了!
我所做的是使用 tf-nightly 并使用以下 Python 脚本:
What I did is use tf-nightly and use the following Python Script:
import tensorflow as tf
saved_model_dir = "C:/Data/TFOD/models/ssd_mobilenet_v2_quantized/tflite"
converter = tf.lite.TFLiteConverter.from_saved_model(
saved_model_dir, signature_keys=['serving_default'])
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.experimental_new_converter = True
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
tflite_model = converter.convert()
fo = open(
"C:/Data/TFOD/models/ssd_mobilenet_v2_quantized/tflite/model.tflite", "wb")
fo.write(tflite_model)
fo.close
这解决了问题,您可以转换为 .tflite
This fixes the problem and you can convert to .tflite
这篇关于将saved_model.pb 转换为model.tflite的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文