基于CUDA和Intel INF_BACKEND的OpenCV4编译

CUDA和cudnn的安装参考

cuda和cudnn安装

Opencv安装

记录于2019-11-01
由于opencv迭代更新较快,从

git clone https://github.com/opencv/opencv.git

最新从git拉下来的opencv以支持cuda作为dnn模块的backend,这个在测试yolov3的时候发现了可怕的速度(约0.037s一帧,含极少部分opencv图像处理)
并且对于gpu占用率并不算特别高,大概在1G显存以内
感觉达到了以OpenCV作为基础进行一些通用视觉解决方案调用的需要,但还是先需要在intel计算棒或者小型gpu上测试(例如T440P)

开始编译前,先来看这个提交
在这里插入图片描述这个提交为dnn模型融合了cuda的后端支持,提交记录里面具体说明了细节。
这样可以在使用opencv dnn时也实现gpu加速了
很激动,开始编译最新的opencv4.1.2进行尝试

安装正式开始
首先,由于不少特征匹配(主要是non free)那一部分的模组modules还在opencv扩展库当中,故从opencv那边把contrib库拉下来

git clone https://github.com/opencv/opencv_contrib.git

放在opencv目录下(或自己的目录)
若不想使用opencv扩展库,可以在编译过程中去掉

-D OPENCV_EXTRA_MODULES_PATH

OpenCV编译

cd opencv
mkdir build
cd build

以下是在小米游戏本配置好了cuda,cudnn和openVIVO环境下,进行的opencv-4.1.2的编译的编译选项,为支持CUDA backend,支持后续需要调试的神经单元计算棒,有那么多的选项

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_CUDA=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_INF_ENGINE=ON -D ENABLE_CXX11=ON -D CUDA_ARCH_BIN=61 -D CUDA_ARCH_PTX=61 -D OPENCV_ENABLE_NONFREE=ON ..

其中
CMAKE_INSTALL_PREFIX=/usr/local
安装路径
WITH_TBB=ON 英特尔 threadingbuildingblocks的库,这里在编译中可能有个坑,预留到后面问题二当中
EXAMPLE的如果愿意编译可以编译,不想变异可以去掉,推荐全开
其他选项中,我打开了QT,V4L,OPENGL,支持,若出现本地库缺失的情况,请依照apt-get 等方法进行安装
ENABLE_FAST_MATH
CUDA_FAST_MATH
WITH_CUBLAS
WITH_CUDA
这几项需要完成好cuda和cudnn的安装,避免因为库目录库路径问题导致编译中途出错
CUDA_ARCH_BIN
请根据自己显卡的计算能力进行来填写,不填写的时候opencv cmake…会要求你选择,CUDA_ARCH_PTX与其一致即可
OPENCV_GENERATE_PKGCONFIG=ON
方便你在命令行中进行

pkg-config --libs opencv4

查看引用,和一些你想编译的带有opencv库的C++时,更快速的引用到库
WITH_INF_ENGINE=ON
ENABLE_CXX11=ON
这两个,准确说是INF_ENGINE backend的支持这个,需要预先安装好openVINO,这一部分可以参考intel 官网中的教程 openVINO环境配置
了解更多关于Intel’s Deep Learning Inference Engine (DL IE)部分可以到 这里
这里完成介绍后,我们看cmake 出来的结果
在这里插入图片描述三部分都带上了具体版本的确认,问题不大开始编译
命令行中继续输入

make -j8
sudo make install

完成opencv库编译
然后

pkg-config --modversion opencv4

就可以看见装在系统中opencv4的版本
至此安装结束,欢迎补充编译安装问题

ps :我这边编译中出现的问题

问题一

在这里插入图片描述
这里是由于扩展库找不到对应的cublas.hpp文件,所以编译不通,不确定是否为现版本会出现的问题,因为我是直接在
在这里插入图片描述
这里下载的release包后放入opencv出现找不到头文件的情况
解决办法采用了暴力解决的方式,直接更改了它的头文件引用为上述绝对路径
这样即可以继续编译

问题二

Linking CXX executable …/…/bin/opencv_perf_dnn
/opt/intel/openvino_2019.3.376/deployment_tools/inference_engine/lib/intel64/libinference_engine.so:对‘tbb::interface7::internal::task_arena_base::internal_max_concurrency(tbb::interface7::task_arena const*)’未定义的引用
在这里插入图片描述
这个问题属于预编译中的提到的
“WITH_TBB=ON 英特尔 threadingbuildingblocks 这里有个坑,预留到问题二当中”
这里说是一个坑,主要原因是库路径在安装openVINO时为完全设置导致的
因为环境中存在两个libtbb的库,导致引用不同库时,出现未定义的引用

首先简单看了下
https://github.com/opencv/opencv/issues/14262
这个opencv issue里面讨论到的相关问题

然后先ldd 查看了安装openVIVO时所链接的库
在这里插入图片描述
并且查找了系统内存在的libtbb.so库
在这里插入图片描述
得出一个结论,即在安装openVIVO时,并未完全配置好环境,虽然~/.bashrc里面是添加了

source /opt/intel/openvino/bin/setupvars.sh

因此顺着
https://github.com/opencv/opencv/issues/14262
的评论

sudo nano /opt/intel/openvino/bin/setupvars.sh

找到里面对应部分的LD_LIBRARY_PATH设置,做出了以下更改

if [[ "$OSTYPE" == "darwin"* ]]; then
        export DYLD_LIBRARY_PATH=$INSTALLDIR/deployment_tools/inference_engine/external/mkltiny_mac/lib:$INSTALLDIR/deployment_tools/inference_engine/external/tbb/lib:$IE_PLUGINS_PATH:$DYLD_LIBRARY_PATH
        export LD_LIBRARY_PATH=$INSTALLDIR/deployment_tools/inference_engine/external/mkltiny_mac/lib:$INSTALLDIR/deployment_tools/inference_engine/external/tbb/lib:$IE_PLUGINS_PATH:$LD_LIBRARY_PATH
    else
#        export LD_LIBRARY_PATH=/opt/intel/opencl:$HDDL_INSTALL_DIR/lib:$INSTALLDIR/deployment_tools/inference_engine/external/gna/lib:$INSTALLDIR/deployment_tools/inference_engine/external/mkltiny_lnx/lib:$INSTALLDIR/deployment_tools/inference_engine/external/tbb/lib:$IE_PLUGINS_PATH:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=$HDDL_INSTALL_DIR/lib:$INSTALLDIR/deployment_tools/inference_engine/external/gna/lib:$INSTALLDIR/deployment_tools/inference_engine/external/mkltiny_lnx/lib:$INSTALLDIR/deployment_tools/inference_engine/external/tbb/lib:$IE_PLUGINS_PATH:$LD_LIBRARY_PATH

因为我实际上在安装openVINO时没有安装其自带的opencl库,要去掉对应部分
重新source之后
在这里插入图片描述
因此我尝试了重新make一下,发现
在这里插入图片描述
!在这里插入图片描述](https://img-blog.csdnimg.cn/20191101171023434.png)
是能够正常make通过的,库连接正常并无问题

最后从 opencv/build/bin/ 中

ldd opencv_perf_dnn

也可看出tbb库正常连接了

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值