我正在尝试将Tensorflow冻结模型转换为NVIDIA TensorRT引擎。我有TensorRT 3版本。 TensorRT不支持某些Tensorflow层/功能,例如tf.Cast
等。
我的模型使用tf.abs()
函数(EDIT:实际上由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返回的布尔掩码转换为整数掩码,以便将其乘以输入,但是TensorRT也不支持
tf.Cast
操作。编辑:问题实际上是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:解析生成器/ 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
最佳答案
不幸的是,截至2018年4月,UFF转换不支持很多操作。此操作有效并且等效于tf.abs():
abs_val = tf.maximum( 0, x ) + tf.maximum( 0, -x )
关于python - 可以转换为TensorRT的Tensorflow tf.abs()替代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49856793/