如何将多个输出节点结果合并到最后一层?

时间:2019-07-25 11:31:08

标签: python tensorflow

我正在使用posenet并将其从tflite转换为pb。它有4个输出节点offset_2,displacement_fwd_2,displacement_bwd_2,heatmap。

要能够将图形移植到movidius,我需要将图形转换为具有单个输出节点。

我尝试过tf.grouptf.stack,在这种情况下似乎没有用。我可能在这里错过了一些东西。

加载模型:

with tf.Session() as sess:
    print("Loading graph...")
    with gfile.FastGFile("./posenet-mobilenet_v1_075.pb") as f:
        graph_def = tf.GraphDef()

        graph_def.ParseFromString(f.read())

        sess.graph.as_default()

        # Original input node has dynamic input size, which is not supported by Movidius. Make it static.
        new_input = tf.placeholder(tf.float32,
                                   [None, 300, 300, 3],
                                   name="new_image")

        tf.import_graph_def(graph_def,
                            name="",
                            input_map={"image:0": new_input})

添加组:

        tf.group(offset_tensor,                                                                                                                               
                 displacement_bwd_tensor,
                 displacement_fwd_tensor,
                 heatmap_tensor,
                 name="grouped_output")

        frozen_graph_def = convert_variables_to_constants(sess, graph_def, ["grouped_output"])

        with tf.gfile.GFile("./tmp/" + "frozen.pb", "wb") as f:
            f.write(frozen_graph_def.SerializeToString())

我也尝试过tf.tuple()。在组和元组中,如果在推理优化期间指定的节点为grouped_output,则optimize_for_inference后跟summerize_graph均不显示任何输出节点。

我可能对此想法完全不满意,但是我的思考过程是我可以添加一个新操作,该操作将采用前4个节点(get_operation_by_name)的值,并且use将它们组合在一起的列表或字典。然后可以将此新操作视为输出节点,这可能会使NCSDK再次满意。但是看来操作不能是输出节点?

0 个答案:

没有答案