2

我训练了一个用于对象检测的张量流模型,输入作为占位符,尺寸为 [1,None,None,3],因为我的训练图像有各种大小。然后我将冻结图(.pb 文件)转换为 tensorRT 图以加快推理速度,但 tensorRT 警告我输入张量具有未知的非批量维度,因此节点将回退到 TF。错误信息是:

2019-05-22 08:59:56.628216: W tensorflow/contrib/tensorrt/convert/convert_nodes.cc:3710] Validation failed for TensorRTInputPH_0 and input slot 0: Input tensor with shape [1,?,?,3] has an unknown non-batch dimension at dim 1
2019-05-22 08:59:56.628262: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:1021] TensorRT node TRTEngineOp_0 added for segment 0 consisting of 160 nodes failed: Invalid argument: Validation failed for TensorRTInputPH_0 and input slot 0: Input tensor with shape [1,?,?,3] has an unknown non-batch dimension at dim 1. Fallback to TF...

我知道我可以在 trt.create_inference_graph 中将 is_dynamic_op 设置为 True,但这会增加运行时间。我想使用这个模型来推断视频,其中所有帧都具有相同的高度和宽度。有没有办法将输入占位符尺寸固定为静态值,而无需重新训练模型?我的输入张量可以通过 get_tensor_by_name 访问

4

1 回答 1

0

我认为您正在使用静态模式。

is_dynamic_opTF-TRT 的默认操作模式称为静态模式,只要参数设置为 False ,它就处于活动状态。在静态模式下,要求模型中的所有形状都完全定义(尺寸不能为无或-1)。当参数 is_dynamic_op 设置为 True 时,TF-TRT 将以动态模式运行。在动态模式下,TF-TRT API(TF <= 1.13 中的 create_inference_graph)返回一个修改后的图,但此时没有创建 TensorRT 引擎。相反,当您将输入发送到图形时,TensorRT 引擎是在运行时创建的。

动态模式的主要优点是它允许您在模型中拥有未知的形状,尽管 TensorRT 需要完全定义所有形状。在这种模式下,TF-TRT 为提供给模型的每个唯一输入形状创建一个新的 TensorRT 引擎。

于 2019-06-10T23:00:07.040 回答