我在 ssd_mobilenet_v1_coco 模型
上使用 tensorflows 脚本
optimize_for_inderence.py
,命令如下:
python -m tensorflow.python.tools.optimize_for_inference \
--input /path/to/frozen_inference_graph.pb \
--output /path/to/optimized_inference_graph.pb \
--input_names=image_tensor \
--output_names=detection_boxes,detection_scores,num_detections,detection_classes
它没有错误地工作,但是如果我想将创建的 Model .pb
文件用于 Tensorboard
或 Inference
它给了我以下错误:
ValueError: graph_def is invalid at node u'ToFloat': Input tensor 'image_tensor:0' Cannot convert a tensor of type float32 to an input of type uint8.
查看 Tensorbaord 可视化的原始图形:
如您所见,节点 ToFloat
紧跟在 image_tensor
输入之后
所以显然优化出了问题。但是什么?
最佳答案
我在加载由 optimize_for_inference 工具生成的模型文件时看到类似的错误“节点 ExpandDims_6 的输入 0 是从 input_feed 传递的 float :0 与预期的 int64 不兼容”。
Pete 的评论“删除未使用节点的新图形转换方法可能更健壮? https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms/#optimizing-for-deployment "在 https://github.com/tensorflow/tensorflow/issues/8242 上似乎建议我们应该使用新的 transform_graph 工具。
在更新的 TensorFlow Mobile 文档中没有提到 optimize_for_inference 工具 https://www.tensorflow.org/mobile还建议使用 transform_graph 工具。
就在我怀疑罪魁祸首在优化工具中时,我看到了你的问题。谢谢.. 刚刚尝试了 transform_graph 工具,它在转换后的模型和转换后进一步映射的模型上都有效。以下是我使用的 3 个命令 freeze-transform-memmapped:
python tensorflow/python/tools/freeze_graph.py \
--input_meta_graph=/tmp/ckpt4.meta \
--input_checkpoint=/tmp/ckpt4 \
--output_graph=/tmp/ckpt4_frozen.pb \
--output_node_names="softmax,lstm/initial_state,lstm/state" \
--input_binary=true
bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=/tmp/ckpt4_frozen.pb \
--out_graph=/tmp/ckpt4_frozen_transformed.pb \
--inputs="convert_image/Cast,input_feed,lstm/state_feed" \
--outputs="softmax,lstm/initial_state,lstm/state" \
--transforms='
strip_unused_nodes(type=float, shape="1,299,299,3")
fold_constants(ignore_errors=true)
fold_batch_norms
fold_old_batch_norms'
bazel-bin/tensorflow/contrib/util/convert_graphdef_memmapped_format \
--in_graph=/tmp/ckpt4_frozen_transformed.pb \
--out_graph=/tmp/ckpt4_frozen_transformed_memmapped.pb
关于python - 在卡住图上使用 optimize_for_inference.py 后使用模型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212068/