将keras模型(.h5)转换为tensorflow模型(.pb)以与cv.dnn.readNetFromTensorflow模块一起使用?

时间:2019-12-25 09:55:59

标签: opencv tensorflow keras deep-learning

我正在尝试将keras模型转换为tensorflow模型以与cv.dnn.readNetFromTensorflow一起使用。有很多转换程序,这些程序可以在Internet以及stackoverflow中找到,例如: How to export Keras .h5 to tensorflow .pb? 通过链接,我将keras模型转换为tensorflow模型(.pb),但无法使用opencvdnn模块加载。我尝试了多种转换方法以及将其与opencvdnn模块一起使用的方法,但均失败了。我的转换方法之一如下:

def freeze_session(self, sess, keep_var_names=None, output_names=None, clear_devices=True):

        graph = sess.graph
        with graph.as_default():
            freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
            output_names = output_names or []
            output_names += [v.op.name for v in tf.global_variables()]
            input_graph_def = graph.as_graph_def()
            if clear_devices:
                for node in input_graph_def.node:
                    node.device = ""
            frozen_graph = tf.graph_util.convert_variables_to_constants(
                sess, input_graph_def, output_names, freeze_var_names)
            return frozen_graph

我使用以下代码段调用并保存了模型:

#######using session and saving .pb file##
        frozen_graph = freeze_session(K.get_session(),
                              output_names=[out.op.name for out in self.keras_model.outputs])

        tf.train.write_graph(frozen_graph, log_dir, file1, as_text=False)
        tf.train.write_graph(frozen_graph, log_dir, file2, as_text=True)

但是我在使用opencvdnn模块加载模型时遇到了问题。 这里应该注意,我的keras模型来自Matterport的MaskRCNN实现。链接在这里: https://github.com/matterport/Mask_RCNN

如何恢复并解决此问题?

感谢进阶

0 个答案:

没有答案