Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TF 2目标检测模型到TensorRT的转换_Python_Python 3.x_Tensorflow_Tensorrt - Fatal编程技术网

Python TF 2目标检测模型到TensorRT的转换

Python TF 2目标检测模型到TensorRT的转换,python,python-3.x,tensorflow,tensorrt,Python,Python 3.x,Tensorflow,Tensorrt,我正在尝试将新Tensorflow 2对象检测API的EfficientSet D1 640x640转换为TensorRT(TRT)模型,以便在Jetson AGX板上运行 我正在运行以下代码: 将tensorflow导入为tf 将numpy作为np导入 从tensorflow.python.compiler.tensorrt导入trt\u转换为trt 输入\保存的\模型\目录='。/效率设置\ d1 \ coco17 \ tpu-32/保存的\模型/' 输出\u已保存\u模型\u目录='。/m

我正在尝试将新Tensorflow 2对象检测API的EfficientSet D1 640x640转换为TensorRT(TRT)模型,以便在Jetson AGX板上运行

我正在运行以下代码:

将tensorflow导入为tf
将numpy作为np导入
从tensorflow.python.compiler.tensorrt导入trt\u转换为trt
输入\保存的\模型\目录='。/效率设置\ d1 \ coco17 \ tpu-32/保存的\模型/'
输出\u已保存\u模型\u目录='。/models/tensorRT/'
num_runs=2
转换参数=trt.DEFAULT\u trt\u转换参数
转换参数=转换参数。替换(最大工作空间大小字节=(1174 func(*映射(ops.convert_to_tensor,inp))
1175
1176如果自己需要trt配置文件:
/projects/sebscheefer/venv/tf22gpu\u copy/lib/python3.6/site-packages/tensorflow/python/eager/function.py in uuuuuu调用(self,*args,**kwargs)
1603 TypeError:用于无效的位置/关键字参数组合。
1604     """
->1605返回自我。调用impl(args,kwargs)
1606
1607 def_call_impl(self、args、kwargs、cancellation_manager=None):
/projects/sebschaefer/venv/tf22gpu_copy/lib/python3.6/site-packages/tensorflow/python/eager/function.py in_call_impl(self、args、kwargs、cancellation_manager)
1643 raise TypeError(“关键字参数{}未知。应为{}.”格式(
1644列表(kwargs.keys()),列表(self.\u arg\u关键字)))
->1645返回自。\呼叫\u平面(参数、自捕获\u输入、取消\u管理器)
1646
1647 def_filtered_调用(self、args、kwargs):
/projects/sebscheefer/venv/tf22gpu\u copy/lib/python3.6/site-packages/tensorflow/python/eager/function.py在调用平面中(self、args、捕获的输入、取消管理器)
1744#没有磁带在观看;请跳到运行该函数。
1745返回self.\u构建\u调用\u输出(self.\u推断\u函数.call(
->1746 ctx,参数,取消管理器=取消管理器)
1747向前\向后=自身。\选择\向前\和\向后\功能(
1748 args,
/调用中的projects/sebscheefer/venv/tf22gpu_copy/lib/python3.6/site-packages/tensorflow/python/eager/function.py(self、ctx、args、cancellation_manager)
596输入=args,
597属性=属性,
-->598 ctx=ctx)
599其他:
600输出=execute.execute_与_取消(
/快速执行中的projects/sebscheefer/venv/tf22gpu\u copy/lib/python3.6/site-packages/tensorflow/python/eager/execute.py(op\u name、num\u output、input、attrs、ctx、name)
58 ctx.确保_已初始化()
59张量=pywrap\u tfe.tfe\u Py\u Execute(ctx.\u句柄、设备名称、操作名称、,
--->60个输入、属性、数量输出)
61除堆芯外,其他状态除外,如e:
62如果名称不是无:
InvalidArgumentError:发现2个根错误。
(0)无效参数:输入形状与存储在图形中的输入部分形状不匹配,对于TRTEngineOp_5:[640640640,3]!=[1,?,3]]
[[节点TRTEngineOp_5(定义于:2)]]
[[StatefulPartitionedCall/Postprocessor/batchmulticlassnomaxsuppression/TRTEngineOp_43/_240]]
(1) 无效参数:输入形状与存储在图形中的输入部分形状不匹配,对于TRTEngineOp_5:[640640640,3]!=[1,?,3]]
[[节点TRTEngineOp_5(定义于:2)]]
0成功的操作。
忽略0个派生错误。[Op:_推断\u修剪\u 177388]
函数调用堆栈:
修剪->修剪
错误消息说它需要输入形状为[1,,?,3],但get为[640640,3]。但我正在传递大小数组(1640640,3),该数组应该是正确的。但出于某种原因,它似乎不起作用

我使用的模型是来自Tensorflow 2.0对象检测Api()的预训练模型


提前感谢您的帮助!

您应该用
(,)


另外,我不确定TensorRT是否支持uint8,可能只是int8。

您应该用
(,)


另外,我不确定TensorRT是否支持uint8,可能只是int8。

尝试使用此代码,希望它能帮助:

from tensorflow.python.compiler.tensorrt import trt_convert as trt
import numpy as np

input_saved_model_dir = "your-model-dir"
output_saved_model_dir = "your-output-dir"

conversion_params = trt.DEFAULT_TRT_CONVERSION_PARAMS
conversion_params = conversion_params._replace(
    max_workspace_size_bytes=(1<<32))
conversion_params = conversion_params._replace(precision_mode="FP16")
conversion_params = conversion_params._replace(
    maximum_cached_engines=100)

converter = trt.TrtGraphConverterV2(
    input_saved_model_dir=input_saved_model_dir,
    conversion_params=conversion_params)
converter.convert()

def my_input_fn():
  Inp1 = np.random.normal(size=(1, 640, 640, 3)).astype(np.uint8)
  yield (Inp1,)

converter.build(input_fn=my_input_fn)
converter.save(output_saved_model_dir)
从tensorflow.python.compiler.tensorrt导入trt\u转换为trt
将numpy作为np导入
输入\u保存的\u模型\u目录=“您的模型目录”
output\u saved\u model\u dir=“您的output dir”
转换参数=trt.DEFAULT\u trt\u转换参数
转换参数=转换参数。\替换(

max_workspace_size_bytes=(1尝试使用此代码,希望它能帮助:

from tensorflow.python.compiler.tensorrt import trt_convert as trt
import numpy as np

input_saved_model_dir = "your-model-dir"
output_saved_model_dir = "your-output-dir"

conversion_params = trt.DEFAULT_TRT_CONVERSION_PARAMS
conversion_params = conversion_params._replace(
    max_workspace_size_bytes=(1<<32))
conversion_params = conversion_params._replace(precision_mode="FP16")
conversion_params = conversion_params._replace(
    maximum_cached_engines=100)

converter = trt.TrtGraphConverterV2(
    input_saved_model_dir=input_saved_model_dir,
    conversion_params=conversion_params)
converter.convert()

def my_input_fn():
  Inp1 = np.random.normal(size=(1, 640, 640, 3)).astype(np.uint8)
  yield (Inp1,)

converter.build(input_fn=my_input_fn)
converter.save(output_saved_model_dir)
从tensorflow.python.compiler.tensorrt导入trt\u转换为trt
将numpy作为np导入
输入\u保存的\u模型\u目录=“您的模型目录”
output\u saved\u model\u dir=“您的output dir”
转换参数=trt.DEFAULT\u trt\u转换参数
转换参数=转换参数。\替换(

max\u workspace\u size\u bytes=(1我认为fp16精度不需要校准?如果删除这行
converter.build(input\u fn=my\u input\u fn)
?我认为fp16精度不需要校准?如果删除这行
converter.build(input\u fn=my\u input\u fn)
,错误会持续吗?
from tensorflow.python.compiler.tensorrt import trt_convert as trt
import numpy as np

input_saved_model_dir = "your-model-dir"
output_saved_model_dir = "your-output-dir"

conversion_params = trt.DEFAULT_TRT_CONVERSION_PARAMS
conversion_params = conversion_params._replace(
    max_workspace_size_bytes=(1<<32))
conversion_params = conversion_params._replace(precision_mode="FP16")
conversion_params = conversion_params._replace(
    maximum_cached_engines=100)

converter = trt.TrtGraphConverterV2(
    input_saved_model_dir=input_saved_model_dir,
    conversion_params=conversion_params)
converter.convert()

def my_input_fn():
  Inp1 = np.random.normal(size=(1, 640, 640, 3)).astype(np.uint8)
  yield (Inp1,)

converter.build(input_fn=my_input_fn)
converter.save(output_saved_model_dir)