Ubuntu20.04+GeForce RTX 2080 SUPER+cuda11.1+cudnn8.0.4+openCV4.4.0环境搭建
通过将近一个月的折腾,终于安装、编译成功,在此作一个记录,以备往后快速搭建环境,也但愿能给各位踩坑的小伙伴一点参考。html
1.Ubuntu20.04系统安装
1.1 制做系统盘
下载Ubuntu20.04系统镜像和U盘启动制做工具,使用UltraISO制做Ubuntu20.04系统盘。linux
- 启动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必定要放在最前面
ios- EFI:主分区,建议不小于512M,这里我分配了2G
- 挂载点 / :逻辑分区,ext4日志文件系统,用于存放系统,建议根据本身的磁盘大小分配的大一点,这里我分配了200G(磁盘共1T)
- swap(交换空间):逻辑分区,大小与电脑的真实内存大小一致,这里个人是32G内存
- 挂载点 /home :逻辑分区,ext4日志文件系统,将剩余空间所有分配给它
- 分区完成后,安装启动引导器的设备选择整个磁盘,点击"Install Now"–>“Continue”
- 选择时区,“Shanghai”
- 输入用户名和密码
- 开始安装,等待完成
- 安装完成后,重启
- 重启后按提示拔出U盘后按回车键
- 进入登陆界面,安装成功
- 最小安装后没有office软件
1.3 更换国内镜像源
注: 个人台式机装完后没法上有线网,若是有一样问题的小伙伴能够到github下载r8125的网卡驱动,自行安装,能够参考这篇文章git
- 打开应用中心–>“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 ibusgithub
- 打开ubuntu软件中心,搜索fcitx,把带企鹅图标的软件都装上,这里我没有选择fcitx5
- 安装输入法码表,这里装的五笔拼音
sudo apt-get install fcitx-table-wbpyweb
-
其余输入法以下:ubuntu
- 拼音:fcitx-pinyin、fcitx-sunpinyin、fcitx-googlepinyin、fcitx-sogoupinyin
- 五笔:fcitx-table、fcitx-table-wubi、fcitx-table-wbpy
-
防止出现两个输入法图标浏览器
sudo apt remove fcitx-ui-classicbash
- 选择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查看显卡型号及驱动等信息
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前面是两个横杠,不然会致使安装失败
- 接着会出现一些界面,按下面所示选择安装
一、An alternate method of installing the NVIDIA driver was detected. 选择continue installation
这个应该是推荐你经过Ubuntu的“Software & application”中的“Additional Drivers”安装驱动,不用管,继续安装
二、The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
三、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继续
四、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 继续
五、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中添加以下代码:
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中添加以下代码:
#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