前言:
此次环境搭建使用的硬件平台是一台微星笔记本,运行速度足够学习使用。本文仅介绍环境的搭建。yolo的使用教程会在后续更新,欢迎持续关注。
本文参考以下博客:
https://blog.csdn.net/debjiu/article/details/80824439
https://blog.csdn.net/Jeff_zjf/article/details/84846350
https://blog.csdn.net/qq_36362060/article/details/80739573
https://blog.csdn.net/vilmaigic/article/details/81412671
https://blog.csdn.net/kevineeo/article/details/84572589
想简单了解下darknet框架和yolo请点击这里:
介绍一个相对小众的深度学习框架Darknet,其YOLO神经网络算法对目标检测效果显著
本平台环境参数:
下面是一些程序演示:
(1)准确识别出了11名足球队员,在使用gpu运算并开启cuda加速的情况下运算耗时0.094s。见下图:
(2)而使用cpu运算,耗时23.69s,由此可见gup对运算的提速效果显著。见下图:
(3)进行视频检测,这是我旅游时拍摄的一小段视频。
FPS:9.4
GPU占用:93%
显存占用:76%
下面开始搭建环境啦!安装顺序如下:
一.安装NVIDIA显卡驱动
安装显卡驱动有添加ppa源和下载官方安装包的方法。
这里介绍一个相对简单点的方法为ubuntu 18.04安装显卡驱动:
(1)查看gpu和推荐的驱动版本:
$ ubuntu-drivers devices
(2)然后进行自动安装
$ sudo ubuntu-drivers autoinstall
在设置里面点击详细信息,如果显示出显卡信息就说明显卡驱动安装成功了。
二.安装cuda并配置cudnn
(1)对GCC降级
Ubuntu 18.04预装GCC的版本为7.3,而cuda编译需要更低的版本,这里对gcc进行手动降级至4.8版本。
对gcc降级:
sudo apt-get install gcc-4.8
对g++降级
sudo apt-get install g++-4.8
然后进入到/usr/bin目录下输入:ls -l gcc*
cd /usr/bin
ls -l gcc*
显示结果如下:
lrwxrwxrwx 1 root root 7th 3月 20 11:38 /usr/bin/gcc -> gcc-7.3
表示gcc链接到gcc-7.3, 需要将它改为链接到gcc-4.8,方法如下:
sudo mv gcc gcc.bak #备份
sudo ln -s gcc-4.8 gcc #重新链接
同理, 将g++链接到g++4.8:
sudo mv g++ g++.bak
sudo ln -s g++-4.8 g++
在/usr/bin目录下查看gcc和g++版本
ls -l gcc*
ls -l g++*
显示gcc和g++均链接到4.8版本,则说明安装成功:
(2)下载cuda9.0版本:cuda9.0下载链接
根据电脑配置,选择如下:
然后下载基础安装包和四个补丁至 /home/qrt/Downloads目录下:
(3)安装cuda
进入文件目录 /home/qrt/Downloads,安装cuda9.0
cd /home/qrt/Downloads
sudo sh cuda_9.0.176_384.81_linux.run
进入安装界面
然后一路accept或者yes,在提示是否安装显卡驱动时(如下图)选择no(因为已经安装过了,否则可能会出现bug):
接下来安装补丁文件,方法和安装cuda9.0一样:
在/home/qrt/Downloads目录打开终端,分别输入:
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
安装补丁。
安装完毕后还需要配置环境,将以下两条加入.barshrc
文件中。
打开.barshrc
sudo vim ~/.barshrc
在最后面加入下面两条语句
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
如下图:
到此,cuda就安装完了。
(4)配置cudnn
下载cudnn需要注册,注册完,下载:cuDNN v7.1.4 Library for Linux
进入下载目录并解压在当前目录:
cd /home/qrt/Downloads
tar zxvf cudnn-9.0-linux-x64-v7.1.tgz
复制cudnn里的文件到cuda相关文件夹内
sudo cp /home/qrt/Downloads/cuda/include/cudnn.h /usr/local/cuda-9.0/include
sudo cp /home/qrt/Downloads/cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
sudo chmod a+r /home/qrt/Downloads/cuda/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*
三.安装opencv
(1)下载opencv,选择2.4.13.6版本sources文件下载:https://opencv.org/releases.html
下载并解压至/home/qrt/Downloads目录下,然后将文件夹重命名为opencv
(2)执行以下命令安装依赖项:
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 libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
(3)修改opencv配置文件
1.进入到opencv/cmake 目录下,找到OpenCVDetectCUDA.cmake文件并打开,定位到26行,修改set(HAVE_CUDA 1)为set(HAVE_CUDA 0)。
这里修改的目的是为了避免后面执行sudo make install出现如下的错误信息。
nvcc warning : The 'compute_20', 'compute_20','sm_21' architectures are deprecated
备注:出现上面的错误信息的原因是使用CUDA配置opencv引起的。将HAVE_CUDA 设为0之后,在后面的编译过程中就会关闭CUDA,解决这个问题。
2.进入到opencv 目录下,找到CMakeList.txt文件并打开,定位到176,177行,将ON改为OFF然后保存。
(4)安装opencv
在opencv目录下新建build文件夹,然后执行以下命令:
cd build #进入到build文件夹
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. #开始编译
make -j8
sudo make install -j8
执行完毕就说明opencv配置完成了。
下面进行测试:
没有出现报错信息则说明opencv配置成功了。
四.darknet的安装
(1)可以按照官网上面的步骤来安装:https://pjreddie.com/darknet/yolo/
git clone https://github.com/pjreddie/darknet 下载代码
cd darknet 进入darknet目录
make 编译
(2)下载权重,然后保存在darknet的目录下
wget https://pjreddie.com/media/files/yolov3.weights
在darknet目录下打开终端,输入:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
就可以进行测试了,如下图:
下面是对darknet目录下的Makefile文件进行的一些修改
每次修改完都需要重新编译
(1)如需使用gpu运算,修改如下,然后保存。
修改完后一定要重新编译,在darknet目录下打开终端,输入:
make clean
make -j8
(2)根据自己电脑的硬件可在Makefile中对ARCH进行修改,我的显卡是GTX1060,算力为6.1(具体算力nvidia官网可查)。
https://developer.nvidia.com/cuda-gpus
修改如下:
显卡算力:
(3)在Makefile文件的第46行,修改为cuda的安装路径。
(4)在程序运行的过程中如果出现以下错误(内存溢出):
cuda error: out of memory darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
应该进行如下修改:
将/home/qrt/darknet/cfg目录下yolov3.cfg的修改为:
将
[net]
# Testing
#batch=1
#subdivisions=1
# Training
batch=64
subdivisions=16
修改为
[net]
# Testing
batch=1
subdivisions=1
# Training
#batch=64
#subdivisions=16
全文结束啦!欢迎在回复区讨论!