0

我想将 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.pb&saved_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 英特尔 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 中提供的股票示例脚本)
  • 操作系统平台和发行版(例如,Linux Ubuntu 16.04):Linux Ubuntu 16.04
  • TensorFlow 安装自(源代码或二进制文件):TensorFlow 使用 pip 安装
  • TensorFlow 版本(使用下面的命令):1.13.1
  • Bazel 版本(如果从源代码编译)
  • CUDA/cuDNN 版本:V10.1.168/7.*
  • GPU型号和内存:2080Ti 11Gb
  • 重现的确切命令
4

1 回答 1

1

saved_model/saved_model.pb 中的图是预训练的 inception_v3 模型的图定义(图架构),没有加载到图中的权重。freeze_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,可以使用 tensorboard 或任何其他图形可视化工具(如 Netron)获得输出节点。

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

于 2019-07-26T04:29:09.550 回答