Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】

  • 系统 Ubuntu20.02
  • NVIDIA驱动版本 >=465
  • CUDA版本 11.2.2
  • cudnn版本 8.1.1
  • Opencv版本 4.5.2

辅助工具 cmake-gui:用来编译opencv 

NVIDIA驱动下载 https://www.nvidia.cn/geforce/drivers/

CUDA下载 https://developer.nvidia.com/cuda-toolkit-archive

cudnn下载 https://developer.nvidia.com/rdp/cudnn-archive (需要登录开发者账号)

NVIDIA和CUDA下载linux x64 .run版本

cudnn下载deb版,就是下面三

Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第1张图片

注意事项:驱动版本一定要高于CUDA要求版本,具体CUDA版本需求可在https://docs.nvidia.com/cuda/archive/11.3.0/cuda-toolkit-release-notes/index.html查看驱动需求

这里就直接贴出来

Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第2张图片

查看系统目前驱动版本

nvidia-smi

 表格第一行分别是smi版本,驱动版本和CUDA版本,这里我单独安装的smi包导致版本不一致,不用管没影响(目前)

 Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第3张图片

 

OpenCV版本一定是4.5.2+,否则cudnn不支持,cmake时会报错找不到cudnn


安装步骤

1.命令行切换到下载目录,修改权限并运行安装

sudo chmod 777 NVIDIA-Linux-x86_64-465.31.run

sudo ./NVIDIA-Linux-x86_64-465.31.run

如果提示用系统其他方法安装一律忽略

安装后使用nvidia-smi查看是否安装成功

2.安装cuda包

sudo chmod 777 cuda_11.3.1_465.19.01_linux.run

sudo ./cuda_11.3.1_465.19.01_linux.run

可能需要等一段时间运行,弹出如下安装界面,输入accept

Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第4张图片

在安装界面,取消驱动Driver的安装,其余默认即可,安装前界面应如下:

Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第5张图片

安装完成后会出现汇总信息

之后进行环境配置,打开~/.bashrc文件编辑

sudo gedit ~/.bashrc

#修改PATH和LD_LIBRARY_PATH和CUDA_HOME变量

CUDA_HOME=/usr/local/cuda-11.2/bin:$CUDA_HOME
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64
PATH=$PATH:$CUDA_HOME

保存文件后

source ~/.bashrc

之后输入nvcc -V测试

nvcc -V 

出现如下结果安装成功

3.安装cudnn

依次执行

sudo dpkg -i libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb
sudo dpkg -i libcudnn8-dev_8.1.1.33-1+cuda11.2_amd64.deb
sudo dpkg -i libcudnn8-samples_8.1.1.33-1+cuda11.2_amd64.deb

 安装成功,注意,利用deb包安装后的cudnn文件路径在/usr/include目录下,与之前大部分默认的/usr/local/cuda-XX/include路径不同,因此按照网上查的版本号显示文件不存在不用惊慌

4.编译安装OpenCV+OpenCV_contrib包

下载OpenCV及其对应的OpenCV_contrib包

OpenCV源码包下载地址:https://github.com/opencv/opencv/releases

OpenCV_contrib源码包下载地址:https://github.com/opencv/opencv_contrib/releases

解压,在OpenCV源码包中新建build文件夹

执行cmake-gui指令,要用root权限,搜索EXTRA字段,指定文件夹到OpenCV_contrib/modules目录下

cd opencv-4.5.2

mkdir build

sudo cmake-gui

搜索CUDA字段,勾选

Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第6张图片

指定编译版本为Release

搜索PYTHON勾选

Ubuntu20.02下CUDA11.2+cudnn8.1.1+opencv+opencv_contrib4.5.2编译【保姆全套教程(持续更新)】_第7张图片

点击Configure,等待生成无误后点击Generate

注意查看Configure的信息是否有cudnn版本

关闭cmake-gui,在build目录执行

sudo make -j8

sudo make install

安装成功安装编译后配置环境,依旧打开~/.bashrc添加PKG_CONFIG_PATH

sudo gedit ~/.bashrc

#添加路径PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH

#保存退出

sudo ldconfig -v

source ~/.bashrc

完成配置


错误排除(持续更新)

1. make OpenCV时报错error boostdesc.cpp xxxxxx not declare

查阅报错位置和include文件位置,发现自己的缓存文件竟然是一个空的(掀桌,空编译了好几次)

从网上下载对应文件放到指定目录即可,具体可看https://github.com/opencv/opencv_contrib/issues/1301解决方法(对于解决缺少boostdesc_lbgm.i等文件报错也有用)

主要有如下代码(github中BenbenIO的解决方法):

#!/bin/bash

#主要是在opencv源码包中的隐藏目录.cache文件 即opencv源码包文件  当前目录为 ~/opencv-4.5.2/
cd ./cache/xfeatures2d/      
cd boostdesc

curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i > 0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i > e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i > 98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i > 202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i > 324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i > 232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i > 0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
cd ../vgg
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i > 151805e03568c9f490a5e3a872777b75-vgg_generated_120.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i > 7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i > e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i
curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i > 7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i

如果遇到权限不足的问题,直接修改boostdesc文件夹权限为777,简单粗暴= =

以上(持续更新)

若遇到其它问题可留言,后续继续补充此答案汇总,有需要源码包的朋友可留言邮箱或私信发,后续补充会在这里放上链接自取


2021.6.10更新

重装了nvidia驱动,要命。。

提示nvi_drm错误已加载

卸载nvidia驱动:

nvidia-uninstall

sudo apt-get --purge nvidia*

禁用图形桌面,在命令行输入

sudo isolate multi-user.target

黑屏不要慌,按Ctrl+Alt+F3~7其中一个弹出tty界面,输入

sudo modprobe -r nvidia_drm

 之后重新运行安装程序,在显示使用DK*那一步选择否即可

 

 

你可能感兴趣的:(opencv,cuda,cudnn,ubuntu)