这篇就是我当时寥寥草草记的笔记,很着急,所以写的很乱。我当时是想将darknet框架下的yolo模型调用起来。
1 其实可以直接用readNetFromDarknet调用weights文件
2 我当时有个pb模型,也想用ocv,发现调用是ocv对于一些层不支持,最后放弃了
我用的ocv3.4.1可以用ocv4支持的网络结构更多。ocv还会有内部的计算加速,能跑到更快。
opencv中的dnn模块可以直接导入tf caffe 等模型
在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
可以在API和例程中看到需要pb和pbtxt两个文件
pb和pbtx怎么生成?
如何使用呢?先找一个历程试试看。历程在下载的sources中
比如我的就在这里的所有py文件都是
可以在
在其中找到生成pbtxt的说明
https://github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-API
生成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格式不对
还遇到问题
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,导入成功
但是最后仍然出错
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