OpenCV 3.1.0 重编译——支持CUDA8.0
2017-03-31 16:30
204 查看
写在前面
最近主要在看机器学习的十大算法,尝试书中提供的示例,实验环境是win7 + python3.4.4 。突然间,我发现新版本的OpenCV对机器学习大部分算法都有很好的实现,原谅我一直停留在2.4版本。相较于python,我更熟悉Visual Studio,相比于Scikit-Learn,我更熟悉opencv_contrib。因此,觉得没必要舍近求远,去做自己不擅长的事情,效率低是一方面,而且学习的积极性也受影响。此外,机器学习大多时候依赖大的数据样本,学习代价高,依赖加速。CUDA加速一直都是热门,我一直没有深入了解,所以学习也从现在开始。本文主要分为两个部分,第一部分,CUDA 8.0 安装;第二部分,利用Cmake,对OpenCV 3.1进行重编译,编译选项中支持GPU加速。编译器选择Visual Studio 2015,操作系统为Win7 SP1 。
前提条件
确保显卡为英伟达,明确显卡的系列型号等,并且正确安装过驱动。一般通过第三方的驱动安装工具如某大师、某精灵等都不太靠谱,我是遇到过类似的坑。NVIDIA显卡驱动卸载与安装
如果有安装过NVIDIA的驱动,个人建议进行如下操作:1. 在英伟达官网下载对应显卡最新驱动:驱动下载地址 注意选择正确的版本;
2. 利用驱动卸载工具DDU(Display Driver Uninstaller) 对旧驱动进行卸载,这里提供个人免费资源链接DDU;
建议在安全模式下卸载显卡驱动程序,系统会自动重启进入安全模式,等待DDU自动弹出后,选择好对应显卡类型,然后执行卸载驱动并重启。如图:
3. 安装前面下载的最新显卡驱动程序,安装过程看:这里,从第五步开始看就好了,前面我认为你已经做好了。
CUDA支持的显卡列表
安装 VS2015+CUDA8.0+OPENCV3.1
VS2015以前常用的VS版本是2010,因为用着习惯一直没有升级。CUDA 8.0好像只兼容vs2012版本及以上,没有去确认,个人建议使用VS2012以上版本。 另外说一句,VS2015只支持win7 SP1及以上系统,在win7 非SP1版本系统上无法安装.net 4.6。Visual Studio 2015 :社区免费中文版
CUDA 8.0
下载
请根据系统下载对应版本,安装类型建议选择local 本地版,如图:
安装注意一点,一定不要选择安装CUDA里面带的驱动,如图:
图上可以发现,我安装过的当前版本是比它包含的版本更新的,所以完全没必要替换的。切记!
详细安装说明请参考CUDA Quick Start Guide以及Installation Guide for Microsoft Windows,建议别偷懒!
验证安装: 我们通过CUDA提供的例子来验证是否安装成功
首先,cmd命令打开命令行窗口输入 nvcc -V ,可以查询到cuda toolkit 版本号,如图:
其次,如果你是默认安装路径,可以在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0 找示例程序,根据VS版本打开对应的Samples工程,这里选择打开Samples_vs2015.sln。找到1_Utilities工程中的deviceQuery项目。编译该项目并设为启动项,该程序是利用CUDA运行时库中的API查询机器中CUDA设备详情的,具体参数含义在此不表。我的运行结果为:
你也可以试着运行bandwidthTest项目,查看运行结果。
如果上述程序没有输出正确的结果,最主要的原因就是显卡的驱动问题。可以尝试重复上面显卡驱动安装步骤,记住先卸载再安装。此外,确保安装的显卡驱动与你的显卡类型是一致的。
OpenCV 3.1.0
官方下载地址
OpenCV版本随个人喜好,建议选择opencv-2.4.13及以后版本。原因是对于cuda 8.0,opencv 3.0,3.1,2.4.10都会报如下错误:
graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared typedef NppStatus (init_func_t)(NppiSize oSize, NppiGraphcutState* ppState, Npp8u* pDeviceMem);
使用opencv2.4.13就没有问题,opencv2.4.13是2016年第一个发布的版本,与cuda 8.0兼容应该最好。
这里使用CMAKE工具进行OpenCV重编译工作,使用CMAKE 3.8版本,工具详细介绍在此不表。
下载OpenCV后进行解压,目录自选,个人推荐D:\Program Files (x86)\opencv310,然后在opencv目录 下新建两个文件夹: cmake_withGPU 以及 build_withGPU。目录如图:
打开Cmake,源目录设置为OpenCV源码目录sources,编译目录设置为上面创建的文件夹cmake_withGPU,点击Configure进行设置,选择VS2015 X64。 如图:
编译过程中,会下载第三方依赖库ffmpeg以及ippicv,由于网络问题可能会出错,解决方法看这里。个人资源也提供了ippcv免费下载。
如果此前没有编译过OpenCV的经验,请百度一下,相关内容很多,细节也很多,此处只说两点:首先,在CMAKE类别中设置CMAKE_INSTALL_PREFIX为上面新建的文件夹build_withGPU,如图:
其次,在WITH类别中确保WITH_CUDA被选中,在CUDA类别中取消如图选项:
最后,Generate生成OpenCV.sln工程文件。
接下来便是OpenCV的编译工作,这是个耗时的过程。此外,如果你使用的OpenCV3.1,即会遇到上面提到的编译错误。解决方法是 打开出错文件graphcuts.cpp,做如图修改:
OpenCV的主要编译过程如图所示:
先编译opencv_core以及opencv_cudacodec看是否出错,如果不出错,基本就没有什么问题了,可以执行ALL_BUILD进行全部编译,最后进行安装INSTALL,会把OpenCV的头文件 库文件以及相关DLL和EXE安装到我们创建的build_withGPU文件夹里,文件的组织形式是与opencv自带的build文件夹一致的。
验证安装:利用opencv自带的sample中两个程序进行验证
第一个是samples\cpp\tutorial_code\HighGUI\video-input-psnr-ssim中的例子,验证OpenCV的基础功能,运行结果如图:
命令行参数是similarity_measurement.exe video/Megamind.avi video/Megamind_bugy.avi 35 10 ,注意要编译成X64版本,因为我们的OpenCV是编译的x64的。
第二个是samples\cpp\tutorial_code\gpu\gpu-basics-similarity中的例子,验证GPU加速是否有效,以及正确的使用方法,运行结果如果:
至此,OpenCV已编译成功,并且支持了最新版CUDA加速,开启飞速模式尽情享受吧!
后记
写文档过程比安装过程还烦,我是先使用VS2013+OPENCV3.1+CUDA8.0一步步编译成功并验证,然后在旧电脑上使用VS2015重复了整个过程,才有了上面的配图。不过说来也有很多收获,因为旧电脑是WIN7旧版系统,非WIN7 SP1而不支持安装VS2015,为此折腾一番,还有更好的OpenCV应该选择最新版本的,安于使用以前熟悉的旧版本是不可取的。总的说来自己不尝试,真的不知道坑在哪。此外,WIN8 WIN10都没有验证过,上述方法只能作为参考了,自己的坑要自己填的。没有N卡的小伙伴也不用担心,后面会说一下Intel IPP的安装和使用。
后面会介绍opencv_contrib这个模块的编译以及使用,也会包括算法理解与源码分析。
Unicorn Lewis, 03.31.2017
相关文章推荐
- opencv3.1.0+cuda8.0+vs2013+win7编译过程错误及解决方法
- Ubuntu16.04+caffe+CUDA8.0+cuDNN v5+opencv3.1.0编译
- 使用CMake 2.8 编译OpenCV 3.1.0 + opencv_contrib扩展 (环境ubuntu14.04 CUDA8.0)
- 编译OpenCV244使其支持GPU-CUDA
- CUDA8.0+OpenCV2.4.13+VS2015+Win10+TBB混合编译
- 在CENT OS 7.0 64位系统上源码编译安装OPENCV3.0以及CUDA7.0,支持CUDA开发,并集成QT5.5.0的开发环境
- [置顶] GTX1070+ubuntu14.04+cuda8.0+opencv3.0.0编译教程
- [置顶] caffe: Ubuntu16.04 + cuda8.0 + cudnn8.0 + opencv3.1.0 + python2.7 + matlab2014b + blas(mkl)
- win7 X64 vs2015 编译opencv-3.2.0 + contrib-3.2.0 + cuda8.0
- ubuntu14.04安装cuda8.0后,编译安装opencv2.4.13.4
- ubuntu14.04 + GTX980ti + cuda 8.0 ---Opencv3.1.0(基础+opecv_contrib)配置
- 解决cuda8.0和opencv编译不兼容
- ubuntu16.04+Cuda8.0+CuDnn v5+OpenCV3.1.0+Matlab2014+Python+Caffe安装
- vs2013 + win8.1 + cuda8.0 手工编译 opencv2.4.9
- caffe编译安装( Ubuntu16.04.3+cuda8.0+opencv3.3.0+anaconda3)
- [OpenCV] 编译源程序 2.4.10 以支持 CUDA
- 如何编译OpenCV-2.3.x/OpenCV-2.4.x使其支持GPU-CUDA高速运算?
- Ubuntu16.04+cuda8.0+opencv3.0.0 caffe编译的那些坑
- Ubuntu16.04 +cuda8.0+cudnn+opencv3.1.0+tensorflow+torch配置明细
- OpenCV 3.2.0 +Win10+ CUDA 8.0+ VS2013 编译