用于冻结ssd mobilenet v1 coco的output_node_name的冻结模型

时间:2019-07-17 18:49:35

标签: tensorflow intel ncsdk movidius

我想将TensorFlow Graph编译为Movidius Graph。我已经使用Model Zoo的ssd_mobilenet_v1_coco模型在我自己的数据集中训练它。

然后我跑了

python object_detection/export_inference_graph.py \
                --input_type=image_tensor \
                --pipeline_config_path=/home/redtwo/nsir/ssd_mobilenet_v1_coco.config \
                                --trained_checkpoint_prefix=/home/redtwo/nsir/train/model.ckpt-3362 \
                --output_directory=/home/redtwo/nsir/output

这使我frozen_interference_graph.pbsaved_model/saved_model.pb

11

12

现在可以将此保存的模型转换为 Movidius图。有给出的命令

导出GraphDef文件

python3 ../tensorflow/tensorflow/python/tools/freeze_graph.py \
        --input_graph=inception_v3.pb \
        --input_binary=true \
        --input_checkpoint=inception_v3.ckpt \
        --output_graph=inception_v3_frozen.pb \
        --output_node_name=InceptionV3/Predictions/Reshape_1

冻结推理模型

python3 ../tensorflow/tensorflow/python/tools/freeze_graph.py \
        --input_graph=inception_v3.pb \
        --input_binary=true \
        --input_checkpoint=inception_v3.ckpt \
        --output_graph=inception_v3_frozen.pb \
        --output_node_name=InceptionV3/Predictions/Reshape_1

最终可以提供给 NCS Intel Movidius SDK

mvNCCompile -s 12 inception_v3_frozen.pb -in=input -on=InceptionV3/Predictions/Reshape_1

所有这些信息均可在英特尔Movidius网站上找到:https://movidius.github.io/ncsdk/tf_modelzoo.html

我的模型已经过训练,即output/frozen_inference_graph。为什么我再次使用/slim/export_inference_graph.py冻结它,或者将output/saved_model/saved_model.py作为slim/export_inference_graph.py的输入?

我想要的只是 output_node_name = Inceptionv3 / Predictions / Reshape_1 。如何获得这个output_name_name目录结构及其内部内容?我不知道其中包含什么

模型动物园的ssd_mobilenet_v1_coco模型应使用什么输出节点(在我自己的自定义数据集中训练)

python freeze_graph.py \
                 --input_graph=/path/to/graph.pbtxt \
                 --input_checkpoint=/path/to/model.ckpt-22480 \
                 --input_binary=false \
                 --output_graph=/path/to/frozen_graph.pb \
                 --output_node_names="the nodes that you want to output e.g. InceptionV3/Predictions/Reshape_1 for Inception V3 "

我了解和不了解的内容: input_checkpoint:✓[训练期间创建的检查点] output_graph:✓[输出冻结图的路径] out_node_names:X

我不了解out_node_names参数,考虑到它的ssd_mobilnet不是inception_v3,应该在其中做什么


系统信息

  • 您正在使用的模型的顶级目录是什么
  • 我是否编写了自定义代码(与使用TensorFlow中提供的股票示例脚本相反)
  • OS平台和发行版(例如Linux Ubuntu 16.04):Linux Ubuntu 16.04
  • 从(源或二进制)安装的TensorFlow :与pip一起安装的TensorFlow
  • TensorFlow版本(使用下面的命令):1.13.1
  • Bazel版本(如果从源代码编译)
  • CUDA / cuDNN版本:V10.1.168 / 7。*
  • GPU模型和内存:2080Ti 11Gb
  • 要复制的精确命令

1 个答案:

答案 0 :(得分:0)

Saved_model / saved_model.pb中的图形是预训练的inception_v3模型的图形定义(图形体系结构),而权重未加载到图形中。 Frozen_interference_graph.pb是冻结的图,其中包含您提供的检查点并采用了inception_v3模型的默认输出节点。 要获取输出节点名称,可以使用summarise_graph工具

如果已安装bazel,则可以使用以下命令来使用summarise_graph工具

bazel构建tensorflow / tools / graph_transforms:summarize_graph

bazel-bin / tensorflow / tools / graph_transforms / summarize_graph \ --in_graph = / tmp / inception_v3_inf_graph.pb

如果未安装bazel,则可以使用张量板或任何其他图形可视化工具(如Netron)获得输出节点。

附加的freeze_graph.py可用于冻结指定输出节点的图(即,在将其他输出节点添加到inceptionV3的情况下)。 Frozen_interference_graph.pb同样非常适合侵权。