可以转换为 TensorRT 的 Tensorflow tf.abs() 替代品
Tensorflow tf.abs() alternate that can be converted to TensorRT
我正在尝试将我的 Tensorflow 冻结模型转换为 NVIDIA TensorRT 引擎。我有 TensorRT 3 版本。 TensorRT 不支持某些 Tensorflow layers/functions,例如 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 returns 的布尔掩码转换为整数掩码,以便将其乘以输入,但 tf.Cast
操作也是TensorRT 不支持。
编辑:问题实际上是 UFF 解析器不支持 abs
函数,而 TensorRT 实际上支持它。在此处添加错误日志。
Using output node generate_output/deprocess/add
Converting to UFF graph
No. nodes: 361
UFF Output written to data/tmp.uff
UFFParser: parsing generate_output/generator/encoder_9/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_8/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_7/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_6/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_5/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_4/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_3/lrelu/mul/x
UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul/x
UFFParser: parsing image_tensor
UFFParser: parsing generate_output/load_images/preprocess/mul/y
UFFParser: parsing generate_output/load_images/preprocess/mul
UFFParser: parsing generate_output/load_images/preprocess/sub/y
UFFParser: parsing generate_output/load_images/preprocess/sub
UFFParser: parsing generate_output/input_images/Reshape/shape
UFFParser: parsing generate_output/input_images/Reshape
UFFParser: parsing generator/encoder_1/conv/filter
UFFParser: parsing generate_output/generator/encoder_1/conv/Conv2D
UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul
UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul_1/x
UFFParser: parsing generate_output/generator/encoder_2/lrelu/Abs
UFFParser: Parser error: generate_output/generator/encoder_2/lrelu/Abs: Unary not supported for other non-constant node
Failed to parse UFF
不幸的是,截至 2018 年 4 月,UFF 转换不支持很多操作。这个有效并且等效于 tf.abs():
abs_val = tf.maximum( 0, x ) + tf.maximum( 0, -x )
我正在尝试将我的 Tensorflow 冻结模型转换为 NVIDIA TensorRT 引擎。我有 TensorRT 3 版本。 TensorRT 不支持某些 Tensorflow layers/functions,例如 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 returns 的布尔掩码转换为整数掩码,以便将其乘以输入,但 tf.Cast
操作也是TensorRT 不支持。
编辑:问题实际上是 UFF 解析器不支持 abs
函数,而 TensorRT 实际上支持它。在此处添加错误日志。
Using output node generate_output/deprocess/add Converting to UFF graph No. nodes: 361 UFF Output written to data/tmp.uff UFFParser: parsing generate_output/generator/encoder_9/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_8/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_7/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_6/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_5/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_4/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_3/lrelu/mul/x UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul/x UFFParser: parsing image_tensor UFFParser: parsing generate_output/load_images/preprocess/mul/y UFFParser: parsing generate_output/load_images/preprocess/mul UFFParser: parsing generate_output/load_images/preprocess/sub/y UFFParser: parsing generate_output/load_images/preprocess/sub UFFParser: parsing generate_output/input_images/Reshape/shape UFFParser: parsing generate_output/input_images/Reshape UFFParser: parsing generator/encoder_1/conv/filter UFFParser: parsing generate_output/generator/encoder_1/conv/Conv2D UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul UFFParser: parsing generate_output/generator/encoder_2/lrelu/mul_1/x UFFParser: parsing generate_output/generator/encoder_2/lrelu/Abs UFFParser: Parser error: generate_output/generator/encoder_2/lrelu/Abs: Unary not supported for other non-constant node Failed to parse UFF
不幸的是,截至 2018 年 4 月,UFF 转换不支持很多操作。这个有效并且等效于 tf.abs():
abs_val = tf.maximum( 0, x ) + tf.maximum( 0, -x )