您的位置:首页 > Web前端

Ubuntu16.04 cuda8.0+cudnn5.1 opencv3.3 caffe-faster-rcnn

2018-01-18 09:44 639 查看
系统:ubuntu16.04
显卡:1080ti
时间:2017年11月15日
 
1. 安装ubuntu16.04
参考博客:  
Win7 U盘安装Ubuntu16.04 双系统(http://blog.csdn.net/qq_36673141/article/details/78414745)
台式机安装ubuntu16.04遇黑屏问题(http://blog.csdn.net/qq_36673141/article/details/78476129)
2. 安装cuda8.0+cudnn5.1

(1)打开终端,先删除旧的驱动:sudo apt-get purge nvidia* #没有旧的驱动无需执行
(2)禁用自带的 nouveau nvidia驱动 (important!)
创建一个文件通过命令 sudo gedit  /etc/modprobe.d/blacklist.conf
并添加如下内容:
blacklist nouveau

options nouveau modeset=0再更新一下:sudo update-initramfs -u(非常重要)
修改后需要重启系统。确认下Nouveau是已经被你干掉,使用命令: lsmod | grep nouveau
(3)CUDA8.0安装
所需文件: cuda_8.0.61_375.26_linux.run
1)安装一系列依赖项:
sudo apt-get install build-essential

sudo apt-get install cmake git

sudo apt-get update

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install python-numpy python-scipy python-matplotlib
2)首先我们需要结束x-window的服务,否则驱动将无法正常安装关闭X-Window:sudo service lightdm stop,然后切换到tty1控制台:Ctrl+Alt+F1即可
3)把cuda_8.0.61_375.26_linux.run 拷贝到/home目录下,命令行输入 cd /home
4)命令行sudo chmod 755 cuda_8.0.61_375.26_linux.run,给cuda文件赋权限;
5)命令行sudo ./ cuda_8.0.61_375.26_linux.run,安装cuda;
6)会显示一个超长的文档,一直按enter ,直到读完整个文档,输入accept 。
注意接下来会让你选择怎样安装cuda,在选择是否用安装cuda自带的驱动,一定要输入n,其他都输入y.
7)配置环境,命令行,sudo gedit /etc/bash.bashrc,在最后输入;
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH
8)保存退出后命令行sudo ldconfig
(4)安装驱动
输入下面的命令检查当前系统的驱动版本,并在官网上匹配一下,可以安装官网推荐的适合系统的驱动nvidia-smi
nvidia-settings
sudo apt-get purge nvidia* #清除cuda自带驱动:
sudo apt-get install nvidia-375
sudo nvidia-smi#安装完验证,若列出了GPU的信息列表则表示驱动安装成功
sudo service lightdm start#会自动切换到图像界面

9)安装完成后在命令行输入nvcc --version(version前是两个减号!),显示的信息中有CUDA8.0字样,就证明安装成功.                                                                                                                                                       
10)进入到home目录下的NVIDIA_CUDA-8.0_Samples文件夹下,编译CUDA样例:make。该过程比较长,大概半小时
11)进入到NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/下,输入./deviceQuery 查看显卡规格,然后输入./bandwidthTest查看显卡时候能够正确运行。以上两个指令在终端都会输出"PASS",说明已经成功安装CUDA。
12)如果上一步不成功,可以卸载全部驱动并重新安装驱动。使用如下命令卸载NVIDIA驱动:
# sudo apt-get remove nvidia*
 
(5)CUDNN8.0安装
注意,cudnn版本一定要和CUDA版本相对应,我安装的是cudnn-8.0-v5。
1)解压:进入cudnn.tgz所在目录,将文件解压:
gzip -d cudnn-8.0-linux-x64-v5.0-rc.tgz  
tar xf cudnn-8.0-linux-x64-v5.0-rc.tar  
2)copy文件到CUDA安装目录:注意第二个有参数-a,否则拷贝过去的文件就失去了链接
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include  
sudo cp -a cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64  
3)目前大部分的cudnn安装教程都只是说将解压后的文件copy到对应的目录下即可,但是在使用过程中可能会出现’libcudnn not found in library path‘的情况。解决办法是,在/etc/ld.so.conf.d/中新建一个.conf文件,名字随意:sudo gedit /etc/ld.so.conf.d/cudnn.conf,然后加入libcudnn*的路径:/usr/local/cuda-8.0/lib64,保存。再sudo ldconfig来更新缓存。至此,cudnn安装完成。
 
3.安装opencv3.3
(1)按照官网安装Opencv步骤:
基本: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
 
(2)利用终端进入opencv3文件夹,代码如下:
cd ~/opencv-3.0.0
(3)新建build文件夹存放opencv的编译文件,进入build文件夹代码如下
mkdir buildcd build
(4)配置opencv文件,代码如下:
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.1" -D CUDA_ARCH_PTX="6.1" -D WITH_GSTREAMER=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TIFF=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
注意:如果编译的是cuda版本的opencv 最好在编译的时候 表明cuda的计算能力。
一般而言直接添加一下2个cmake编译选项即可解决
-D CUDA_ARCH_BIN="6.1" -D CUDA_ARCH_PTX="6.1"

[code]#Note:6.1为GTX1080的计算能力,不同显卡需要根据自己的计算能力进行修改
#查询显卡计算能力,可以通过运行cuda samples中的deviceQuery得知。
#(文件夹NVIDIA_CUDA-*_Samples下编译示例, *为版本号
或者
但如果运气不佳,添加编译选项并不能解决问题。这时候我们需要修改opencv中关于CUDA计算能力这部分的配置文件./cmake/OpenCVDetectCUDA.cmake。在
set(CUDA_ARCH_BIN ${__cuda_arch_bin} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported")
set(CUDA_ARCH_PTX ${__cuda_arch_ptx} CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for")

之前添加
set(__cuda_arch_bin "6.1")
set(__cuda_arch_ptx "6.1")
1
2
设置安装路径
1
2
-D CMAKE_INSTALL_PREFIX=/usr/local
1

编译CUDA版本

1
2
-D WITH_CUDA=ON
可以参考我的编译1:cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.1" -D CUDA_ARCH_PTX="" -D WITH_OPENGL=ON -D WITH_LIBV4L=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_GSTREAMER=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TIFF=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
我的编译2:
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.1" -D CUDA_ARCH_PTX="6.1" -D WITH_GSTREAMER=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TIFF=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
我的编译3cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TIFF=ON -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=/home/yll12/yl/opencv-3.3.1/opencv_contrib-3.3.1/modules -D CMAKE_INSTALL_PREFIX=/usr/local ..

(5)进行编译,代码如下:make -j8
(6)安装opencv库到系统,代码如下:sudo make install
# ls /usr/local/lib 查看已安装的opencv库
# sudo gedit /etc/ld.so.conf 为了方便后续代码的编写往该文件中添加一行: /usr/local/lib
# sudo ldconfig
 
4.在服务器上配置faster-rcnn
安装依赖
sudo apt-get update1) 安装依赖项
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev
libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev2) BLAS 安装
sudo apt-get install libatlas-base-dev
3) 安装 pycaffe 接口所需要的依赖项
sudo apt-get install -y python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags cython ipython
4) 继续安装依赖项
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

下载faster-rcnn
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn cd lib
make
cd caffe-fast-rcnn
其次编译依赖的特定版本的caffe。需要修改配置文件Makefile.config和Makefile,以及源码的更新
sudo mv Makefile.config.example Makefile.config
Makefile.config中需要修改的行:
#使用cudnn
USE_CUDNN := 1
#去掉不合适的cuda计算能力参数
CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
            -gencode arch=compute_52,code=sm_52 \
            -gencode arch=compute_60,code=sm_60 \
            -gencode arch=compute_61,code=sm_61 \
            -gencode arch=compute_61,code=compute_61
# 开启PYTHON支持
WITH_PYTHON_LAYER := 1
# INCLUDE_DIRS路径上,追加/usr/include/hdf5/serial,因为hdf5这个包在ubuntu16.04换成hdf5/seiral这种用法了
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
其他项,比如atlas、anaconda的python等,看情况修改,不修改也OK。
 
Makefile中需要修改的行:
# LIBRARIES变量,把hdf5的两个库名换掉,从hdf5_hl->hdf_serial_hl  hdf5->hdf5_serialLIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
 
(老版本的cuda可能需要下面这个修改,cuda8则不必:
找到第397行,NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)修改为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) (添加了-D_FORCE_INLINES参数)
 
编译caffe-fast-rcnn
需要先更新用到的caffe:原版py-faster-rcnn依赖的caffe比较老,不支持cudnnv5,那就更新下对应的源码。提供两种版本,方法1更简单些。
方法1:利用git修改
cd caffe-fast-rcnn  
git remote add caffe https://github.com/BVLC/caffe.git  
git fetch caffe  
git merge -X theirs caffe/master  
(git checkout -f  git pull)
执行git merge -X theirs caffe/master会出现下面的界面要求输入注释信息: 不必输入任何内容,直接按Ctrl-X 离开
提示是否存储更动过的缓冲区,输入Y ,ENTER
就完成了分支合并过程。
修改python_layer.hp
版本合并后,打开caffe-fast-rcnn/include/caffe/layers/python_layer.hp,self_.attr("phase") = static_cast<int>(this->phase_);这一行(line29)删除
然后再重新编译caffe-fast-rcnn,就可以正常编译通过了。
方法2:纯手工修改
用最新caffe源码的以下文件替换掉faster rcnn 的对应文件
include/caffe/layers/cudnn_relu_layer.hpp, src/caffe/layers/cudnn_relu_layer.cpp, src/caffe/layers/cudnn_relu_layer.cu
include/caffe/layers/cudnn_sigmoid_layer.hpp,src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cu, include/caffe/layers/cudnn_tanh_layer.hpp,src/caffe/layers/cudnn_tanh_layer.cpp, src/caffe/layers/cudnn_tanh_layer.cu
用caffe源码中的这个文件替换掉faster rcnn 对应文件
include/caffe/util/cudnn.hpp
将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter
执行caffe的编译
cd caffe-fast-rcnn
mkdir build
cd build
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..make -j8
make
make install

make clean
make pycaffe
5.其他问题
(1)最后可能会报错,原因是caffe库并没有安装在usr/local/lib下至于原因现在还是一个谜。庆幸地是,我找到解决的方法即用mv 命令把caffe库
移动到usr/local/lib下。
(2)遗憾地是,import caffe 同样报错,因为很多库没装好。
# sudo apt-get update
# sudo apt-get install python-pip python-dev python-numpy
# sudo apt-get install gfortran graphviz
# sudo pip2 install -r requirements.txt
# sudo pip2 install pydot
#sudo make clean
# sudo make pycaffe
 
配置环境变量
不建议在/etc/profile中进行存放,因为这是局部变量,在bashrc中添加环境变量是全局变量。
# sudo gedit /etc/bash.bashrc
export PYTHONPATH=/home/ubuntu/caffe/python
添加完成后记得更新环境变量
# source /etc/bash.bashrc
查看环境变量设置是否成功:
echo $PYTHONPATH
echo $PATH
运行demo,这一步就很简单了。注意:需要修改caffemodel与prototxt文件路径。
cd $FRCN_ROOT
./tools/demo.py
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: