【发布时间】:2021-05-11 05:53:32
【问题描述】:
我正在尝试加速分割模型(unet-mobilenet-512x512)。我将我的 tensorflow 模型转换为具有 FP16 精度模式的 tensorRT。而且速度比我预想的要低。 在优化之前,我有 7FPS 的 .pb 冻结图推理。 tensorRT 优化后,我有 14FPS。
这是他们网站上 Jetson NX 的基准测试结果
可以看到,unet 256x256 的分割速度是 146 FPS。我想,在最坏的情况下,我的 unet512x512 的速度应该慢 4 倍。
这是我使用 TensorRt 优化 tensorflow 保存模型的代码:
import numpy as np
from tensorflow.python.compiler.tensorrt import trt_convert as trt
import tensorflow as tf
params = trt.DEFAULT_TRT_CONVERSION_PARAMS
params = params._replace(
max_workspace_size_bytes=(1<<32))
params = params._replace(precision_mode="FP16")
converter = tf.experimental.tensorrt.Converter(input_saved_model_dir='./model1', conversion_params=params)
converter.convert()
def my_input_fn():
inp1 = np.random.normal(size=(1, 512, 512, 3)).astype(np.float32)
yield [inp1]
converter.build(input_fn=my_input_fn) # Generate corresponding TRT engines
output_saved_model_dir = "trt_graph2"
converter.save(output_saved_model_dir) # Generated engines will be saved.
print("------------------------freezing the graph---------------------")
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
saved_model_loaded = tf.saved_model.load(
output_saved_model_dir, tags=[tf.compat.v1.saved_model.SERVING])
graph_func = saved_model_loaded.signatures[
tf.compat.v1.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
frozen_func = convert_variables_to_constants_v2(
graph_func)
frozen_func.graph.as_graph_def()
tf.io.write_graph(graph_or_graph_def=frozen_func.graph,
logdir="./",
name="unet_frozen_graphTensorRt.pb",
as_text=False)
我下载了用于 Jetson NX 基准测试的存储库 (https://github.com/NVIDIA-AI-IOT/jetson_benchmarks),unet256x256 的速度确实是 ~146FPS。但是没有优化模型的管道。
我怎样才能得到类似的结果?我正在寻找使我的模型(unet-mobilenet-512x512)的速度接近 30FPS
也许我应该以其他方式(没有 tensorflow)运行推理或更改一些转换参数的解决方案?
有什么建议,谢谢
【问题讨论】:
标签: tensorflow tensorrt nvidia-jetson