【问题标题】:Converting Audioset ckpt to pb file将 Audioset ckpt 转换为 pb 文件
【发布时间】:2020-02-03 01:53:16
【问题描述】:

我正在使用Audioset/VGGish 并尝试将他们提供的checkpoint file 转换为.pb 文件。问题是为训练模型提供的仅有两项是 ckpt 文件(上面链接)和一个npz file

这是我尝试此操作的第三次尝试,现在已经花了几个小时试图找到执行此操作的最佳工具。到目前为止,我已经找到了几种解决方案,但它们似乎都需要更多信息,而不仅仅是 ckpt 文件。请记住,ckpt文件和Audioset一般需要使用TensorFlow


例子:

freeze_graph:无论我在那里输入什么值,我总是以ValueError: You need to supply the name of a node to --output_node_names 的错误结束。该示例使用softmax,但问题是我似乎无法弄清楚如何从 ckpt 文件中提取节点名称,因此我似乎无法在不知道它们的情况下添加有效值。

Logged GitHub Issues:按照 OP 的代码,我收到错误 ValueError: No variables to save

Stack Overflow questions:这似乎是一个可靠的答案,但 GitHub 存储库没有提供 .ckpt.meta 文件。我认为在某些情况下通常需要元信息?我查看是否有任何方法可以从 ckpt 文件中提取元以创建元文件然后运行信息,因为元文件似乎是没有值的 ckpt 文件的结构或图形(来自此答案:Tensorflow : What is the relationship between .ckpt file and .ckpt.meta and .ckpt.index , and .pb file) 但我可能误解了这一点。

我认为有一种方法可以提取元文件的原因之一是有人登录了 MMdnn GitHub:Convert Audioset VGG from tensorflow to pytorch。虽然没有转换为 .pb,但他们的命令中有一个 ckpt.meta 文件。该文件在他们的描述中没有链接,谷歌搜索“vggish_model.ckpt.meta”只发现了 GitHub 问题。我已就该问题向 OP 发送消息,看看他们是否可以阐明该文件的来源。

Previous article (2018) with a conversion script:这是一篇比较老的文章。我可以让脚本运行,但也会收到错误 ValueError: No variables to save


如果有人能指出我正确的方向,那就太好了;我已经开始用尽我的选择。似乎有一些很好的解决方案我正在尝试,但我可能只是缺少一两个步骤(或一两个文件)以使其成功转换。

感谢您的帮助!

【问题讨论】:

    标签: python tensorflow ckpt


    【解决方案1】:

    我希望这个回复还不算太晚,但我设法通过使用repository 中提供的推理代码生成了 .pb 文件。

    Obs:由于我的 GPU,我使用的是 tensorflow 1.4.1,所以这可能不适用于较新的版本,或者需要进行一些更改。

    推理演示将图形和检查点数据加载到会话中。从那里我可以使用一个函数来保存会话和图表。这是我的代码示例:

    import vggish_input
    from tensorflow.python.tools import freeze_graph
    def save(sess, directory, filename, saver):
        """
        This function saves a checkpoint, based on the current session
        """
        if not os.path.exists(directory):
            os.makedirs(directory)
        filepath = os.path.join(directory, filename)
        saver.save(sess, filepath)
        return filepath
    
    def save_as_pb(sess, directory, filename, saver):
        """
        This function saves a checkpoint, then writes the graph in a pbtxt, and then              makes a frozen graph with the chekpoint and the pbtxt
        """
    
        # Save checkpoint to freeze graph later
        ckpt_filepath = save(sess, directory=directory, filename=filename, saver=saver)
        pbtxt_filename = filename + '.pbtxt'
        pbtxt_filepath = os.path.join(directory, pbtxt_filename)
        pb_filepath = os.path.join(directory, filename + '.pb')
    
        # This will only save the graph but the variables will not be saved.
        tf.train.write_graph(graph_or_graph_def=sess.graph_def, logdir=directory, name=pbtxt_filename, as_text=True)
    
        # Freeze graph, combining the checkpoint and 
        freeze_graph.freeze_graph(input_graph=pbtxt_filepath, input_saver='', input_binary=False, input_checkpoint=ckpt_filepath, output_node_names=vggish_params.OUTPUT_TENSOR_NAME.split(':')[0], restore_op_name='save/restore_all', filename_tensor_name='save/Const:0', output_graph=pb_filepath, clear_devices=True, initializer_nodes='')
    
        return pb_filepath
    

    然后我在从 vggish_inference_demo.py 文件中的检查点加载模型后立即插入 save_as_pb:

      config = tf.ConfigProto()
      config.gpu_options.allow_growth=True
      with tf.Graph().as_default(), tf.Session(config=config) as sess:
        # Define the model in inference mode, load the checkpoint, and
        # locate input and output tensors.
        vggish_slim.define_vggish_slim(training=False)
        vggish_slim.load_vggish_slim_checkpoint(sess, checkpoint)
        features_tensor = sess.graph.get_tensor_by_name(
            vggish_params.INPUT_TENSOR_NAME)
        embedding_tensor = sess.graph.get_tensor_by_name(
            vggish_params.OUTPUT_TENSOR_NAME)
        saver = tf.train.Saver()
        save_as_pb(sess, './saved_vggish/', 'vggish', saver)
    

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      相关资源
      最近更新 更多