在 Jetson Nano 上为 TensorRT 转换 TF 2.0 保存的模型
Converting TF 2.0 saved model for TensorRT on Jetson Nano
我正在尝试将 TF 2.0 saved_model 转换为 Jetson Nano 上的 tensorRT。
模型保存在TF 2.0.0中。 nano 具有 Jetpack 4.2.2 w/ TensorRT __ 和 Tensorflow 1.14(这是 Jetson 的最新 Tensorflow 版本)。
我一直在遵循 here 的说明,其中描述了如何将 TF 2.0.0 saved_model 转换为 TensorRT。
下面是我的代码:
import tensorflow as tf
from tensorflow.python.compiler.tensorrt import trt_convert as trt
tf.enable_eager_execution()
converter = trt.TrtGraphConverterV2(input_saved_model_dir=input_saved_model_dir)
converter.convert()
converter.save(output_saved_model_dir)
saved_model_loaded = tf.saved_model.load(
output_saved_model_dir, tags=[tag_constants.SERVING])
graph_func = saved_model_loaded.signatures[
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
frozen_func = convert_to_constants.convert_variables_to_constants_v2(
graph_func)
def wrap_func(*args, **kwargs):
# Assumes frozen_func has one output tensor
return frozen_func(*args, **kwargs)[0]
output = wrap_func(input_data).numpy()
好像开始转换成功了。但是,当它到达 convert_to_tensor
行时,我得到一个 KeyError: 'serving_default'
错误。我的完整打印输出在下面找到 here(对 SO 来说太长了),但是 python 回溯出现在下面。我该如何解决这个问题?
谢谢!
打印输出摘要(完整打印输出here):
Traceback (most recent call last):
File "tst.py", line 38, in <module>
convert_savedmodel()
File "tst.py", line 24, in convert_savedmodel
converter.convert()
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/compiler/tensorrt/trt_convert.py", line 956, in convert
func = self._saved_model.signatures[self._input_saved_model_signature_key]
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/saved_model/signature_serialization.py", line 196, in __getitem__
return self._signatures[key]
KeyError: 'serving_default'
我在你的实验中发现了两个问题:
您正在使用 TF-TRT 2.0 API,同时安装了 TF 1.14。那是不支持的。如果您的系统上安装了 TF 1.14,那么您需要使用 TF-TRT 1.x API.
,TF2.0中保存的TF模型与TF1.14不兼容
如果你只能访问 TF1.14,我建议在 TF1.14 中重新生成图形并在应用 TF-TRT 之前将模型保存在那里,然后使用 TF-TRT 1.x API.
我正在尝试将 TF 2.0 saved_model 转换为 Jetson Nano 上的 tensorRT。
模型保存在TF 2.0.0中。 nano 具有 Jetpack 4.2.2 w/ TensorRT __ 和 Tensorflow 1.14(这是 Jetson 的最新 Tensorflow 版本)。
我一直在遵循 here 的说明,其中描述了如何将 TF 2.0.0 saved_model 转换为 TensorRT。
下面是我的代码:
import tensorflow as tf
from tensorflow.python.compiler.tensorrt import trt_convert as trt
tf.enable_eager_execution()
converter = trt.TrtGraphConverterV2(input_saved_model_dir=input_saved_model_dir)
converter.convert()
converter.save(output_saved_model_dir)
saved_model_loaded = tf.saved_model.load(
output_saved_model_dir, tags=[tag_constants.SERVING])
graph_func = saved_model_loaded.signatures[
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
frozen_func = convert_to_constants.convert_variables_to_constants_v2(
graph_func)
def wrap_func(*args, **kwargs):
# Assumes frozen_func has one output tensor
return frozen_func(*args, **kwargs)[0]
output = wrap_func(input_data).numpy()
好像开始转换成功了。但是,当它到达 convert_to_tensor
行时,我得到一个 KeyError: 'serving_default'
错误。我的完整打印输出在下面找到 here(对 SO 来说太长了),但是 python 回溯出现在下面。我该如何解决这个问题?
谢谢!
打印输出摘要(完整打印输出here):
Traceback (most recent call last):
File "tst.py", line 38, in <module>
convert_savedmodel()
File "tst.py", line 24, in convert_savedmodel
converter.convert()
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/compiler/tensorrt/trt_convert.py", line 956, in convert
func = self._saved_model.signatures[self._input_saved_model_signature_key]
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/saved_model/signature_serialization.py", line 196, in __getitem__
return self._signatures[key]
KeyError: 'serving_default'
我在你的实验中发现了两个问题:
您正在使用 TF-TRT 2.0 API,同时安装了 TF 1.14。那是不支持的。如果您的系统上安装了 TF 1.14,那么您需要使用 TF-TRT 1.x API.
- ,TF2.0中保存的TF模型与TF1.14不兼容
如果你只能访问 TF1.14,我建议在 TF1.14 中重新生成图形并在应用 TF-TRT 之前将模型保存在那里,然后使用 TF-TRT 1.x API.