在接下来的系列文章中,我们使用C++和Opencv实现一个简单的5层前馈神经网络,并用它来训练和识别手写数字图像。 通过这一系列的学习和总结,我对深度学习的基础知识有了更深入的了解。 拿起它,边学习边总结,请跟我一起进入深度学习框架的学习之旅吧~首先解释一下什么是深度学习框架,我们可以把它理解为一个工具,其中包括神经网络、卷积的实现代码神经网络中的每个模块。 使用此工具可以轻松构建您想要的深度学习网络。 就像积木一样,每个积木模块都已经由其他模块制成。 我们只需要使用这种现成的模块来构建我们想要的形状和结构。
目前流行的深度学习框架有Tensorflow、Caffe、Keras、Mxnet、Pytorch等,这些框架都有各自的异同。 至于为什么要选择libtorch,主要原因有以下几点:
1.虽然libtorch是在Pytorch基础上封装的C++库,提供了C++ API套接字,但是在windows系统的VSC++环境下opencv源码编译安装,你可以轻松调用那些API套接字来构建你想要的网络。
2、搭建libtorch开发环境比较方便,因为框架没有那么多依赖库,甚至连官方版本的库都已经编译打包好了。 我们只需要去官网下载相应的库就可以使用了。
3.libtorch支持CUDA并行加速,速度非常快,有利于后期工程应用。
Opencv 是一个图像处理算法的开源库。 使用该库可以轻松地对图像执行一些基本操作。 许多深度学习框架都依赖于 Opencv 库。 opencv官方编译了一些常用版本的库供我们使用,非常方便,但是有时候我们的开发环境对应的库版本并不是现成的。 这时候我们就需要使用cmake工具来编译Opencv源码,得到我们想要的东西。 库版本,本文主要讲这个。
1.我的开发环境
Win1064位系统
Geforce RTX3080主板
VS2017
Opencv3.4.1
2.opencv源码下载
前往Opencv官网下载源码:
需要说明的是,Opencv3.4.1不仅包含了main模块的源码,还包含了一个contrib源码模块,里面包含了一些其他的算法实现,在编译Opencv源码时可以选择性编译。 我们选择一起编译contrib源码,所以需要一起下载两个源码包:
3.cmake编译工具下载
同样去cmake官网下载cmake工具:
根据我的开发环境,我使用的cmake版本是cmake-3.19.7-win64-x64。
4.新建编译文件夹
在某个目录下新建build文件夹(空间要足够大,编译后的文件8G左右),用于存放编译时生成的文件。 为了方便识别,我将文件命名为opencv-3.4.1-vs2017 -build:
5.配置配置
(1)双击cmake-3.19.7-win64-x64bin目录下的cmake-gui.exe文件,打开cmake工具:
(2)选择源代码路径和编译路径。 源码路径就是我们下载的opencv-3.4.1文件夹的路径。 编译路径也是我们在上一步中创建的新文件夹的路径。 它们在我的笔记本电脑上的路径如下。 读者需要在笔记本电脑上遵循该路径。 实际选择的路径:
源代码路径:E:opencvopencv-3.4.1
编译路径:E:opencvopencv-3.4.1-vs2017-build
(3) 点击上图中的配置按钮,开始初步配置。
这里我选择VS2017和x64选项,因为我要编译64位库。 如果读者想要编译32位库,则需要选择Win32。 还需要注意弹出窗口底部的选择“使用默认本机编译器”的选项。
按照上述配置完成后,点击完成按钮开始配置,配置完成后稍等片刻,出现如下界面:
(4) 更改配置选项并进一步配置。
首先需要修改的配置项如下:
A。 检查 BUILD_opencv_world 选项
b. 在OPENCV_EXTRA_MODULES_PATH配置项中选择contrib源码的路径,注意contrib源码文件夹下的modules文件夹:
C。 如果我们的笔记本上提前安装了CUDA,cmake会默认检查CUDA相关的配置项,这意味着需要编译CUDA版本的Opencv。 如果想要编译成功,需要经历很多坑(我自己也经历过,过程很郁闷),所以这里我们就不编译CUDA版本了,并且把CUDA相关的勾去掉配置项:
按照上面更改配置后,再次点击Configure按钮进行配置:
配置完成后,我们发现窗口仍然是绿色的,所以我们需要继续点击Configure按钮进行配置,直到窗口背景由绿色变为紫色:
到这里我们就完成了配置。
(5)生成VS2017工程。
单击窗口中的Generate按钮,生成VS2017项目。 当出现如下界面时,表示生成成功:
6.使用VS2017编译Opencv源码
点击cmake工具界面上的OpenProject按钮,它会手动使用VS2017打开我们生成的Opencv源码项目:
打开的VS2017项目如下。 要连接它,我们需要编译项目:
一般Opencv库分为Release版本和Debug版本,所以我们需要分别编译两个版本。 这里需要注意的是,因为cmake生成项目时,我们选择了x64,所以我们还需要在VS2017界面中选择对应的x64选项,即编译64位库,否则会出现编译错误。
首先我们编译Release版本的库,并在VS2017界面中设置如右图:
然后右键单击解决方案资源管理器中cMakeTargets文件夹下的INSTALL选项,然后左键单击Generate:
之后就是漫长的等待了,祈祷编译顺利(一般不会出问题~)。 当出现下面的提示时,就说明我们成功了,yeah~
这时候我们看一下编译目录。 如果出现以下文件,说明我们想要的库和头文件已经成功编译生成:
(1)在E:opencvopencv-3.4.1-vs2017-buildinstallinclude目录下生成相关头文件。
(2)在E:opencvopencv-3.4.1-vs2017-buildinstallx64vc15lib目录下生成相关lib文件。
接下来,编译该库的调试版本。 编译Release版本的步骤略有不同,只是需要在开始编译之前将版本设置为Debug版本:
同样在解决方案资源管理器中右键单击cMakeTargets文件夹下的INSTALL选项,然后左键单击Generate,然后等待很长一段时间^^
编译完成后,我们会发现E:opencvopencv-3.4.1-vs2017-buildinstallx64vc15lib目录下多了两个lib文件。 这是调试版本库:
至此,Opencv3.4.1+contrib的VS2017_x64_release_debug版本库已经编译完毕。
7.VS2017+Opencv3.4.1环境配置
为了在VS2017的C/C++代码中正常调用Opencv函数,我们还需要做如下设置:
(1)设置环境变量
右键单击“本笔记本”,选择“属性”,进入系统界面:
点击进入中间系统设置,然后点击环境变量选项:
编辑系统变量的Path变量:
在编辑界面点击“新建”,进入刚刚编译生成的bin文件夹目录。 我的目录如下。 读者需要输入自己笔记本的实际目录,然后点击“确认”保存。
E:opencvopencv-3.4.1-vs2017-buildinstallx64vc15bin
(2)配置VS2017项目的头文件目录、库目录以及附加依赖库
假设我们为VS2017的x64/Release版本新建一个空控制台项目,并添加一个主文件,如右图:
为了在主函数中调用Opencv函数,首先我们需要进行以下设置:
A。 Project-->Properties,打开属性页:
b.VC++目录-->包含目录-->选择我们编译生成的头文件目录。 我的头文件目录如下。 读者需要输入自己笔记本的实际目录:
E:opencvopencv-3.4.1-vs2017-buildinstallinclude
c.VC++目录-->库目录-->选择我们编译生成的lib文件目录。 我的lib文件目录如下。 读者需要输入自己笔记本的实际目录:
E:opencvopencv-3.4.1-vs2017-buildinstallx64vc15lib
d. 连接器-->输入-->附加依赖项-->添加依赖库。
如果是Release版本程序,需要添加的库有:
opencv_img_hash341.lib
opencv_world341.lib
如果是Debug版本的程序,需要添加的库有:
opencv_img_hash341d.lib
opencv_world341d.lib
假设是Release版本的程序,添加依赖库如右图:
e. 在main函数中添加测试代码。
#include
#include
#include
using namespace cv;
int main(void)
{
Mat img = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
imshow("img", img);
waitKey();
return 0;
}
编译运行,如果能够正确读取并显示Lena镜像opencv源码编译安装,如右图所示,则说明VS2017+Opencv3.4.1的环境配置成功: