我是深度学习的新手。第一步,我使用 keras 在 python 中创建并训练一个模型,并通过以下代码冻结:
def export_model(MODEL_NAME, input_node_name, output_node_name):
tf.train.write_graph(K.get_session().graph_def, 'out', \
MODEL_NAME + '_graph.pbtxt')
tf.train.Saver().save(K.get_session(), 'out/' + MODEL_NAME + '.chkp')
freeze_graph.freeze_graph('out/' + MODEL_NAME + '_graph.pbtxt', None, \
False, 'out/' + MODEL_NAME + '.chkp', output_node_name, \
"save/restore_all", "save/Const:0", \
'out/frozen_' + MODEL_NAME + '.pb', True, "")
input_graph_def = tf.GraphDef()
with tf.gfile.Open('out/frozen_' + MODEL_NAME + '.pb', "rb") as f:
input_graph_def.ParseFromString(f.read())
output_graph_def = optimize_for_inference_lib.optimize_for_inference(
input_graph_def, [input_node_name], [output_node_name],
tf.float32.as_datatype_enum)
with tf.gfile.FastGFile('out/opt_' + MODEL_NAME + '.pb', "wb") as f:
f.write(output_graph_def.SerializeToString())
它的输出:
- 检查站
- 型号.chkp.data-00000-of-00001
- 模型.chkp.index
- 模型.chkp.meta
- 模型图.pbtxt
- 冻结_模型.pb
- opt_Model.pb
当我想通过 readNetFromTensorflow 读取 opencv c++ 中的网络时:
String weights = "frozen_Model.pb";
String pbtxt = "Model_graph.pbtxt";
dnn::Net cvNet = cv::dnn::readNetFromTensorflow(weights, pbtxt);
这会出错:
OpenCV(4.0.0-pre)错误:未指定错误(失败:ReadProtoFromBinaryFile(param_file,param)。无法解析 GraphDef 文件:frozen_Model.pb)在 cv::dnn::ReadTFNetParamsFromBinaryFileOrDie,文件 D:\LIBS\OpenCV-4.00 \modules\dnn\src\tensorflow\tf_io.cpp,第 44 行
and
OpenCV(4.0.0-pre)错误:cv::dnn::experimental_dnn_v4::`anonymous-namespace'::addConstNodes、文件中的断言失败(const_layers.insert(std::make_pair(name, li)).second) D:\LIBS\OpenCV-4.00\modules\dnn\src\tensorflow\tf_importer.cpp,第 555 行
如何修复这个错误?