首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorRT引擎因UFF解析器错误而失败

TensorRT引擎因UFF解析器错误而失败
EN

Stack Overflow用户
提问于 2018-04-20 07:00:00
回答 1查看 2.9K关注 0票数 0

我正试图将基于pix2pix体系结构的Tensorflow冻结模型转换为NVIDIA TensorRT引擎。我有TensorRT 3版本。尽管TensorRT 3支持我的层,但其中一些层不受UFF解析器的支持。我所面临的问题是因为这条线:

mean, variance = tf.nn.moments(input, axes=[0, 1, 2], keep_dims=False)

内部操作之一是不受squared difference支持的TensorRT,在执行时返回以下错误:

转换为UFF图形警告:不支持keep_dims,忽略. 警告:还没有为layer: SquaredDifference注册转换函数。 转换为自定义op SquaredDifference > generate_output/generator/decoder_2/batchnorm/moments/SquaredDifference名称: "generate_output/generator/decoder_2/batchnorm/moments/SquaredDifference“ 执行部分:"SquaredDifference“ 输入:"generate_output/generator/decoder_2/batchnorm/Identity“ 输入:"generate_output/generator/decoder_2/batchnorm/moments/StopGradient“ attr { 键:"T“ 值{ 类型: DT_FLOAT } } 回溯(最近一次调用): 在data_type中,第71行,文件“script/转化法计划. in” 在frozenToPlan text=False中,第22行,文件“script/ line _plan.py”, 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/conversion_helpers.py",第103行,在from_tensorflow_frozen_model返回from_tensorflow(graphdef,output_nodes,**kwargs) 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/conversion_helpers.py",第75行,在from_tensorflow name=“main”中) 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第64行,在convert_tf2uff_graph uff_graph,input_replacements中) 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第51行,在convert_tf2uff_node op中,名称,tf_node,输入,uff_graph,tf_nodes=tf_nodes) 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第28行,在convert_layer字段= cls.parse_tf_attrs(tf_node.attr)中 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第177行,在parse_tf_attrs中表示key,在attrs.items()}中使用val 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第177行,in为键,val为attrs.items()} 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第172行,在parse_tf_attr_value中返回cls.convert_tf2uff_field(代码,val) 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第146行,在convert_tf2uff_field中返回TensorFlowToUFFConverter.convert_tf2numpy_dtype(val) 文件"/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py",第74行,在convert_tf2numpy_dtype返回np.dtype(dtdtype)中 TypeError:列表索引必须是整数,而不是AttrValue

我尝试用两种替代方法替换tf.nn.moments

  1. mean = tf.reduce_mean(input, axis = [0, 1, 2], keep_dims=False) devs_squared = tf.multiply(input - mean, input - mean) variance = tf.reduce_mean(devs_squared, axis = [0, 1, 2], keep_dims=False)

尽管TensorRT 3支持所有层,但UFF解析器不支持reduce_mean,它引发以下错误:

UFFParser:解析器错误: 不支持generate_output/generator/encoder_2/batchnorm/Mean:约简操作符

  1. 第二种方法: mean = tf.keras.backend.sum(input, axis = [0, 1, 2]) div_factor_1 = input.get_shape().as_list()[0]*input.get_shape().as_list()[1]*input.get_shape().as_list()[2] mean = mean * (1 / div_factor_1) devs_squared = tf.multiply(input - mean, input - mean) variance = tf.keras.backend.sum(devs_squared, axis = [0, 1, 2]) div_factor_2 = devs_squared.get_shape().as_list()[0]*devs_squared.get_shape().as_list()[1]*devs_squared.get_shape().as_list()[2] variance = variance * (1 / div_factor_2)

但是我再次遇到一个UFF解析器错误:

解析器错误: generate_output/generator/encoder_2/batchnorm/Sum:减少操作符不受支持

我还在备用2中使用了reduce_sum,而不是keras.backend.sum,以满足相同的错误。

EN

回答 1

Stack Overflow用户

发布于 2018-06-18 18:52:33

似乎您正在尝试使用自己的代码执行批处理规范。如果批处理规范没有什么特别之处,那么您应该使用tensorflow的批处理规范。

通过这样做,我可以将批规范转换为支持tensorrt的操作: 1.在tensorflow代码中指定fused=False。2.在冻结图上运行带有fold_batch_norm选项的转换图。3.用转换脚本转换新的冻结图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49935849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档