加载自定义模型(C ++)时,Tensorflow keras模型出现OpenCV错误

时间:2020-07-29 16:21:47

标签: python c++ tensorflow opencv keras

我想将此模型(https://www.pyimagesearch.com/2020/05/04/covid-19-face-mask-detector-with-opencv-keras-tensorflow-and-deep-learning/)用于C ++代码,该模型是使用keras和H5编写的,因此我进行搜索,发现比我需要先将h5模型转换为PB模型更重要因为opencv不支持h5。

按照本指南(https://www.youtube.com/watch?v=2UgqCwVfdJY)我可以做到,现在我有一个prototxt文件和一个pb文件

所以我所需要的只是输入我的代码并编写:

'''cv::dnn::Net mask_net = cv::dnn::readNetFromTensorflow("output_graph.pb","proto_file.prototxt");

对吗?但不起作用...我尝试了sddmobilinet2之类的其他模型,并且效果很好,但是使用此自定义模型,它不起作用

我有此日志:

抛出'cv :: Exception'实例后调用

terminate what():OpenCV(4.4.0-pre)/home/luiz/Libraries/CPP/opencv/modules/dnn/src/tensorflow/tf_graph_simplifier.cpp:1016:错误:(-215:断言失败)permIds.size( )== net.node_size()在函数'sortByExecutionOrder'中

已中止(核心已弃用)

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并设法仅通过使用冻结的.pb文件来解决它。 OpenCV在文档中仅给出了模型+配置函数声明:

cv::dnn::readNetFromTensorflow  (const String & model, const String & config = String())    

但是只有模型的人也可以使用:

cv::dnn::readNetFromTensorflow  (const String & model)  

有关如何在TensorFlow 2中冻结图形的示例,请参见:How to save Keras model as frozen graph?