1. 配置显卡驱动、cuda 和 cudnn
这里的显卡是RTX2070,首先需要确保自己的NVIDIA显卡已经安装了相应的驱动,cuda ,和cudnn 。
- NVIDIA的显卡驱动程序和CUDA完全是两个不同的概念,CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用,CUDA本质上是一个工具包(ToolKit)。
- NVIDIA显卡驱动和CUDA工具包本身是不具有捆绑关系,也不是一 一对应的关系,即每一个版本的显卡驱动可能有好几个版本的CUDA与之对应。
- cuDNN是一个SDK,是一个专门用于神经网络的加速包,cuDNN跟CUDA也不是一 一对应的关系,即每一个版本的CUDA可能有好几个版本的cuDNN与之对应。
1.1 查看显卡驱动是否安装:
nvidia-smi
显卡驱动已有不用安装了
1.2 查看cuda版本:
nvcc -V
提示没有安装(其实通过Anaconda安装的虚拟环境有cuda)。
上面看到显卡驱动版本是430,可以安装cuda10.1,从下图中查看适合自己的cuda版本。
到官网下载cuda:
https://developer.nvidia.com/cuda-downloads
或者命令行安装:
wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
sudo sh cuda_10.1.243_418.87.00_linux.run
下载还是挺快的,执行一下安装命令,选择accept
,enter键按一下继续
等几秒钟跳出安装选项,enter
一下去掉第项driver中X,不安装它,其它默认,下滑到Install
,enter确认安装
等待安装完成,完成后如下提示
根据提示添加环境变量
打开
sudo nano ~/.bashrc
在文件末尾添加以下环境变量:
export PATH=$PATH:/usr/local/cuda-10.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.1
ctrl+O,enter保存,ctrl+X退出,重新激活一下:
source ~/.bashrc
查看一下版本
可以看到是cuda10.1
1.3 查看cudnn 版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
提示没有存在
到官网下载对应版本的cudnn:https://developer.nvidia.com/rdp/cudnn-archive
下载后解压以后,输入以下命令:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
查看一下版本是7.6.4
2. 配置DarkNet环境
2.1 安装opencv
-
根据自己情况下对应版本,到官网下载opencv: https://opencv.org/releases/
这里用的是opencv3.4.0 -
还得下载opencv_contrib,地址:https://github.com/opencv/opencv_contrib/releases
这里用的是opencv_contrib-3.4.0
创建一个文件加opecv,把这两个文件放进去并解压一下
在opencv-3.4.0文件夹下新建两个新的文件夹,分别为build和installmkdir build mkdir install
-
接着安装一些依赖库
sudo apt-get install build-essential cmake cmake-qt-gui git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 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 libv4l-dev liblapacke-dev libxvidcore-dev libx264-dev libatlas-base-dev gfortran ffmpeg
-
编译opencv3.4.0:
打开cmake工具cd ~ cmake-gui
点击
Browse Source...
,选择opencv-3.4.0文件夹
点击Browse Build...
,选择刚刚在opencv-3.4.0文件夹里创建的空文件夹build
点击左下角Configure
弹出选项框,不用更改,直接点击Finish
耐心等待
显示Configuring done后
在Search查找框中输入extra,找到OPENCV_EXTRA_MODULES_PATH
设置路径为opencv_contrib-3.4.0
里的modules
文件夹
在搜索框输入install
,找到CMAKE_INSTALL_PREFIX
,更改一下默认路径,路径为刚刚创建的install文件夹
(opencv-3.4.0里面),这是为了以后安装多个opencv版本,避免冲突
再次点击Configure
开始配置,耐心等待直到显示Configuring done,然后再次点击Configure
直到所有选项的红色状态消失了。
-
最后点击Generate
-
退出cmake,进入opencv-3.4.0文件夹下的build目录
输入:cd ~/Downloads/opencv/opencv-3.4.0/build make -j4
-
报错:
"fatal error: dynlink_nvcuvid.h: No such file or directory compilation terminated"
解决办法:
ctrl + Alt +T
重新开个终端,再次打开cmake工具cmake-gui
搜索cudacodec,找到
”BUILD_opencv_cudacodec“
项,把方框里的对号去掉。
重新点击Configure
,显示Configuring done后点击Generate
重新编译即可。
接着输入:
make install
等待安装完成。
-
进入opencv-3.4.0目录里install文件夹,将里面三个文件复制到usr/local/… 目录下
输入:cd ~/Downloads/opencv/opencv-3.4.0/install sudo cp -r include /usr/include/opencv3.4.0 sudo cp -r lib /usr/lib/opencv3.4.0 sudo cp -r bin /usr/bin/opencv3.4.0
打开
ld.so.conf
文件sudo nano /etc/ld.so.conf
添加一行变量:
/usr/lib/opencv3.4.0
是opencv安装路径,也就是makefile中指定的安装路径
保存一下,运行sudo ldconfig
接着,修改bash.bashrc文件:sudo nano /etc/bash.bashrc
在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/opencv3.4.0/pkgconfig export PKG_CONFIG_PATH
激活一下:source /etc/bash.bashrc
-
查看opencv版本
pkg-config --modversion opencv
至此,opencv配置完成。
2.2 DarkNet编译测试
下载DarkNet框架:
git clone https://github.com/pjreddie/darknet
cd darknet
make
darkne文件夹里的 Makefile文件默认 是使用 CPU,
用GPU要修改一下:
GPU=1 # 是否打开GPU
CUDNN=1 # 是否打开cudnn
OPENCV=0 # 是否打开opencv
修改后保存,每次修改记得重新编译一下
make clean
make
下载预训练模型权重yolov3.weights来做一下测试
下载地址:
wget https://pjreddie.com/media/files/yolov3.weights
测试一张图片:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
#或者
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
测试完成。
未完待续~
Reference:
https://www.cnblogs.com/WushiShengFei/p/10002502.html
https://blog.csdn.net/wanzhen4330/article/details/81699769
https://pjreddie.com/darknet/yolo/