赞
踩
1、AttributeError: type object 'TFLiteConverterV2' has no attribute 'from_frozen_graph' 或者 convertr = tf.lite.TFLiteConverter.from_frozen_graph(in_path, input_arrays=input_tensor_name AttributeError: module 'tensorflow' has no attribute 'lite'
对于tenorflow版本不对,利用aconda新建一个环境,安装:tensorflow 1.13.1(亲测,有效)
- conda install tensorflow=1.13.1
- 或则:
- pip install tensorflow==1.13.1
2、tensorflow.lite.python.convert.ConverterError: TOCO failed. See console for info.
以及后面还跟了一长串:
- 2022-01-05 19:57:38.516029: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.516305: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.516487: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.516752: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.516918: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.517146: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.517302: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.517586: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.517748: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.517955: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.518097: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.518394: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.518559: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.518778: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.518974: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.519626: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.519798: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.520088: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.520229: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.520475: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.520631: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.520882: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.521045: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.521346: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
- 2022-01-05 19:57:38.521524: I tensorflow/lite/toco/import_tensorflow.cc:1373] Unable to determine output type for op: ListDiff
- 2022-01-05 19:57:38.521781: I tensorflow/lite/toco/import_tensorflow.cc:1324] Converting unsupported operation: ListDiff
这个问题困扰了我很久,换了很多版本,我都不能跑通,最后在代码里面加了:
converter.post_training_quantize = True
问题解决!
最后自己转换成功代码为:
- import tensorflow as tf
-
- # 把pb文件路径改成自己的pb文件路径即可
- path="E:/LX/tensorflow/yolov3_coco_v3.pb" #pb文件位置和文件名
-
- # 如果是不知道自己的模型的输入输出节点,建议用tensorboard做可视化查看计算图,计算图里有输入输出的节点名称
- inputs=["input/input_data"]
- #模型文件的输入节点名称
- outputs=["pred_sbbox/concat_2", "pred_mbbox/concat_2", "pred_lbbox/concat_2",
- "pred_multi_scale/concat"] #模型文件的输出节点名称
-
- input_tensor = {inputs[0]:[1,416,416,3]}
- # 转换pb模型到tflite模型
- converter = tf.lite.TFLiteConverter.from_frozen_graph(path, inputs, outputs,input_tensor)
- converter.post_training_quantize = True
- converter.allow_custom_ops=True
- tflite_model = converter.convert()
- # model_tflite.tflite这里改成自己想要保存tflite模型的地址即可
- open("E:/LX/tensorflow/model_tflite.tflite", "wb").write(tflite_model)
3 出现一下提示,不是错误,但是让人看着烦:
- Using TensorFlow backend.
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_qint8 = np.dtype([("qint8", np.int8, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorflow\python\framework\dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_quint8 = np.dtype([("quint8", np.uint8, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorflow\python\framework\dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_qint16 = np.dtype([("qint16", np.int16, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorflow\python\framework\dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_quint16 = np.dtype([("quint16", np.uint16, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorflow\python\framework\dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_qint32 = np.dtype([("qint32", np.int32, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorflow\python\framework\dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- np_resource = np.dtype([("resource", np.ubyte, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorboard\compat\tensorflow_stub\dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_qint8 = np.dtype([("qint8", np.int8, 1)])
- D:\tools\_virtualenv_dir\myproject_2_quchumasaike\env2_py36_quchumasaike\lib\site-packages\tensorboard\compat\tensorflow_stub\dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
- _np_quint8 = np.dtype([("quint8", np.uint8, 1)])
numpy版本不对,重装numpy版本!
- pip uninstall numpy
- pip install numpy==1.16.4
最后稍微提一下,网络上:pb文件转tflite文件代码汇总:
1
- import tensorflow as tf
-
- # 把pb文件路径改成自己的pb文件路径即可
- path="E:/LX/tensorflow/yolov3_coco_v3.pb" #pb文件位置和文件名
-
- # 如果是不知道自己的模型的输入输出节点,建议用tensorboard做可视化查看计算图,计算图里有输入输出的节点名称
- inputs=["input/input_data"]
- #模型文件的输入节点名称
- outputs=["pred_sbbox/concat_2", "pred_mbbox/concat_2", "pred_lbbox/concat_2",
- "pred_multi_scale/concat"] #模型文件的输出节点名称
-
- input_tensor = {inputs[0]:[1,416,416,3]}
- # 转换pb模型到tflite模型
- converter = tf.lite.TFLiteConverter.from_frozen_graph(path, inputs, outputs,input_tensor)
- converter.post_training_quantize = True
- converter.allow_custom_ops=True
- tflite_model = converter.convert()
- # model_tflite.tflite这里改成自己想要保存tflite模型的地址即可
- open("E:/LX/tensorflow/model_tflite.tflite", "wb").write(tflite_model)
2、
- import tensorflow as tf
- import os
- os.environ["CUDA_VISIBLE_DEVICES"] = "0"
- config = tf.ConfigProto()
- config.gpu_options.allow_growth = True
-
- graph_def_file = "E:/LX/tensorflow/yolov3_coco_v3.pb"
-
- input_names = ["input/input_data"]
- output_names = ["pred_sbbox/concat_2", "pred_mbbox/concat_2", "pred_lbbox/concat_2",
- "pred_multi_scale/concat"]
- input_tensor = {input_names[0]:[1,416,416,3]}
-
-
- #uint8 quant
- converter = tf.lite.TFLiteConverter.from_frozen_graph(graph_def_file, input_names, output_names, input_tensor)
- converter.target_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,tf.lite.OpsSet.SELECT_TF_OPS]
- converter.allow_custom_ops=True
-
- converter.inference_type = tf.uint8 #tf.lite.constants.QUANTIZED_UINT8
- input_arrays = converter.get_input_arrays()
- converter.quantized_input_stats = {input_arrays[0]: (127.5, 127.5)} # mean, std_dev
- converter.default_ranges_stats = (0, 255)
-
- tflite_uint8_model = converter.convert()
- open("uint8.tflite", "wb").write(tflite_uint8_model)
3、
- import tensorflow as tf
-
- in_path = r'E:/LX/tensorflow/yolov3_coco_v3.pb'
- out_path = r'E:/LX/tensorflow\output_graph.tflite'
-
- input_tensor_name = ['input/input_data']
- input_tensor_shape = {'input/input_data': [1, 416, 416, 3]}
-
- class_tensor_name = ["pred_sbbox/concat_2", "pred_mbbox/concat_2", "pred_lbbox/concat_2",
- "pred_multi_scale/concat"]
-
- convertr = tf.lite.TFLiteConverter.from_frozen_graph(in_path, input_arrays=input_tensor_name
- , output_arrays=class_tensor_name
- , input_shapes=input_tensor_shape)
-
- # convertr=tf.lite.TFLiteConverter.from_saved_model(saved_model_dir=in_path,input_arrays=[input_tensor_name],output_arrays=[class_tensor_name])
- tflite_model = convertr.convert()
-
- with open(out_path, 'wb') as f:
- f.write(tflite_model)
.h转换为tflite:
- import tensorflow as tf
- tf.compat.v1.disable_eager_execution()
- converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file('F:\yolo\yolo.h5')
- tflite_model = converter.convert()
- open("yolov3.tflite", "wb").write(tflite_model)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。