Hi,
I used opencv3.4.1 to load pre-trained model from tensorflow. *.pb and *.pbtxt which were generated by the following code:
output_nodes = [n.name for n in tf.get_default_graph().as_graph_def().node]
# Freeze the graph
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
sess,
sess.graph_def,
output_nodes)
# Save the frozen graph
with open('./model/output_graph.pb', 'wb') as f:
f.write(frozen_graph_def.SerializeToString())
tf.train.write_graph(sess.graph_def, "./model", "output_graph_def.pbtxt", True)
And I loaded them by using cv::dnn
cv::dnn::Net local_cvNet = cv::dnn::readNetFromTensorflow("./model/output_graph.pb",
"./model/output_graph_def.pbtxt");
That gave me an error :
FAILED: ReadProtoFromTextFile(param_file, param). Failed to parse GraphDef file: ./output_graph_def.pbtxt" char *
In addition, I used CTC_loss layer in tensorflow, it may be the problem for opencv parser ?
I dont know what is wrong ? in python script to generate *pbtxt or *.pbtxt itself ? Any suggestion ?
I switched to opencv4.0.0 as dkurt proposed, but the problem is still there. Here is callstack:
(-2:Unspecified error)
FAILED: ReadProtoFromTextFile(param_file, param). Failed to parse GraphDef file: ./output_graph_def.pbtxt"
opencv_world400d.dll!cv::error(const cv::Exception & exc) Line 1032 C++
opencv_world400d.dll!cv::error(int _code, const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _err, const char * _func, const char *
_file, int _line) Line 1044 C++
opencv_world400d.dll!cv::dnn::GLogWrapper::check() Line 90 C++
opencv_world400d.dll!cv::dnn::ReadTFNetParamsFromTextFileOrDie(const char * param_file,
opencv_tensorflow::GraphDef * param) Line 54 C++
> opencv_world400d.dll!cv::dnn::dnn4_v20180917::`anonymous
namespace'::TFImporter::TFImporter(const char * model, const char * config) Line 438 C++
opencv_world400d.dll!cv::dnn::dnn4_v20180917::readNetFromTensorflow(const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > & model, const
std::basic_string<char,std::char_traits<char>,std::allocator<char> > & config) Line 1931 C++
Well, go deep into these stack, I found this message:
"Unknown enumeration value of \"DT_RESOURCE\" for field \"type\"." from text_format.cc
It seems this value type is new from Opencv ?? Here is my graph followed l'architexture : CNN+BLSTM+CTC: You have to change the format from png-> pbtxt C:\fakepath\output_graph.png