我有一个基于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模型更快地进行推理?