python - 加载自定义模型时 Tensorflow keras 模型到 opencv 错误(C++)
问题描述
我想把这个模型(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'实例后调用终止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'中
中止(核心转储)
谁能帮我?
解决方案
我遇到了同样的问题并设法通过仅使用冻结的 .pb 文件来解决它。OpenCV 在文档中只给出了模型 + 配置函数声明:
cv::dnn::readNetFromTensorflow (const String & model, const String & config = String())
但是也可以使用只有模型的那个:
cv::dnn::readNetFromTensorflow (const String & model)
有关如何在 TensorFlow 2 中冻结图的一个很好的示例,请参阅:如何将 Keras 模型保存为冻结图?.
推荐阅读
- three.js - Three.js:带有 OrbitControls 的 Pepper 鬼影效果:相机平移/旋转问题
- excel - 如何从一张 Excel 表格剪切/粘贴行到另一张表格的第一个空白行
- javascript - redux 记录器未登录到控制台
- c - 在 Windows 上编译多线程 C 程序时,使用 rand_r 获取未声明的函数和未定义的符号错误
- azure-devops - 天蓝色管道 pytest-cov 覆盖结果未正确显示并引发警告
- php - 生成实体上的教义更改命名空间
- c - 带有 for 循环和 if 语句的打印语句
- python - 从 IntegrityError 异常中获取密钥
- node.js - 节点 sqlite3:试图编写一个函数来返回一个行数组
- python - 如何对具有多特征的时间序列数据进行切片以获得连续图包含[训练+测试+预测]?