我想将此模型(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'中
已中止(核心已弃用)
有人可以帮我吗?
答案 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?。