Linux搭建YOLOv3+OpenCv3+GPU开发环境


操作系统平台:Ubuntu16.04
独立显卡:GeForce 940M
环境配置:NVIDIA驱动+CUDA+cuDNN
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第1张图片

一、安装NVIDIA驱动

安装好双系统后,开启Linux操作系统,安装NVIDIA驱动,首先区Nvidia官网查看适合自己的GPU驱动,我的显卡类型是GeForce 940M,所以选择对应驱动下载
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第2张图片
下载后的驱动安装包为

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

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第3张图片

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

Linux中的TTY模式

关闭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,就不会出现循环登录的问题。

**注:**安装时可能有出错提示,不用理会,继续安装

选择继续安装
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第4张图片
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第5张图片
点击ok
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第6张图片
点击ok
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第7张图片
在这里插入图片描述

2,安装成功后,在图形界面可通过以下命令查看自己机器上详细的GPU信息

nvidia‐settings

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第8张图片

或者输入命令查看
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第9张图片

3,重启系统

sudo reboot

二、安装CUDA

CUDA是VNVIDIA的编程语言平台,要使用GPU就必须要使用CUDA;CUDA安装文件下载

进入官网选择合适的版本
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第10张图片
1,下载安装文件及补丁文件

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第11张图片
下载后的文件如下:

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

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第12张图片
注意: 在安装的时候首先要一直按enter键完成安装文档的阅读,然后选择accept 接下来会出现让你选择是否安装nvidia361驱动,因为前面驱动已经安装好了,所以这里要选择no,不安装默认驱动

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62?#就是这里要选择no

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第13张图片

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第14张图片

CUDA工具Linux安装指南

看到出现如下问题,缺少了多个文件

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  with the name of this run file:
    sudo .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

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第15张图片
显示有关GPU的信息,则说明安装成功了。

测试cuda也可以通过命令: nvcc -V 查看。输出如下图所示:

 sudo apt install nvidia-cuda-toolkit  //要先安装该工具

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第16张图片
CUDA软件工具版包其他版本下载

三、安装cuDNN

关于CUDA与cuDNN

进入官网下载与CUDA9.0搭配的cuDNN版本,下载cuDNN需要注册一个NIDIA账户
cuDNN 下载网址,官方已经给出了CUDA与cuDNN搭配的建议,注册好账号后,下载与CUDA对应的cuDNN版本
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第17张图片
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第18张图片
解压下载好的压缩包:

tar  -xvf  cudnn-9.0-linux-x64-v7.6.5.32.tgz

解压后是一个cuda目录
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第19张图片

拷贝相关的库文件:

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版本及以上
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第20张图片
注意: opencv版本和opencv_contrib版本一定要对应
https://github.com.opencv
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第21张图片
https://github.com.opencv/opencv_contrib
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第22张图片

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  ..

Linux搭建YOLOv3+OpenCv3+GPU开发环境_第23张图片
解决方法: 回到opencv3.4.4目录下,删除CMakeCache.txt
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第24张图片

在执行上述的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的情况下
Linux搭建YOLOv3+OpenCv3+GPU开发环境_第25张图片

参考:
ubuntu16.04+CUDA8.0+GTX1080Ti+yolov3+Opencv3.1.0详细配置

ubuntu16.04下安装OpenCV4

linux 下 opencv_contrib 源代码编译方法

Ubuntu16.04安装Opencv3.4.4+opencv_contrib-3.4.4

Ubuntu16.04安装配置opencv3.4.3+opencv_contrib3.4.3

ubuntu16.04下安装OpenCV4

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

预测时间大大减少

你可能感兴趣的:(GPU,YOLOv3)