我正在尝试将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
如何恢复并解决此问题?
感谢进阶