tensorflow新API:TensorRT创建\u推理\u图形错误

tensorflow新API:TensorRT创建\u推理\u图形错误,tensorflow,tensorrt,Tensorflow,Tensorrt,我有一个用于目标检测的自定义更快的R-CNN网络,其中我定义了一些自定义操作符:nms和roi\u pooling,它们被编译成。so文件。.so文件被包装,可由tensorflow框架调用 将tensorflow冻结图转换为.pb文件后,我使用以下代码: trt_graph = trt.create_inference_graph(graph_def, OUTPUT_NAMES, max_batch_size=c

我有一个用于目标检测的自定义更快的R-CNN网络,其中我定义了一些自定义操作符:
nms
roi\u pooling
,它们被编译成
。so
文件。
.so
文件被包装,可由tensorflow框架调用

将tensorflow冻结图转换为
.pb
文件后,我使用以下代码:

trt_graph = trt.create_inference_graph(graph_def, OUTPUT_NAMES,
                                         max_batch_size=cfg.test_batch_per_gpu,
                                         max_workspace_size_bytes=5000000000,
                                         precision_mode="FP16")  # Get optimized graph
但它报告了很多警告和错误:

2018-04-25 23:45:54.451261: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:0 due to: "Invalid argument: Failed to create Input layer" SKIPPING......( 30 nodes)
2018-04-25 23:45:54.452898: E tensorflow/contrib/tensorrt/log/trt_logger.cc:38] DefaultLogger Parameter check failed at: ../builder/Network.cpp::addInput::377, condition: isValidDims(dims)
2018-04-25 23:45:54.452914: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:1 due to: "Invalid argument: Failed to create Input layer" SKIPPING......( 23 nodes)
2018-04-25 23:45:54.455730: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:2 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/Exp" SKIPPING......( 9 nodes)
2018-04-25 23:45:54.457270: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:3 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/Exp_1" SKIPPING......( 9 nodes)
2018-04-25 23:45:54.458798: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:4 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/Exp_5" SKIPPING......( 9 nodes)
2018-04-25 23:45:54.460327: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:5 due to: "Unimplemented: Require 4 dimensional input. Got 1 resnet_v1_50_5/strided_slice_60" SKIPPING......( 6 nodes)
2018-04-25 23:45:54.461882: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:6 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/Exp_6" SKIPPING......( 9 nodes)
2018-04-25 23:45:54.463425: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:7 due to: "Unimplemented: Require 4 dimensional input. Got 1 resnet_v1_50_5/strided_slice_6" SKIPPING......( 6 nodes)
2018-04-25 23:45:54.464976: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:8 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/ones_2" SKIPPING......( 4 nodes)
2018-04-25 23:45:54.466543: E tensorflow/contrib/tensorrt/log/trt_logger.cc:38] DefaultLogger Parameter check failed at: ../builder/Network.cpp::addInput::377, condition: isValidDims(dims)
2018-04-25 23:45:54.466571: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:9 due to: "Invalid argument: Failed to create Input layer" SKIPPING......( 33 nodes)
2018-04-25 23:45:54.468105: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:10 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/ones_1" SKIPPING......( 3 nodes)
2018-04-25 23:45:54.469726: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:11 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/Exp_7" SKIPPING......( 9 nodes)
2018-04-25 23:45:54.471356: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:12 due to: "Unimplemented: Require 4 dimensional input. Got 2 resnet_v1_50_5/ones_3" SKIPPING......( 4 nodes)
2018-04-25 23:45:54.473207: E tensorflow/contrib/tensorrt/log/trt_logger.cc:38] DefaultLogger Parameter check failed at: ../builder/Network.cpp::addInput::377, condition: isValidDims(dims)
2018-04-25 23:45:54.473259: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:13 due to: "Invalid argument: Failed to create Input layer" SKIPPING......( 380 nodes)
2018-04-25 23:45:54.475765: W tensorflow/contrib/tensorrt/convert/convert_graph.cc:418] subgraph conversion error for subgraph_index:14 due to: "Unimplemented: Require 4 dimensional input. Got 1 resnet_v1_50_5/strided_slice_8" SKIPPING......( 6 nodes)
...

这个错误的原因是什么?如何解决这个问题?谢谢。

如果您的输入节点未正确注册,则会发生这种情况。请确保您使用了正确的输入节点名称,您可以在会话中将tf graph中的节点名称打印为
print([n.name for n in tf.get_default_graph().as_graph_def().node])
有关详细信息,请参阅nvidia开发者论坛,

如果您的输入节点未正确注册,则会发生这种情况。请确保您使用了正确的输入节点名称,您可以在会话中将tf图中的节点名称打印为
print([n.name for n in tf.get_default_graph().as_graph_def().node])
有关详细信息,请参阅nvidia开发者论坛,这可能是因为TensorRT在优化图形时需要知道所有张量的大小。一个可能的修复方法是为更快的rcnn模型指定一个固定的输入图像张量大小,例如,对模型配置文件进行以下修改

原来:

faster_rcnn {
  num_classes: 90
  image_resizer {
    keep_aspect_ratio_resizer {
      min_dimension: 600
      max_dimension: 1024
    }
  }
  ......
修改:

faster_rcnn {
  num_classes: 90
  image_resizer {
    fixed_shape_resizer {
      height: 600
      width:  1024
    }
  }
  ......

参考资料:

这可能是因为TensorRT要求在优化图形时,所有张量的大小都是已知的。一个可能的修复方法是为更快的rcnn模型指定一个固定的输入图像张量大小,例如,对模型配置文件进行以下修改

原来:

faster_rcnn {
  num_classes: 90
  image_resizer {
    keep_aspect_ratio_resizer {
      min_dimension: 600
      max_dimension: 1024
    }
  }
  ......
修改:

faster_rcnn {
  num_classes: 90
  image_resizer {
    fixed_shape_resizer {
      height: 600
      width:  1024
    }
  }
  ......

参考资料:

你找到了这个问题的解决方案吗?@DaveS可能是TensorRT,在某些特定层上只支持4D张量。我猜我在尝试转换基于resnet的金字塔网络时也会遇到类似的错误。你找到解决此问题的方法了吗?@DaveS可能是TensorRT,在某些特定层上仅支持4D tensor。我猜我在尝试转换基于resnet的金字塔网络时也会遇到类似的错误。欢迎将a转换为解决方案,但请确保您的答案在没有它的情况下是有用的:在链接周围添加上下文,以便您的其他用户能够了解它是什么以及为什么存在,然后引用你链接到的页面最相关的部分,以防目标页面不可用。欢迎使用解决方案,但请确保您的答案在没有它的情况下是有用的:在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在,然后引用您链接到的页面最相关的部分,以防目标页面不可用。