我想在opencv中使用lf-net模型与我的应用程序中的sift和akaze关键点检测器沙描述符进行比较 opencv版本:4.1.2 张量流版本:1.4 操作系统:Ubuntu 18.04 Lts
github链接下载lf-net: https://github.com/vcg-uvic/lf-net-release
预训练的模型下载链接可以在Readme.md中找到
首先,我尝试用这些行冻结模型:
input_graph_def = sess.graph.as_graph_def()
output_node_names=ops['kpts'].op.name+","+ops['feats'].op.name+","+ops['scale_maps'].op.name+","+ops['kpts_scale'].op.name+","+ops['degree_maps'].op.name+","+ops['kpts_ori'].op.name
output_graph_def = graph_util.convert_variables_to_constants(
sess, # The session
input_graph_def, # input_graph_def is useful for retrieving the nodes
output_node_names.split(",")
)
output_graph="export/frozen.pb"
with tf.gfile.GFile(output_graph, "wb") as f:
f.write(output_graph_def.SerializeToString())
tf.train.write_graph(output_graph_def, 'export/', 'frozentxt.pbtxt',as_text=True)
(只需将此行复制到run_lfnet.py第115行)
并尝试通过opencv dnn模块的readNetFromTensorflow加载它。
Net net = readNetFromTensorflow(pbFilePath);// with only .pb file
以以下例外结尾:
cv :: Exception' what():OpenCV(4.1.2-openvino)/home/jenkins/workspace/OpenCV/OpenVINO/build/opencv/modules/dnn/src/tensorflow/tf_graph_simplifier.cpp:90:错误:(-212:解析错误)在功能“ getInputNodeId”中找不到名称为MSDeepDet / strided_slice_8的输入节点
然后我尝试使用pb和pbtxt文件
Net net = readNetFromTensorflow(pbFilePath, pbtxtFilePath);
其他例外:
what():OpenCV(4.1.2-openvino)/home/jenkins/workspace/OpenCV/OpenVINO/build/opencv/modules/dnn/src/tensorflow/tf_importer.cpp:663:错误:(-215:断言失败)const_layers.insert(std :: make_pair(name,li))。second在函数'addConstNodes'中
然后我读到我也需要使用optimize_for_inference(https://github.com/opencv/opencv/issues/12715)
with tf.gfile.FastGFile(output_graph, "rb") as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
tf.summary.FileWriter('logs', graph_def)
inp_node = 'Placeholder'
out_node = output_node_names.split(",")
graph_def = optimize_for_inference_lib.optimize_for_inference(graph_def, [inp_node], out_node,
tf.float32.as_datatype_enum)
graph_def = TransformGraph(graph_def, [inp_node], out_node, ["sort_by_execution_order"])
tf.train.write_graph(graph_def, "export/", 'graph_opt.pbtxt', as_text=True)
收到以下警告
警告:tensorflow:找不到预期的Conv2D输入到'MSDeepDet / ConvOnlyResNet / block-1 / pre-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'MSDeepDet / ConvOnlyResNet / block-1 / mid-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'MSDeepDet / ConvOnlyResNet / block-2 / pre-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'MSDeepDet / ConvOnlyResNet / block-2 / mid-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'MSDeepDet / ConvOnlyResNet / block-3 / pre-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'MSDeepDet / ConvOnlyResNet / block-3 / mid-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'MSDeepDet / ConvOnlyResNet / fin-bn / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'SimpleDesc / bn1 / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'SimpleDesc / bn2 / FusedBatchNorm'
警告:tensorflow:找不到预期的Conv2D输入到 'SimpleDesc / bn3 / FusedBatchNorm'
似乎我在输入节点中错过了一些东西,但是呢? :/ 有人可以帮助我吗? 最好的问候
编辑:链接到张量板屏幕
原始模型https://zupimages.net/viewer.php?id=19/49/3nla.png
冻结模型https://zupimages.net/viewer.php?id=19/49/p4dz.png
在冻结模型中似乎没有为ConvOnlyResnet定义入口点,但在原始图形中将占位符链接到convonlyrestnet
我错了吗?我该如何解决?