keras的h5模型保存为tensorflow的pb文件,再用opencv打开

这篇就是我当时寥寥草草记的笔记,很着急,所以写的很乱。我当时是想将darknet框架下的yolo模型调用起来。

1 其实可以直接用readNetFromDarknet调用weights文件

2 我当时有个pb模型,也想用ocv,发现调用是ocv对于一些层不支持,最后放弃了

我用的ocv3.4.1可以用ocv4支持的网络结构更多。ocv还会有内部的计算加速,能跑到更快。

 

 

opencv中的dnn模块可以直接导入tf caffe 等模型

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第1张图片

一opencv-learining

在learning中找到使用readNetFromTensorflow的方法的demo

https://www.learnopencv.com/face-detection-opencv-dlib-and-deep-learning-c-python/

以及源码

https://github.com/spmallick/learnopencv/tree/91aca7573b8ec353d3d8e187a70f4aa522659b1e/FaceDetectionComparison

这是人类检测例程,下载运行发现可行

D:\Car_detection\project\yoloCarDetect\moveDetect\zzhtest\ocv

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第2张图片

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第3张图片

可以在API和例程中看到需要pb和pbtxt两个文件

pb和pbtx怎么生成?

二使用历程

如何使用呢?先找一个历程试试看。历程在下载的sources中

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第4张图片

比如我的就在这里的所有py文件都是

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第5张图片

可以在

在其中找到生成pbtxt的说明

https://github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-API

生成pbtxt应该是网络结构

三生成pb和pbtxt

我随便找的h5转pb和pbtxt的程序,实验之后报错

error: (-215:Assertion failed) const_layers.insert(std::make_pair(name, li)).second in function 'cv::dnn::experimental_dnn_34_v7::`anonymous-namespace'::addConstNodes'

寻找到相关错误

http://answers.opencv.org/question/206493/keras-to-tensorflow-to-opencv-dnn/

应该是pbtxt格式不对

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第6张图片

还遇到问题

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第7张图片

cv2.error: OpenCV(3.4.3) D:\Build\OpenCV\opencv-3.4.3\modules\dnn\src\tensorflow\tf_graph_simplifier.cpp:771: error: (-2:Unspecified error) Tensor's data type is not supported in function 'cv::dnn::experimental_dnn_34_v7::getTensorContent'

应该是pb文件格式不对,找到https://stackoverflow.com/questions/53493296/opencv-dnn-fails-with-keras-densenet121

重新生成pb

再加上上面的pbtxt,导入成功

但是最后仍然出错

keras的h5模型保存为tensorflow的pb文件,再用opencv打开_第8张图片

error: (-2:Unspecified error) Input layer not found: Flatten_1/strided_slice/stack in function ' cv::dnn::experimental_dnn_34_v7::`anonymous-namespace'::TFImporter::connect'

应该是ocv中没支持strided_slice层

待更新待完善

--------------------------------------------------------------------------------------------------------

2020.3.20 

啊,上面都是去年做的事,竟然发现好多人向我提问,我都忘记了=_=;好吧我再重新看一遍

我之前的步骤应是 ①keras的h5模型转tf的pb模型 ②用opencv调用pb;今天重新试了一遍,没有问题呀,没有报错。你们可以自己下载代码玩玩

①h5转pb

②opencv加载模型

代码在:zihaozhang9

 

你可能感兴趣的:(图像,笔记)