opencv系列文章之使用dnn模块调用tensorflow、Caffe和Torch/PyTorch深度学习模型

深度学习有多厉害,就业前景有多开阔,我想每个学习计算机的人都能有所体会。Caffe、Tensorflow、Pytorch、Keras、mxnet等等深度学习框架,给了深度学习开发人员极大的方便,但他们部署起来却依旧较难!OpenCV自3.1版本其就在contrib中加入了DNN模块。到3.3版本时,将DNN模块由contrib提升到了正式代码块中。该DNN模块支持加载训练好的模型(即:这些模型需要实现在Caffe、TensorFlow、Torch/PyTorch等深度学习框架中提取训练好),并执行前向传播过程(即预测)。

本机硬件和软件资源如下:

 

1.编译带有DNN模块的opencv源码

参考文章链接:https://blog.csdn.net/weixin_39928773/article/details/103709184

参考文章链接https://blog.csdn.net/mangobar/article/details/80459866

1.1 下载opencv和opencv_contrib源码文件

opencv4.3地址:https://codeload.github.com/opencv/opencv/zip/4.3.0

opencv_contrib4.3地址:https://codeload.github.com/opencv/opencv_contrib/zip/4.3.0

1.2 使用cmake编译gpu版本opencv

首先确认你装了适合你电脑版本的cuda,cudnn等。

然后,在opencv的源码根目录下新建output文件夹,将opencv_contrib4.3放入其中。

然后使用cmake软件进行编译,设置如下,configure后选择的你编译后opencv的使用平台。完成后如下图所示(很多红色)

然后添加OPENCV_EXTRA_MODULES_PATH的信息,这个路径就是你下载的opencv_contrib源码解压后存放的文件夹中的modules文件夹路径。我把它放到了output文件夹内,所以在CMake中的OPENCV_EXTRA_MODULES_PATH中就填写D:/opencv-4.3.0/output/opencv_contrib-4.3.0。

注意事项:

1.搜索test,带test的都不勾选。

2.搜索java,带java的都不勾选。

 

2.准备深度学习算法模型文件

 

3.在opencv中导入模型并进行预测

3.1 导入caffe模型

参考使用文章链接:https://blog.csdn.net/zziahgf/article/details/90706693

#include <opencv2/dnn.hpp>
using namespace cv::dnn;

string protoFile = "D:\\qt5.12.0\\usrfile\\hand_reg\\caffe_models\\pose_deploy.prototxt";//caffe的模型基础信息
string weightsFile = "D:\\qt5.12.0\\usrfile\\hand_reg\\caffe_models\\pose_iter_102000.caffemodel";//caffe的模型文件,后缀名caffemodel

Net net = readNetFromCaffe(protoFile, weightsFile);//caffe模型文件
Mat inpBlob = blobFromImage(frame, 1.0 / 255, Size(inWidth, inHeight), Scalar(0, 0, 0), false, false);//将图片缩放为模型训练时的图片大小
net.setInput(inpBlob);//将图片输入caffe模型
Mat output = net.forward();//进行caffe模型预测

3.2 导入tensorflow模型

参考链接:https://blog.csdn.net/hust_bochu_xuchao/article/details/79428759

tensorflow的ckpt文件转pb文件参考文章链接:https://panjinquan.blog.csdn.net/article/details/82218092

#include <opencv2/dnn.hpp>
using namespace cv::dnn;

String weights = "nn.pb";//tensorflow的模型文件,后缀名pb,如果输出的是ckpt文件,还需要转为pb文件
dnn::Net net = cv::dnn::readNetFromTensorflow(weights);//读入tensorflow模型文件
Mat img = imread(files[i], 1);//准备模型输入图片
Mat inputBlob = dnn::blobFromImage(img, 0.00390625f, Size(256, 256), Scalar(), false,false); //将图片缩放为模型训练时的图片大小
net.setInput(inputBlob, "data");//将图片输入tensorflow模型
Mat pred = net.forward("fc2/prob");//进行tensorflow模型预测

 

4.参考资料

4.1 查看opencv支持的深度学习框架

链接:https://github.com/opencv/opencv/wiki/Deep-Learning-in-OpenCV

进入opencv的github页面,点击wiki。

点击右侧目录栏的Deep Learning in opencv,即可看到当前opencv dnn支持的深度学习框架。

 

 

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kissgoodbye2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值