Ubuntu20.04+GeForce RTX 2080 SUPER+cuda11.1+cudnn8.0.4+openCV4.4.0环境搭建
- 1.Ubuntu20.04系统安装
-
- 1.1 制作系统盘
- 1.2 安装Ubuntu20.04系统
- 1.3 更换国内镜像源
- 1.4 安装fcitx输入法
- 2.NVIDIA显卡驱动安装
-
- 2.1 查看显卡型号并下载对应驱动
- 2.2 安装NVIDIA显卡驱动
-
- 2.2.1 禁用nouveau驱动
- 2.2.2 安装NVIDIA驱动
- 3.CUDA11.1安装
- 4.CUDNN8.0.4安装
- 5.OpenCV4.4.0编译
-
- 5.1 安装依赖包
- 5.2 下载opencv-4.4.0和opencv_contrib-4.4.0
- 5.3 安装OpenCV
-
- 5.3.1 Configure
- 5.3.2 Generate
- 5.3.3 带CUDA编译
- 5.3.4 make
- 5.3.5 配置环境变量
- 6.OpenCV测试程序
- 7.YOLO v3测试
- 参考
经过将近一个月的折腾,终于安装、编译成功,在此做一个记录,以备日后快速搭建环境,也希望能给各位踩坑的小伙伴一点参考。
1.Ubuntu20.04系统安装
1.1 制作系统盘
下载Ubuntu20.04系统镜像和U盘启动制作工具,使用UltraISO制作Ubuntu20.04系统盘。
- 启动UltraISO,点击“继续试用”
- “文件”–>“打开”,选择下载好的Ubuntu镜像
- “启动”–>“写入硬盘镜像”,磁盘驱动器选择提前准备好的闲置U盘,先“格式化”U盘,然后“写入”,等待写入完成即可。
1.2 安装Ubuntu20.04系统
- 插入第一步做好的系统盘,开机,出现主板图标时按下F11/F12(不同电脑和主板有所差别,可以根据自己的电脑型号查找)进入快速启动项界面,选择制做好的系统盘
- 在弹出的界面中选第一项“Ubuntu”
- Ubuntu20.04安装前首先会检测磁盘,等待检测完成即可
- 选择语言,个人建议如果安装Ubuntu系统是用来做开发,语言最好选择English,不要选中文,会避免以后很多不必要的麻烦
- 点击"Install Ubuntu"
- "Keyboard layout"同样选择英文
- 如果有无线网卡的话,会弹出连网的界面,这里选择不连接WIFI
- “Updates and other software”界面,我选择的是"Minimal installation",这样安装过程会快一些,而且不会安装一些不需要的软件。(Normal installation会安装web浏览器、公用程序、办公软件、游戏和媒体播放器,Minimal installation只会安装web浏览器和基本实用程序)
- “Installation type”界面选择“Something else”,自己进行分区
-
分区按以下顺序进行:
!EFI一定要放在最前面- EFI:主分区,建议不小于512M,这里我分配了2G
- 挂载点 / :逻辑分区,ext4日志文件系统,用于存放系统,建议根据自己的磁盘大小分配的大一点,这里我分配了200G(磁盘共1T)
- swap(交换空间):逻辑分区,大小与电脑的真实内存大小一致,这里我的是32G内存
- 挂载点 /home :逻辑分区,ext4日志文件系统,将剩余空间全部分配给它
- 分区完成后,安装启动引导器的设备选择整个磁盘,点击"Install Now"–>“Continue”
- 选择时区,“Shanghai”
- 输入用户名和密码
- 开始安装,等待完成
- 安装完成后,重启
- 重启后按提示拔出U盘后按回车键
- 进入登录界面,安装成功
- 最小安装后没有office软件
1.3 更换国内镜像源
注: 我的台式机装完后无法上有线网,如果有同样问题的小伙伴可以到github下载r8125的网卡驱动,自行安装,可以参考这篇文章
- 打开应用中心–>“Software & Updates”
- “Download from”选择“Other…”
- 找到"China",选择适合的源,也可以点击"Select Best Server"自动选择
- “Choose server”–>“Close”–>“Reload”
- 打开终端“Ctrl + Alt + T”,输入sudo apt-get update
1.4 安装fcitx输入法
- 卸载IBUS
sudo apt-get purge ibus
- 打开ubuntu软件中心,搜索fcitx,把带企鹅图标的软件都装上,这里我没有选择fcitx5
- 安装输入法码表,这里装的五笔拼音
sudo apt-get install fcitx-table-wbpy
-
其他输入法如下:
- 拼音:fcitx-pinyin、fcitx-sunpinyin、fcitx-googlepinyin、fcitx-sogoupinyin
- 五笔:fcitx-table、fcitx-table-wubi、fcitx-table-wbpy
-
防止出现两个输入法图标
sudo apt remove fcitx-ui-classic
- 选择fcitx为系统输入法,“设置”–>“Region & Language”–>“Manage Installed Languages”–>弹出的对话框选“Remind Me Later”–>"Keyboard input method system"选择fcitx–>“close”
- 重启系统
sudo reboot
- 点击右上角出出现的企鹅图标–>ConfigureFcitx
- 点击“+”–>去掉"Only Show Current Language"前面的勾–>下方搜索框中输入"wb"–>选择"WubiPinyin"–>“OK”
- 至此,Ubuntu20.04安装完成
2.NVIDIA显卡驱动安装
2.1 查看显卡型号并下载对应驱动
- 查看自己的显卡型号,终端输入:lspci | grep -i vga,返回的是一个十六进制的代码(图中的显卡是1650 SUPER)
- 如果已经安装了NVIDIA驱动,就会显示显卡型号
- 打开这个网站:The PCI ID Repository,在下方的输入框中输入十六进制代码查询相应的显卡型号
- 当然,如果已经安装了NVIDIA的显卡驱动,也可以直接在终端输入nvidia-smi查看显卡型号及驱动等信息
- 根据自己的显卡型号,到NVIDIA官网下载对应的驱动 (这里的网址只是GeForce类型的驱动,如果是TITAN或Quadro等可以在这个网址下载,下载步骤类似)
2.2 安装NVIDIA显卡驱动
2.2.1 禁用nouveau驱动
- nouveau是由第三方为NVIDIA显卡开发的一个开源3D驱动,Ubuntu默认集成了nouveau驱动,若不禁用,安装时会报错
- nouveau禁止命令写入文件,打开以下文件
sudo gedit /etc/modprobe.d/blacklist.comf
- 文件末尾添加以下语句,保存退出
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
- 调用指令禁止nouveau
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
- 更新内核
sudo update-initramfs -u
2.2.2 安装NVIDIA驱动
- 重启系统
sudo reboot
- 进入tty模式,这里F1~F6都可以,我的是F2进入,输入用户名和密码登录(注意这时小键盘不能用,我的电脑这里报了一个声卡的错误,按Ctrl+C强行关掉就行,不会影响后面的安装)
ctrl + alt + F2
- 关闭lightdm
sudo service lightdm stop
- 如果上面指令提示Failed to stop lightdm.service: unit lightdm.service not loaded.
则先安装lightdm:sudo apt install lightdm ,弹出的界选择lightdm,再用上面的指令关闭
- 继续输入
sudo init 3
- 切换到下载的NVIDIA驱动安装包所在目录,赋予可执行权限并安装
cd ~/Download
chmod +x NVIDIA-Linux-x86_64-455.28.run
sudo sh NVIDIA-Linux-x86_64-455.28.run --no-opengl-files
注意:no前面是两个横杠,否则会导致安装失败
- 接着会出现一些界面,按下面所示选择安装
1、An alternate method of installing the NVIDIA driver was detected. 选择continue installation
这个应该是推荐你通过Ubuntu的“Software & application”中的“Additional Drivers”安装驱动,不用管,继续安装
2、The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
3、Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择NO继续
4、Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 Yes 继续
5、Install NVIDIA’s 32-bit compatibility libraries? 选择No 继续
注1:如果提示找不到gcc和make,可以在命令行中安装gcc和make后再安装驱动
sudo apt-get install gcc
sudo apt-get install make
注2:如果出现下面的错误提示,是因为bios的Secure Boot打开了,需要进入bios关闭
The target kernel has CONFIG_MODULE_SIG set, which means that it supports cryptographic signatures on kernel modules. On some systems, the kernel may refuse to load modules without a valid signature from a trusted key. This system also has UEFI Secure Boot enabled; many distributions enforce module signature verification on UEFI systems when Secure Boot is enabled. Would you like to sign the NVIDIA kernel module?
- 上面的错误都排除掉,安装完成
- 完成后输入nvidia-smi查看显卡信息,如果显示如下内容,说明安装成功
- 重启
sudo reboot
- 重启后打开终端,输入nvidia-smi
- 输入nvidia-settings,如果如下图显示,说明安装成功
3.CUDA11.1安装
- 在NVIDIA开发者官网下载CUDA,选择自己对应的系统和安装方式,下方会出现对应的安装指令,推荐使用runfile方式安装,如果想安装之前的版本,可以到这里下载
- 下载cuda(如果是比较早的版本,需要把安装文件和所有补丁文件都下载,然后运行)
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
- 下载完成后,进行安装
sudo sh cuda_11.1.0_455.23.05_linux.run
- 输入accept
- 因为之前已经安装好了显卡驱动,安装CUDA时不需要选择显卡驱动,按回车即可取消前面的X,Install
- 最后会提示安装未完成,是因为我们没有选择显卡驱动,不用管,只要显示下面的内容就是安装成功
- 添加环境变量,打开profile文件
sudo gedit /etc/profile
- 在末尾处添加以下内容(注意不要有空格,不然会报错)
export PATH=/usr/local/cuda-11.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64$LD_LIBRARY_PATH
- 重启电脑
sudo reboot
- 测试CUDA是否安装成功,按以下指令编译、运行,如果显示有关GPU的信息,说明安装成功
cd /usr/local/cuda-11.1/samples/1_Utilities/deviceQuery
sudo make
/deviceQuery
- 也可以输入nvcc -V查看CUDA版本
nvcc -V
4.CUDNN8.0.4安装
- 到官网下载与CUDA11.1对应的CUDNN版本,下载CUDNN需要注册NVIDIA开发者账号
注:建议高版本的cudnn下载deb安装包进行安装,直接安装即可,不需要复制文件
- 登录–>同意
- 下载cuDNN8.0.4
-
cuDNN Runtime Library for Ubuntu18.04 x86_64
-
cuDNN Developer Library for Ubuntu18.04 x86_64
-
cuDNN Code Samples and User Guide for Ubuntu18.04 x86_64
-
- 下载完成按以下顺序分别安装三个安装包
- 注:这里一定要按顺序安装
sudo dpkg -i libcudnn8_8.0.4.30-1+cuda11.1_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.4.30-1+cuda11.1_amd64.deb
sudo dpkg -i libcudnn8-samples_8.0.4.30-1+cuda11.1_amd64.deb
- CUDNN安装完成
5.OpenCV4.4.0编译
opencv安装过程中会有很多文件不能下载导致安装失败,如果有需要到文末百度云下载。
5.1 安装依赖包
sudo apt-get update -y # Update the list of packages
sudo apt-get remove -y x264 libx264-dev # Remove the older version of libx264-dev and x264
sudo apt-get install -y build-essential checkinstall cmake pkg-config yasm
sudo apt-get install -y git gfortran
sudo add-apt-repository -y “deb http://security.ubuntu.com/ubuntu xenial-security main”
sudo apt-get update
sudo apt-get install -y libjpeg8-dev libjasper-dev libpng12-dev
sudo apt-get install -y libtiff-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install -y libxine2-dev libv4l-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y qt5-default libgtk2.0-dev libtbb-dev
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get install -y libvorbis-dev libxvidcore-dev
sudo apt-get install -y libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install -y x264 v4l-utils
安装以上依赖我并没有出错,如果出现错误提示,这里列出几个错误及解决方案,具体参考这篇博客
- 错误一:
E: Unable to locate package libjasper-dev
- 解决方法:
sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
sudo apt-get update
sudo apt-get install libjasper-dev
- 错误二:
E: Unable to locate package libgstreamer0.10-dev\
- 解决方法:
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
5.2 下载opencv-4.4.0和opencv_contrib-4.4.0
OpenCV 4.4.0:
https://github.com/opencv/opencv/tags
OpenCV contrib 4.4.0
https://github.com/opencv/opencv_contrib/tags
- 下载完成后在主目录下新建software目录
cd ~
mkdir software
- 解压opencv到software
cd Download
tar -zxvf opencv-4.4.0.tar.gz -C /home/username/software
tar -zxvf opencv_contrib-4.4.0.tar.gz -C /home/username/software/opencv4.4.0
5.3 安装OpenCV
5.3.1 Configure
- 安装cmake-gui
sudo apt-get install cmake-gui
- 进入software/opencv-4.4.0目录,新建build目录,进入build目录并运行cmake-gui
cd /home/username/software/opencv-4.4.0
mkdir build
cd build
cmake-gui …
注意:cmake-gui后面的两个点不能丢
- 弹出的CMake图形化界面,确认上面的两个路径
/home/username/software/opencv-4.4.0
/home/username/software/opencv-4.4.0/build
- 点击Configure–>选择Unix Makefiles–>Finish
- configure过程会下载一些文件,一般因为网络问题会出现下面的错误
- 这是因为下载ippicv_2020_lnx_intel64_20191018_general.tgz这个文件时出错,需要手动从github下载该文件,下载链接如下
https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20191018/ippicv
注:其他opencv版本如果不知道对应的文件,可以先Configure一次,完成后查看红色信息会找到对应的版本,从官网下载对应的文件即可,可以参考这篇博客
- 将下载好的文件放在/home/username/software/opencv-4.4.0/3rdparty/ippicv目录下,并且打开该目录下的ippicv.cmake文件,将第42行的网址注释掉,改为
“file:/home/username/software/opencv-4.4.0/3rdparty/ippicv/”
- 保存后退出
- 重新Configure,没有红色错误,成功
5.3.2 Generate
-
Configure完成后,对4个地方进行修改:
-
CMAKE_BUILD_TYPE处选择Release,如果没有选项手动输入即可;下方的CMAKE_INSTALL_PREFIX保持默认路径/usr/local
-
OPENCV_EXTRA_MODULES_PATH处选择/home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/下的modules目录
-
OPENCV_GENERATE_PKGCONFIG选项打勾,这一项是用来生成opencv.pc文件,很重要
-
BUILD_opencv_world选项打勾,默认是不勾选的,勾选后最后只会产生一个库文件
-
-
直接Generate通常会失败,同样是因为下载文件出错
- 所以我们提前下载好,下载失败的文件有:
boostdesc_lbgm.i
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_48.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_120.i
face_landmark_model.dat
- 前面11个文件对应opencv_contrib-4.4.0目录下的/modules/xfeatures2d/中的文件,最后一个文件face_landmark_model.dat对应的是opencv_contrib-4.4.0目录下的/modules/face/中的文件
- 前7个文件的下载链接:
https://github.com/opencv/opencv_3rdparty/tree/contrib_xfeatures2d_boostdesc_20161012
- 第8个到第11个文件的下载链接:
https://github.com/opencv/opencv_3rdparty/tree/contrib_xfeatures2d_vgg_20160317
- 11个文件下载完成后全部复制到/home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/src目录下,然后进入home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/cmake目录中
- 打开download_boostdesc. cmake文件,把第27行的网址注释掉,改为
“file:/home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/src/”
- 同样的,打开download_vgg.cmake文件,把第21行的网址注释掉,改为
“file:/home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/src/”
- 最后一个文件face_landmark_model.dat的下载链接是:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat
这个链接不太好用,直接上网盘下载
- 下载后放入home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/modules/face目录下,打开该目录下的CMakeLists.txt文件,把第19行的网址注释掉,改为
“file:/home/username/software/opencv-4.4.0/opencv_contrib-4.4.0/modules/face/”
- 重新Generate,出现Configuring done和Generating done后,确认没有红色报错
5.3.3 带CUDA编译
- 在搜索框中输入cuda,出现的所有选项都打勾
- 搜索test,出现的所有选项都取消勾选
- 选项ENABLE_FAST_MATH上打勾
- 再次点击Configure,出现Configuring done后,确认没有红色错误,确认找到CUDA和cuDNN
- 这时会出现一些新的选项,首先在CUDA_FAST_MATH选项后打勾
- 搜索cuda,确认所有选项都打勾
- 再次Generate,出现Configuring Done和Generating Done后,确认没有报错,确认找到CUDA和cuDNN,退出cmake-gui。
5.3.4 make
- 打开终端,进入build目录
cd /home/username/software/opencv-4.4.0/build
make
注:这里可以多线程编译,不过直接make出问题的概率小一点
多线程:
(1)查看CPU核心数:nproc
(2)make -j16
- 等待一段时间,100%完成即可
- 执行:
sudo make install
再次出现100%,就成功了。
5.3.5 配置环境变量
- 打开opencv.conf文件,在文件尾末添加
/usr/local/lib
sudo gedit /etc/ld.so.conf.d/opencv.conf
- 配置库:
sudo ldconfig
- 添加环境变量,打开bash.bashrc文件
sudo gedit /etc/bash.bashrc
- 在文件尾末添加以下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存后退出,source一下
source /etc/bash.bashrc
到此,带有CUDA的OpenCV4.4.0就安装完成了,可以用以下命令查看opencv的版本:
pkg-config --modversion opencv
接下来我们测试一下opencv。
6.OpenCV测试程序
- 在主目录下新建Projects目录,用于存放工程代码,新建opencv_test工程目录,在工程目录下创建main.cpp源文件和CMakeLists.tst文件
cd ~
mkdir Projects/opencv_test -p
cd Projects/opencv_test
touch main.cpp CMakeLists.txt
- 在CMakeLists.tst中添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cmake_minimum_required(VERSION 2.8) project(opencv_test) set(CMAKE_CXX_STANDARD 14) find_package(OpenCV) include_directories(${OpenCV_INCLUDE_DIRS}) message(STATUS "OpenCV library status:") message(STATUS " config: ${OpenCV_DIR}") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") add_executable(opencv_test main.cpp) target_link_libraries(opencv_test ${OpenCV_LIBS}) |
- 在main.cpp中添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> #include <opencv2/opencv.hpp> int main(int argc, char** argv) {<!-- --> cv::Mat src = cv::imread("../1.jpeg"); if (src.empty()) {<!-- --> std::cout << "could not load image..." << std::endl; return -1; } cv::namedWindow("input image", cv::WINDOW_AUTOSIZE); cv::imshow("input image", src); cv::waitKey(0); return 0; } |
- 准备一张小猫咪的图片放在opencv_test目录下,目录结构如下图
—opencv_test
?|__ build
?|__ 1.jpeg
?|__ CMakeLists.txt
?|__ main.cpp
- 编译、运行代码:
mkdir build
cd build
cmake …
make
./opencv_test
运行结果如下:
7.YOLO v3测试
下载darknet:github链接
git clone https://github.com/AlexeyAB/darknet
下载权重文件(YOLO权重文件下载很慢,已经下好放在百度云,有需要到文末下载):
wget https://pjreddie.com/media/files/yolov3.weights
修改Makefile文件:
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
将ARCH后面的-gencode arch=compute_30,code=sm_30删掉
ARCH= -gencode arch=compute_35,code=sm_35
????-gencode arch=compute_50,code=[sm_50,compute_50] /
????-gencode arch=compute_52,code=[sm_52,compute_52] /
????-gencode arch=compute_61,code=[sm_61,compute_61]
运行YOLO v3:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
检测结果如下:
注1:如果遇到类似"error: ‘IplImage’ does not name a type"和"error: ‘CV_CAP_PROP_FRAME_WIDTH’ was not declared in this scope"的错误,可以参考这篇博客
注2:如果使用官网的darknet,可能会出现"error:‘CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT’ undeclared(first use in this function);did you mean ‘CUDNN_CONVOLUTION_FWD_ALGO_DIRECT’"这样的错误,这是因为CUDNN版本的问题,可以参考这篇博客,用本文给出的darknet链接应该不会报这个错
注3:“error: conversion from ‘cv::Mat’ to non-scalar type ‘IplImage’ {aka ‘_IplImage’} requested”,参考这篇博客
参考
- Linux(Ubuntu)系统查看显卡型号
- 安装ubuntu18.04分区设置
- Ubuntu安装 Realtek R8125 驱动
- Ubuntu18.04安装fcitx输入法
- Ubuntu18.04安装NVIDIA显卡驱动
- Ubuntu16.04下安装NVIDIA显卡驱动
- Ubuntu 18.04配置OpenCV 4.2.0
- ubuntu安装opencv无法下载IPPICV的问题 ippicv_2020_lnx_intel64_20191018_general.tgz
- 百度云链接: https://pan.baidu.com/s/1mUNoZeuPXOt-BihZb_LrVw
密码: 5hqk