【问题标题】:How to convert .ckpt to .pb?如何将 .ckpt 转换为 .pb?
【发布时间】:2019-11-08 00:51:07
【问题描述】:

我是深度学习的新手,我想使用预训练 (EAST) 模型从 AI Platform Serving 提供服务,开发人员提供了这些文件:

  1. model.ckpt-49491.data-00000-of-00001
  2. 检查点
  3. model.ckpt-49491.index
  4. model.ckpt-49491.meta

我想将其转换为 TensorFlow .pb 格式。有没有办法做到这一点?我从here获取模型

完整代码可在here获取。

我查了here,它显示了以下代码来转换它:

来自tensorflow/models/research/

INPUT_TYPE=image_tensor
PIPELINE_CONFIG_PATH={path to pipeline config file}
TRAINED_CKPT_PREFIX={path to model.ckpt}
EXPORT_DIR={path to folder that will be used for export}

python object_detection/export_inference_graph.py \
    --input_type=${INPUT_TYPE} \
    --pipeline_config_path=${PIPELINE_CONFIG_PATH} \
    --trained_checkpoint_prefix=${TRAINED_CKPT_PREFIX} \
    --output_directory=${EXPORT_DIR}

我无法弄清楚要传递什么值:

  • INPUT_TYPE
  • PIPELINE_CONFIG_PATH。

【问题讨论】:

  • 您需要SavedModel格式,请务必先转换成该格式,然后才能使用saved_model_cli工具分析您的模型
  • 您能否详细说明一下。我该怎么做。或者建议我阅读一些材料。

标签: python-3.x tensorflow google-cloud-platform google-cloud-ml


【解决方案1】:

这是将检查点转换为 SavedModel 的代码

import os
import tensorflow as tf

trained_checkpoint_prefix = 'models/model.ckpt-49491'
export_dir = os.path.join('export_dir', '0')

graph = tf.Graph()
with tf.compat.v1.Session(graph=graph) as sess:
    # Restore from checkpoint
    loader = tf.compat.v1.train.import_meta_graph(trained_checkpoint_prefix + '.meta')
    loader.restore(sess, trained_checkpoint_prefix)

    # Export checkpoint to SavedModel
    builder = tf.compat.v1.saved_model.builder.SavedModelBuilder(export_dir)
    builder.add_meta_graph_and_variables(sess,
                                         [tf.saved_model.TRAINING, tf.saved_model.SERVING],
                                         strip_default_attrs=True)
    builder.save()                

【讨论】:

  • 非常感谢您的帮助。我成功地转换了模型,但我无法部署它,因为它的大小超过了给定的大小。如何缩小模型。
  • 你可以试试 Nvidia TensorRT 工具,看看这个帖子:medium.com/google-cloud/…
【解决方案2】:

根据@Puneith Kaul 的回答,这里是 tensorflow 1.7 版的语法:

import os
import tensorflow as tf

export_dir = 'export_dir' 
trained_checkpoint_prefix = 'models/model.ckpt'
graph = tf.Graph()
loader = tf.train.import_meta_graph(trained_checkpoint_prefix + ".meta" )
sess = tf.Session()
loader.restore(sess,trained_checkpoint_prefix)
builder = tf.saved_model.builder.SavedModelBuilder(export_dir)
builder.add_meta_graph_and_variables(sess, [tf.saved_model.tag_constants.TRAINING, tf.saved_model.tag_constants.SERVING], strip_default_attrs=True)
builder.save()

【讨论】:

  • 在没有“.meta”的情况下,有没有办法对对象识别做同样的事情?我正在使用这个网页:https://github.com/tensorflow/models/tree/master/research/slim#exporting-the-inference-graph 但我无法将 .ckpt 模型转换为 .pb
【解决方案3】:

如果您将 INPUT_TYPE 指定为 image_tensor 并且 使用此命令将 PIPELINE_CONFIG_PATH 作为您的配置文件。

python object_detection/export_inference_graph.py \
--input_type=${INPUT_TYPE} \
--pipeline_config_path=${PIPELINE_CONFIG_PATH} \
--trained_checkpoint_prefix=${TRAINED_CKPT_PREFIX} \
--output_directory=${EXPORT_DIR}

您可以在导出目录中获取 3 种格式的模型;

  • frozen_graph.pb
  • 保存的模型.pb
  • 检查点

更多信息https://github.com/tensorflow/models/tree/master/research/object_detection

【讨论】:

  • 有类似物体识别的东西吗?我正在使用这个网页:https://github.com/tensorflow/models/tree/master/research/slim#exporting-the-inference-graph 但我无法转换为 .pb
猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 2019-03-25
  • 2021-08-05
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多