(请原谅我的长篇文章,非常感谢您的帮助)
根据来自存储库HERE
的培训代码,我正在为pascal VOC风格的自定义数据培训squeezeDet模型保存的模型检查点表现良好,因为我可以看到可接受的性能。
现在我正在尝试使用coreML冻结模型以进行部署,以了解性能在移动平台中的表现。该脚本的作者仅在其研究论文中报告GPU环境中的性能。
我按照张量流程遵循建议的步骤,我的命令如下
我从检查点元文件
中写出了图表path_to_ckpt_meta = rootdir + "model.ckpt-355000.meta"
path_to_ckpt_data = rootdir + "model.ckpt-355000"
sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True))
saver = tf.train.import_meta_graph(path_to_ckpt_meta)
saver.restore(sess, path_to_ckpt_data)
tf.train.write_graph(tf.get_default_graph().as_graph_def(), rootdir, "model_ckpt_355000_graph_V2.pb", False)
我查看图表摘要,查看模型中的所有张量。输出摘要文件为HERE。
但是,当我使用tensorflow中的inspect_checkpoint.py函数检查检查点文件时,我看不到image_input节点。检查结果为HERE。
我使用tensorflow freeze_graph.py函数冻结图形
python ./tensorflow/python/tools/freeze_graph.py \
--input_graph=path-to-dir/train/model_ckpt_355000_graph.pb \
--input_checkpoint=path-to-dir/train/model.ckpt-355000 \
--output_graph=path-to-dir/train/frozen_sqdt_ckpt_355000.pb \
--output_node_names=bbox/trimming/bbox,probability/score,probability/class_idx
freeze_graph调用完成且没有错误,并根据上面的命令生成冻结图。
当我使用summarize_graph函数调用检查冻结图时
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=/tmp/logs/squeezeDet_NewDataset_test01_March02/train/frozen_sqdt_ckpt_355000.pb
我得到以下
No inputs spotted.
No variables spotted.
Found 3 possible outputs: (name=bbox/trimming/bbox, op=Transpose) (name=probability/score, op=Max) (name=probability/class_idx, op=ArgMax)
Found 2703452 (2.70M) const parameters, 0 (0) variable parameters, and 0 control_edges
Op types used: 130 Const, 68 Identity, 32 BiasAdd, 32 Conv2D, 31 Relu, 15 Mul, 14 Add, 10 ConcatV2, 9 Sub, 5 RealDiv, 5 Reshape, 4 Maximum, 4 Minimum, 3 StridedSlice, 3 MaxPool, 2 Exp, 2 Greater, 2 Cast, 2 Select, 1 Transpose, 1 Softmax, 1 Sigmoid, 1 Unpack, 1 RandomUniform, 1 QueueDequeueManyV2, 1 Pack, 1 Max, 1 Floor, 1 FIFOQueueV2, 1 ArgMax
To use with tensorflow/tools/benchmark:benchmark_model try these arguments:
bazel run tensorflow/tools/benchmark:benchmark_model -- --graph=/tmp/logs/squeezeDet_NewDataset_test01_March02/train/frozen_sqdt_ckpt_355000.pb --show_flops --input_layer= --input_layer_type= --input_layer_shape= --output_layer=bbox/trimming/bbox,probability/score,probability/class_idx
上面的输出表明没有从冻结图中检测到输入。我检查冻结图的摘要,找不到image_input张量。 HERE
当我使用汇总图检查我的原始图表(在步骤1中编写)时,它确实显示输入。
建议原始作者代码中存在一些混淆,其中image_input未作为输入张量提供。虽然,令人困惑的部分是我可以在检查点元文件的输出图摘要中看到输入图像张量。
- 当原始图表有输入时,为什么冻结图表会删除输入节点?
- 而且,我该怎么做才能改变这一点并能够正确地成功冻结。
是否需要执行转换才能使此冻结模型与coreML格式兼容。?
非常感谢您的所有帮助。
最佳阿曼