1

我正在尝试将我的 Tensorflow 冻结模型转换为 NVIDIA TensorRT 引擎。我有 TensorRT 3 版本。TensorRT 不支持某些 Tensorflow 层/函数,例如tf.Cast等。我的模型使用该tf.abs()函数(编辑:实际上由 TensorRT 支持,但不由构建 TensorRT 引擎所需的 UFF 解析器支持),我有能力在将 tensorflow 检查点转换为冻结模型之前更改操作。

我需要换tf.abs()一个替代品。因此,我尝试在 Tensorflow 中进行以下 numpy 操作。

麻木:

mask = (x<0).astype(np.float32)
mask = 2*mask + 1 #(makes all 1s -1, and all 0s 1)
abs_vals = mask*x

Tensorflow:z是一个零张量,形状与x相同

mask = tf.less(x, z)
#convert mask from boolean to integer or float

我不确定如何继续,因为我需要将 tensorflow 返回的布尔掩码转换为整数掩码,以便将其与输入相乘,但tf.CastTensorRT 也不支持该操作。

编辑:问题实际上是 UFF 解析器不支持该abs功能,而 TensorRT 实际上支持它。在此处添加错误日志。

使用输出节点 generate_output/deprocess/add 转换为 UFF 图节点数:361 UFF 输出写入 data/tmp.uff UFFParser:解析 generate_output/generator/encoder_9/lrelu/mul/x UFFParser:解析 generate_output/generator/encoder_8/lrelu /mul/x UFFParser: 解析 generate_output/generator/encoder_7/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_6/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_5/lrelu/mul/x UFFParser: 解析 generate_output /generator/encoder_4/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_3/lrelu/mul/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul/x UFFParser: 解析 image_tensor UFFParser: 解析 generate_output/load_images/preprocess /mul/y UFFParser: 解析 generate_output/load_images/preprocess/mul UFFParser:解析 generate_output/load_images/preprocess/sub/y UFFParser: 解析 generate_output/load_images/preprocess/sub UFFParser: 解析 generate_output/input_images/Reshape/shape UFFParser: 解析 generate_output/input_images/Reshape UFFParser: 解析 generator/encoder_1/conv/filter UFFParser:解析 generate_output/generator/encoder_1/conv/Conv2D UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs: Unary not supported for other non-constant node 无法解析 UFF解析 generate_output/input_images/Reshape/shape UFFParser: 解析 generate_output/input_images/Reshape UFFParser: 解析 generator/encoder_1/conv/filter UFFParser: 解析 generate_output/generator/encoder_1/conv/Conv2D UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul UFFParser:解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser:解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs:其他非常量节点不支持一元无法解析 UFF解析 generate_output/input_images/Reshape/shape UFFParser: 解析 generate_output/input_images/Reshape UFFParser: 解析 generator/encoder_1/conv/filter UFFParser: 解析 generate_output/generator/encoder_1/conv/Conv2D UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul UFFParser:解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser:解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser:解析器错误:generate_output/generator/encoder_2/lrelu/Abs:其他非常量节点不支持一元无法解析 UFF解析 generate_output/generator/encoder_2/lrelu/mul UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser: 解析器错误: generate_output/generator/encoder_2/lrelu/Abs : 其他非常量节点不支持一元 无法解析 UFF解析 generate_output/generator/encoder_2/lrelu/mul UFFParser: 解析 generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: 解析 generate_output/generator/encoder_2/lrelu/Abs UFFParser: 解析器错误: generate_output/generator/encoder_2/lrelu/Abs : 其他非常量节点不支持一元 无法解析 UFF

4

1 回答 1

1

不幸的是,截至 2018 年 4 月,UFF 转换不支持很多操作。这个有效并且等效于 tf.abs():

abs_val = tf.maximum( 0, x ) + tf.maximum( 0, -x )
于 2018-04-17T00:33:02.353 回答