本文主要进行前期的准备环境搭建,包括VS2015的安装,opencv和libtorch的安装配置,适合新手入门~~。在下篇文章C++平台部署(前向预测)pytorch训练好的模型(ResNet50为例)(二)中,将详细介绍使用C++重写前向,使用pytorch训练好的模型进行预测,有需要的同学可以前往查看。
默认已经安装pytorch1.0以上版本,如果没有安装,可以使用如下命令进行安装(CPU版本,若想安装GPU CUDA版本,可以去官网https://pytorch.org/get-started/locally/选择):
conda install pytorch torchvision cpuonly -c pytorch
安装VS2015专业版,安装包传送门:https://pan.baidu.com/s/1ijH8QYctdjGwYAdeXVDgzw ,提取码:6acd
内含激活码。
(1)安装VS2015,时间保守估计两小时左右。
将下载好的安装包解压缩,右键管理员运行vs_professional.exe.exe文件,开始安装
(普通运行只是单纯的运行程序,不能进行更改程序和附加程序,而用管理员身份运行程序将会有更多权限,比如更新,修改等.)
(2)激活VS2015
打开vs2015,点击帮助->注册产品,输入激活码(激活码.txt在安装包中可以找到)。
VS2015企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
VS2015专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2
(3)启动VS2015,安装适用于C++
文件->新建->项目,在线安装适用于Windows桌面的Visual C++ 2015工具。
又是下面的安装界面,大约需要几分钟。
(4)重新启动VS2015,新建VS空项目,Hello World验证。
在新建项目源文件中,添加cpp文件。
选择 Debug x64,运行代码。
运行成功,则VS2015安装成功。
血泪教训:建议大家安装完毕VS2015后,不要卸载重新安装,不要卸载重新安装,不要卸载重新安装。因为在卸载的过程中,会留下残留文件,不知道哪里就出错了。我前前后后重装了三遍,终于才成功,费时费力,历经挫折。遇到的问题①:进入VS2015起始页后,鼠标点击没有反应;问题②:点击帮助->注册产品失败。在网上找了几个方法,删除C:\Users\Sesen\AppData\Roaming\Microsoft\VisualStudio\14.0目录下的Cache缓存文件夹,说是由于缓存文件紊乱引起的。删除之后,在“控制面板”的程序与功能中,更改VS2015,进行修复。(最后,被修复好了)
如果真的遇到问题需要重新安装,遇到问题的话,最简单粗暴的方法是重装系统(但是大家内心肯定都是拒绝的)。不重装系统也可以,就是卸载VS时,一定要卸载干净。推荐两篇不错的文章,我没有实测,大家有需要的话可以看看。VS2015终极卸载方法(适用于VS各种版本)和超简单的卸载vs2015总结(亲测可用)。
(1)安装
安装包:链接:https://pan.baidu.com/s/18VzP_ilsVWEO-3LglfQcCw 提取码:80zn
里面包含Windows,IOS及Android平台的安装包。选择Windows安装包,双击opencv-3.4.5-vc14_vc15.exe进行安装。
选择将要提取安装的路径,记住此路径D:\Sense's_Software\opencv,在后续配置VS库目录及依赖项是需要添加。
开始提取,大约需要50秒左右:
安装完成后,目录为这个样子。
(2)配置opencv环境变量
右键点击我的电脑->属性->高级系统设置->环境变量,双击系统变量->PATH
点击新建,加入安装opencv的bin目录,注意是 D:\Sense's_Software\opencv\build\x64\vc14\bin,而不是D:\Sense's_Software\opencv\build\bin。
设置系统环境变量后,需要重启系统生效。
LibTorch是pytorch的c++接口,也就是PyTorch C ++ API。一般来说,常见的模式为(1)用python接口来训练模型(2)转换成c++模型(3)用c++重写前向。Pytorch1.0以上的版本允许Python模型转换为可以加载和执行的序列化表示 纯粹来自C ++,不依赖于Python。即可以只用c++来编写模型的预测阶段(当然使用C++训练也可以,只是开发起来比较慢,,还是推荐python训练,然后转换成c++模型,用c++来写前向)。
安装libtorch开始:在 https://pytorch.org/get-started/locally/下载适合于自己的libtorch版本,不同的电脑配置所需的版本是不一样的。
我的环境为配置CPU下无CUDA版本的libtorch,可下载release版本或debug版本(release和debug不同的版本在VS2015中调试时有区别)。release版本:https://download.pytorch.org/libtorch/cpu/libtorch-win-shared-with-deps-1.4.0.zip,debug版本:https://download.pytorch.org/libtorch/cpu/libtorch-win-shared-with-deps-debug-1.4.0.zip
下载速度挺慢的,如果跟我需要的release版本一致,可以到这里提取:链接:https://pan.baidu.com/s/1z6WUMjuc5PFxnroNz8-yMA
提取码:nrut 。
下载好之后解压缩,放在自己方便的路径下。记住路径D:\libtorch,在VS2015中配置需要此路径。
这个过程有有点像在pycharm中,python语言添加opencv,torch库有点像。
类似地,可以使用conda install cv2,conda install torch添加python语言依赖库,也可以使用cmake来进行添加VS2015(C++)所依赖的opencv及libtorch等(这个方法还没研究明白,后续再学习一下,如这篇博客https://blog.csdn.net/adyf3/article/details/85003893)。
在这里,提供一种对于新手比较友好的方式,采用比较简单的可视化方法添加库,就像在pycharm里面setting导入依赖包一样。
(1)opencv添加到VS2015
新建一个VS空项目,打开属性管理器(视图-其它窗口-资源管理器)。
选择Debug x64,进入Microsoft.Cpp.x64.user设置。
首先,VC++ 目录->包含目录中,添加opencv的三个路径,在我的环境中分别为
D:\Sense's_Software\opencv\build\include
D:\Sense's_Software\opencv\build\include\opencv
D:\Sense's_Software\opencv\build\include\opencv2
其次,VC++ 目录-> 库目录中,添加 D:\Sense%27s_Software\opencv\build\x64\vc14\lib。
随后,在链接器->输入->附加依赖项中,添加D:\Sense's_Software\opencv\build\x64\vc14\lib\opencv_world345d.lib,这是opencv3.4.5的debug版本,添加D:\Sense's_Software\opencv\build\x64\vc14\lib\opencv_world345.lib,opencv3.4.5的release版本)。**题外话:Debug 和 Release 并没有本质的区别,只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。Debug和Release,主要是针对其面向的目标不同的而进行区分的。Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。**
至此,opencv添加至VS2015中。(这样的配置方式,需要为每个新建项目执行同样的操作,在本文的最后tips有一劳永逸的方法,有兴趣的同学可以尝试一下)。
(2)验证opencv安装成功
测试工程下载地址:链接:https://pan.baidu.com/s/13zUdhhCwn3T2COqDrLsKhg ,提取码:6kat
双击打开test.sln
看见女神的照片就说明opencv导入成功了。
如果此处出现加载不到opencv包的情况,即下面几行代码出现红线,则说明添加的包含目录以及库目录不正确。重新去选择文件夹路径添加,不要手动输入添加。
#include
#include
#include
(3)将libtorch添加到VS2015
找到libtorch解压后的位置。我的环境中,libtorch位于D:\libtorch。此处,libtorch下载的是release发布版本,debug版本步骤基本相同。
开始配置
同样,新建一个VS空项目,打开属性管理器(视图-其它窗口-资源管理器),选择Release|X64进行配置属性页。(如果下载的是Debug版本的libtorch,则像opencv配置时一样,选择Debug | X64)。
①,在VC++ 目录->包含目录中,添加D:\libtorch\include(不要复制粘贴路径,去选中添加)
②,在VC++ 目录-> 库目录中,添加D:\libtorch\lib。
③,在C/C++ -> SDL检查中,设置为否。
④,链接器->常规->添加库目录中,添加D:\libtorch\lib。
⑤,在链接器->输入->附加依赖项,
方法一:添加绝对路径D:\libtorch\lib\c10.lib,D:\libtorch\lib\torch.lib
方法二:添加相对路径c10.lib,torch.lib
二者的区别在于下一步骤,是否需要把库.lib文件复制到现有项目工程中。视自身需要而定。
⑥,对应于⑤方法一,将libtorch的lib目录下的.dll文件全部复制到VS项目中去;对应于⑤方法二,将libtorch的lib目录下的.dll文件和.lib文件全部复制到VS项目中去。
放置文件的位置为与主CPP文件同一目录下,
(4)验证libtorch添加成功
测试代码: 导入torch依赖包,选择release | X64进行测试。(如果在上一步中添加的是libtorch的Debug版本,那么这个应该选择Debug | X64)运行。
至此,配置成功。
Tips:制作一个属性表,这样就不用每次新建项目时,都需要配置库目录及依赖项等。(其实VS2015不用这样操作,每次新建项目,会继承上次设置的属性值)
① 选择一个项目,打开属性管理器,在release| Win x64那一栏右击添加新项目属性表。
② 给属性表命名,设置好存放地址。以后有其他工程项目,只需要把这个属性表添加到那个工程里面,就算是配置好LibTorch了,很方便。
③ 开始配置新建的属性表,双击打开,步骤和上述配置库目录和依赖项的步骤一致。不再赘述。