操作系统平台:Ubuntu16.04
独立显卡:GeForce 940M
环境配置:NVIDIA驱动+CUDA+cuDNN
一、安装NVIDIA驱动
安装好双系统后,开启Linux操作系统,安装NVIDIA驱动,首先区Nvidia官网查看适合自己的GPU驱动,我的显卡类型是GeForce 940M,所以选择对应驱动下载
下载后的驱动安装包为
NVIDIA-Linux-x86_64-440.64.run
run格式文件的安装相对麻烦,首先要禁用nouveau驱动;Nouveau驱动是由第三方为NVIDIA显卡开发的一个开源3D驱动,Ubuntu默认集成了Nouveau驱动,而用户在安装NVIDIA官方私有驱动的时候Nouveau又称为了阻碍,如不禁用Nouveau,安装GPU驱动会报错
禁用Nouveau驱动步骤如下:
1,nouveau禁止命令写入文件
sudo vim /etc/modprobe.d/blacklist.conf
在文件末尾添加以下语句:
blacklist nouveau
blacklist lbm‐nouveau
options nouveau modeset=0
alias nouveau off
alias lbm‐nouveau off
2,调用指令禁止nouveau
echo options nouveau modeset=0 | sudo tee ‐a /etc/modprobe.d/nouveau‐kms.conf
3,更新内核
sudo apt-get install initramfs-tools //先安装这个工具
sudo update-initramfs -u
点击查看解决方法
Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915解决办法
再次执行sudo update-initramfs -u
4,重启系统
sudo reboot
5,进入tty模式,关闭x server
//进入tty模式
ctrl + alt+ F1
//返回
ctrl + alt+ F7
关闭x server
sudo service lightdm stop
sudo init 3
安装NVIDIA驱动
1,切换到NVIDIA安装包指定目录,添加执行权限并进行安装
cd ~/Downloads
chmod +x NVIDIA-Linux-x86_64-440.64.run
sudo sh NVIDIA-Linux-x86_64-440.64.run -no-x-check -no-nouveau-check --no-opengl-files
参数说明:
-no-x-check:安装驱动时关闭X服务
-no-nouveau-check:安装驱动时禁用nouveau
-no-opengl-files:只安装驱动文件,不安装OpenGL文件
这样再reboot,就不会出现循环登录的问题。
**注:**安装时可能有出错提示,不用理会,继续安装
选择继续安装
点击ok
点击ok
2,安装成功后,在图形界面可通过以下命令查看自己机器上详细的GPU信息
nvidia‐settings
或者输入命令查看
3,重启系统
sudo reboot
二、安装CUDA
CUDA是VNVIDIA的编程语言平台,要使用GPU就必须要使用CUDA;CUDA安装文件下载
进入官网选择合适的版本
1,下载安装文件及补丁文件
下载后的文件如下:
cuda_9.0.176_384.81_linux.run
cuda_9.0.176.1_linux.run
cuda_9.0.176.2_linux.run
cuda_9.0.176.3_linux.run
cuda_9.0.176.4_linux.run
2,进行安装
sudo sh cuda_9.0.176_384.81_linux.run
sudo sh cuda_9.0.176.1_linux.run
sudo sh cuda_9.0.176.2_linux.run
sudo sh cuda_9.0.176.3_linux.run
sudo sh cuda_9.0.176.4_linux.run
注意: 在安装的时候首先要一直按enter键完成安装文档的阅读,然后选择accept 接下来会出现让你选择是否安装nvidia361驱动,因为前面驱动已经安装好了,所以这里要选择no,不安装默认驱动
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62?#就是这里要选择no
看到出现如下问题,缺少了多个文件
Missing recommended library: libGLU.so
Missing recommended library: libX11.so
Missing recommended library: libXi.so
Missing recommended library: libXmu.so
Missing recommended library: libGL.so
Installing the CUDA Samples in /home/chenhai ...
Copying samples to /home/chenhai/NVIDIA_CUDA-9.0_Samples now...
Finished copying samples.
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-9.0
Samples: Installed in /home/chenhai, but missing recommended libraries
Please make sure that
- PATH includes /usr/local/cuda-9.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-9.0/lib64, or, add /usr/local/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.0/bin
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.0/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete insallation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run -silent -driver
Logfile is /tmp/cuda_install_3684.log
在Ubuntu 16.04 上安装CUDA 9.0遇到的一个问题以及解决
安装补丁文件:
sudo sh cuda_9.0.176.1_linux.run
sudo sh cuda_9.0.176.2_linux.run
sudo sh cuda_9.0.176.3_linux.run
sudo sh cuda_9.0.176.4_linux.run
3,打开profile文件,添加环境变量
sudo gedit /etc/profile
在尾处添加
export PATH=/usr/local/cuda‐9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda‐9.0/lib64$LD_LIBRARY_PATH
4,重启电脑
sudo reboot
5,测试cuda的samples
cd /home/chenhai/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
显示有关GPU的信息,则说明安装成功了。
测试cuda也可以通过命令: nvcc -V 查看。输出如下图所示:
sudo apt install nvidia-cuda-toolkit //要先安装该工具
三、安装cuDNN
进入官网下载与CUDA9.0搭配的cuDNN版本,下载cuDNN需要注册一个NIDIA账户
cuDNN 下载网址,官方已经给出了CUDA与cuDNN搭配的建议,注册好账号后,下载与CUDA对应的cuDNN版本
解压下载好的压缩包:
tar -xvf cudnn-9.0-linux-x64-v7.6.5.32.tgz
解压后是一个cuda目录
拷贝相关的库文件:
cd cuda
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
删除文件原来的软链接:
cd /usr/local/cuda/lib64
sudo rm libcudnn.so libcudnn.so.7 //删除原来的链接
sudo ln ‐s libcudnn.so.7.4.2 libcudnn.so.7 //生成新的链接
sudo ln ‐s libcudnn.so.7 libcudnn.so
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
sudo ldconfig
四、安装OpenCV
到官网下载OpenCv源码包,我下载的是opencv-3.4.4.zip;想要在OpenCV中玩转YOLOv3,必须安装OpenCV3.4.2版本及以上
注意: opencv版本和opencv_contrib版本一定要对应
https://github.com.opencv
https://github.com.opencv/opencv_contrib
1,解压压缩包
unzip opencv-3.4.4.zip
cd opencv-3.4.4/
安装依赖
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
都装上
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev #一些图像处理包的依赖
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev #视频处理的依赖
sudo apt-get install libatlas-base-dev gfortran #atlas的lib,应该是优化用的
sudo apt-get install ffmpeg
2,配置编译环境
mkdir build
cd build
cmake ..
解决方法: 回到opencv3.4.4目录下,删除CMakeCache.txt
在执行上述的cmake时可根据自己的电脑配置和安装的opencv版本情况设置命令参数
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.4/modules \
-D PYTHON_EXCUTABLE=/usr/bin/python \
-D WITH_CUDA=ON \ # 使用CUDA
-D WITH_CUBLAS=ON \
-D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
-D CUDA_ARCH_BIN="9.0" \ # 这个需要去官网确认使用的GPU所对应的版本
-D CUDA_ARCH_PTX="" \
-D CUDA_FAST_MATH=ON \ # 计算速度更快但是相对不精确
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \ # 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=ON .
设置我的编译命令
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.4 \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4/modules \
-D CUDA_GENERATION=Auto \
-D PYTHON_EXCUTABLE=/usr/bin/python \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=ON ..
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.4 \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4/modules \
looking for ccache --not found
sudo apt-get install ccache
No package ‘gtk±3.0’ found
sudo apt-get install libgtk-3-dev
sudo apt-get install gtk3-deve
Looking for linux/videodev.h - not found
Looking for linux/videodev2.h - found
sudo apt-get install libv4l-dev
sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
Looking for sys/videoio.h - not found
sudo cp /usr/include/opencv2/videoio/videoio_c.h /usr/include/x86_64-linux-gnu/sys
sudo ln -s /usr/include/x86_64-linux-gnu/sys/videoio_c.h /usr/include/x86_64-linux-gnu/sys/videoio.h
参考:OpenCV-3编译安装方法及常见错误解决(Ubuntu平台)
No package ‘libavresample’ found
sudo apt-get -y install libavresample-dev
sudo apt-get -y install libgphoto2-dev
-- Checking for modules 'gstreamer-base-1.0;gstreamer-video-1.0;gstreamer-app-1.0;gstreamer-riff-1.0;gstreamer-pbutils-1.0'
-- No package 'gstreamer-base-1.0' found
-- No package 'gstreamer-video-1.0' found
-- No package 'gstreamer-app-1.0' found
-- No package 'gstreamer-riff-1.0' found
-- No package 'gstreamer-pbutils-1.0' found
-- Checking for modules 'gstreamer-base-0.10;gstreamer-video-0.10;gstreamer-app-0.10;gstreamer-riff-0.10;gstreamer-pbutils-0.10'
-- No package 'gstreamer-base-0.10' found
-- No package 'gstreamer-video-0.10' found
-- No package 'gstreamer-app-0.10' found
-- No package 'gstreamer-riff-0.10' found
-- No package 'gstreamer-pbutils-0.10' found
sudo apt-get -y install libgstreamer-plugins-base1.0-dev
sudo apt-get -y install libgstreamer1.0-dev
参考:ubuntu16.04 安装opencv 步骤和错误解决
3,编译安装
make -j 4
make install
4,添加环境变量,使系统能够找到OpenCv的库路径
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加 /usr/local/lib
执行如下命令使得刚才的配置路径生效
sudo ldconfig
5,配置bash
sudo gedit /etc/bash.bashrc
在最末尾添加
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
保持退出,执行如下命令使得配置生效
source /etc/bash.bashrc
更新
sudo updatedb
没有opencv_contrib的情况下
参考:
ubuntu16.04+CUDA8.0+GTX1080Ti+yolov3+Opencv3.1.0详细配置
linux 下 opencv_contrib 源代码编译方法
Ubuntu16.04安装Opencv3.4.4+opencv_contrib-3.4.4
Ubuntu16.04安装配置opencv3.4.3+opencv_contrib3.4.3
ubuntu 16.0.4 opencv 4.0.0 + opencv_contrib 4.0.0 cmake-gui 安装
五、安装darknet
darknet官网: https://pjreddie.com/darknet/yolo/
1,下载darknet源码
git clone https://github.com/pjreddie/darknet
2,编译源码
cd darknet
make
3,下载预训练权重文件
wget https://pjreddie.com/media/files/yolov3.weights
训练权重文件也可以下载tiny版的
wget https://pjreddie.com/media/files/tiny.weights
4,测试运行
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
//或者
./darknet classify cfg/tiny.cfg tiny.weights data/dog.jpg
只用CPU,预测时间较长
使用CUDA和OpenCv进行编译
修改darknet目录下的Makefile
GPU=1
CUDNN=1
OPENCV=1
//前提是GPU,CUDNN,OPENCV都已安装好,才可将其赋值为1
进入darknet目录下,重新编译
cd darknet
make clean
make
测试GPU版本的yolo
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
预测时间大大减少