ubuntu14.04配置GPU版py-faster-rcnn

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hfutdog/article/details/87867764

前言

因为最近项目中要用到py-faster-rcnn,在配置时好是一番折腾,这里做一下记录,提升以后再次配置的效率,并给需要的小伙伴做一下参考。需要声明的是,这里的方案是我自己配置通过的,也许放在不同的环境就无法通过了,所以请注意你的环境是否与我相同。还有一点很重要,不要随意删除系统里的东西,可能会导致意想不到的问题。
下面贴出我配置项目的机器的基本信息:

系统:ubuntu 14.04 LTS
显卡:Titan XP
Python 2.7
GCC 4.8.4
protobuf 2.5.0

GCC和protobuf都是系统原生的版本,在配置过程中是有升级的,所以这里也列出来了,尤其是protobuf,因为它让我多耗了很多时间。下面开始正文。

安装显卡驱动

pic_1
如图所示,我们在System Settings里点击Software&Updates,然后在弹出的页面中选择NVIDIA显卡驱动,再Apply Changes,安装后重启系统即完成显卡驱动的安装。
pic_2

安装CUDA和Cudnn

CUDA下载页面下载cuda 8.0.61,选项如下图所示:
pic_3
pic_4
我只下载了Base Installer,没有下载使用Patch2,目前来看没有什么影响,不过也许只是暂时的。
下载好之后,执行如下指令安装CUDA:

sudo dpkg -i cuda-repo-ubuntu1404-8-0-local-ga2_8.0.61_amd64.deb
sudo apt-get update
sudo apt-get install cuda

然后配置环境变量,使用如下指令打开/etc/profile文件:

sudo gedit /etc/profile

添加:

export PATH=/usr/local/cuda/bin$PATH
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

然后执行如下指令使环境变量生效:

source /etc/profile

关闭当前Terminal,再开启一个新的Terminal,执行如下指令:

sudo gedit /etc/ld.so.conf.d/cuda.conf

在打开的文件中添加:

/usr/local/cuda/lib64

然后执行如下命令使动态链接库生效:

sudo ldconfig

最后执行下列命令测试CUDA是否安装成功:

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make
sudo ./deviceQuery

若无报错,即安装成功。
接下来去cudnn下载页面下载cudnn,我下载的版本是cudnn-8.0-linux-x64-v6.0.tgz,假设将其解压到home目录,执行如下命令进行安装:

cd /home/xxx/cuda
sudo cp ./include/cudnn.h /usr/local/cuda/include/
sudo cp ./lib64/* /usr/local/cuda/lib64/
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.6
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6
sudo ln -s libcudnn.so.6 libcudnn.so

这样就完成CUDA和Cudnn的安装了。

安装OpenCV

我是从源码安装的OpenCV,参考链接为:ubuntu16.04安装opencv3.4.1教程,区别在于我安装的是opencv-3.2.0。

安装GCC

由于后面编译py-faster-rcnn时,涉及到C++11,所以我们需要从源码安装gcc-5.4.0,参考链接为:Ubuntu14.04下安装gcc5.4.0(亲自安装)。和该文章操作的区别是,我没有配置环境变量,而是使用如下命令替换系统默认的gcc版本:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-5.4.0/bin/gcc 50 --slave /usr/bin/g++ g++ /usr/local/g++-5.4.0/bin/g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

这样的话,系统的gcc-4.8保留下来了,但我们默认使用的是gcc-5.4.0,如果在其他场景中想要切换gcc,可以使用如下命令:

sudo update-alternatives --config gcc

根据提示进行选择即可。
到这里还没有结束,我们还需要配置一下动态链接库,执行如下指令:

sudo mv /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.backup
sudo cp /usr/local/gcc-5.4.0/lib64/libstdc++.so.6.0.21 /usr/lib/x86_64-linux-gnu/
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/lib/x86_64-linux-gnu/libstdc++.so.6

这样就完成了GCC的安装了。

安装其他依赖

执行下列指令安装除protobuf之外的其他依赖:

sudo apt-get install 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 libatlas-base-dev python-dev
sudo apt install python-pip python-tk
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git

注意上面并没有安装libprotobuf-dev。
修改pip镜像源:

sudo pip install pip -U
sudo pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

继续安装其他依赖(注意下面使用的是python2.7下的pip):

sudo pip install cython
sudo pip install easydict
sudo pip install matplotlib==2.2.3
sudo pip install scikit-image
sudo pip install protobuf==2..6.1
sudo pip install pyyaml

到这里,大部分依赖都已经安装好了,就差protobuf升级了,也就是源码安装。

源码安装protobuf

ubuntu 默认的protobuf的版本是2.5.0,py-faster-rcnn的编译使用需要protobuf-2.6.1。可以去这个页面下载protobuf-2.6.1.tar.gz,解压后执行下列命令安装:

cd ~/protobuf-2.6.1
./autogen.sh
./configure CC=/usr/bin/gcc CXX=/usr/bin/g++ # 将protobuf安装在/usr/local下,gcc默认为5.4.0版本
make
make check
sudo make install
sudo ldconfig

这里include文件安装在/usr/local/include/google,lib文件安装在/usr/local/lib下。可以使用如下命令查看是否安装成功(我在注释中给出我系统的输出):

protoc --version
# libprotoc 2.6.1
whereis protc
# protoc: /usr/bin/protoc /usr/bin/X11/protoc /usr/local/bin/protoc /usr/share/man/man1/protoc.1.gz
which protoc
# /usr/local/bin/protoc

安装好后的protobuf-2.6.1文件夹不要立即删除,因为如果发现安装错位置或者版本不对,还需要使用该文件夹删除安装的东西,执行如下命令即可:

cd ~/protobuf-2.6.1
sudo make uninstall

我个人觉得这比使用sudo rm -rf xxx这种命令安全多了。

编译py-faster-rcnn

先下载py-faster-rcnn的源码:

git clone --recursive  https://github.com/rbgirshick/py-faster-rcnn.git

我们这里假设大家都把它下载到了home目录了,然后我们需要修改caffe-fast-rcnn的Makefile.config文件,先执行如下指令:

cd ~/py-faster-rcnn/caffe-fast-rcnn/
cp Makefile.config.example Makefile.config
gedit Makefile.config

然后做如下更改:

取消USE_CUDNN := 1注释
取消OPENCV_VERSION := 3注释
PYTHON_INCLUDE路径改为:
PYTHON_INCLUDE := /usr/include/python2.7
/usr/local/lib/python2.7/dist-packages/numpy/core/include
取消WITH_PYTHON_LAYER := 1注释
INCLUDE_DIRS和LIBRARY_DIRS路径修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/i386-linux-gnu/hdf5/serial /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

接下来执行gedit Makefile指令对Makefile做如下更改:

修改LIBRARIES(约181行)为:
LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system boost_filesystem hdf5_hl hdf5 m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio
修改NVCCFLAGS(约425行)为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
修改PKG_CONFIG(约432行)为:
PKG_CONFIG := $(shell pkg-config opencv --libs protobuf)
这样,就做好了编译前的配置,下面执行下列编译命令:

cd ~/py-faster-rcnn/lib/
make
cd ../caffe-fast-rcnn/
make all -j8  # -j8表示8线程同步,该参数可以不加
make pycaffe

如果中间没有报错,那么就编译完成了。

测试Demo

下面再测试下能否正常使用。首先执行下列命令下载模型:

cd ~/py-faster-rcnn/data/scripts/
sh fetch_faster_rcnn_models.sh

等待模型下载完后执行如下命令进行测试:

cd ~/py-faster-rcnn/tools/
./demo.py

如果输出多张类似下面的图片就说明配置成功了。
pic_5
到这里,py-faster-rcnn的配置就完成了,中间也许会出错,但请耐心分析问题所在。有时候问题可能就出现在一个依赖的版本上,比如我一开始使用的是系统安装的libprotobuf-dev,版本为2.5.0,无论是从apt-get install还是源码编译安装都无法配置通过,结果将protobuf从源码安装2.6.1版本后,就很顺利的配置好了。

参考文章

ubuntu14.04 faster-rcnn GPU环境配置(1)
ubuntu14.04 faster-rcnn GPU环境配置(2)
LUbuntu安装配置CPU版本的Caffe

猜你喜欢

转载自blog.csdn.net/hfutdog/article/details/87867764