为什么冻结和优化tf图会导致更慢的推理

时间:2017-09-29 19:21:01

标签: optimization graph tensorflow freeze

我有一个基于VGG的细分模型。我冻结了图形,优化了图形,并将图形量化为8位。他们都没有比原始.ckpt模型更快地运行推理。

我用来冻结图形的命令是:

`~/tensorflow/bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=model_.pb --input_binary=true --input_checkpoint=./model.ckpt --output_graph=out.pb --output_node_names=adam_logit`

我用来优化图表的命令是:

~/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference \
--input=frozen.pb \
--output=optimized.pb \
--frozen_graph=True \
--input_names=image_input \
--output_names=adam_logit

我用来量化图形的命令是:

~/tensorflow/bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=optimized.pb \
--out_graph=eightbit.pb \
--inputs=image_input \
--outputs=adam_logit \
--transforms='
add_default_attributes
remove_nodes(op=Identity, op=CheckNumerics)
fold_constants(ignore_errors=true)
fold_batch_norms
fold_old_batch_norms
fuse_resize_and_conv
quantize_weights
quantize_nodes
strip_unused_nodes
sort_by_execution_order'

我在python中加载pb文件,如下所示:

sess, ops = gu.load_graph('frozen.pb')
g = sess.graph
print("operations ", len(ops))
print("graph names: \n", [n.name for n in g.as_graph_def().node])
input_layer = g.get_tensor_by_name('image_input:0')
keep_prob = g.get_tensor_by_name('keep_prob:0')
logits = g.get_tensor_by_name('adam_logit:0')
helper.save_inference_samples(runs_dir, data_dir, sess, image_shape, logits, keep_prob, input_layer)

使用ckpt版本的模型对图像进行推理需要: .6秒 使用frozen.pb模型需要:3.5秒 使用optimized.pb模型需要2.6秒 使用量化的八位模型需要7.5秒

此外,当使用frozen.pb和optimized.pb模型时,在对大约20个图像运行推理后,我得到资源分配错误。我对ckpt和eightbit.pb模型没有这个问题。

如何让我的pb模型更快地进行推理?

0 个答案:

没有答案