您的位置:首页 > Web前端

Ubuntu16.04环境下安装caffe及运行faster-rcnn

2017-03-06 16:38 691 查看
花了差不多五天的时间,今天终于将faster-rcnn的demo运行成功了。过程非常艰难,所以决定开个博客,把过程都记录下来,可以给需要的朋友们一个参考,也给自己在下次配置的时候提供方便。

主要参考:

(http://www.linuxdiyf.com/linux/24659.html)

(http://blog.csdn.net/autocyz/article/details/52299889)

(http://blog.csdn.net/u011070171/article/details/52399317

环境:ubuntu16.04 显卡:GTX960M 4G

一、安装caffe

1.安装NVIDIA驱动

首先去官网查适合自己的GPU驱动(http://www.nvidia.com/Download/index.aspx?lang=en-us)



执行如下语句安装:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-375 #这里要写自己适合的gpu驱动版本
sudo apt-get install mesa-common-dev
sudo apt-get install freeglut3-dev

安装完成后,输入指令确认完成:


sudo nvidia-smi

若输出gpu信息则驱动安装完成。

2. cuda8.0安装

cuda是NVIDIA的编程语言平台,想使用gpu就必须要使用cuda。下载地址:(https://developer.nvidia.com/cuda-release-candidate-download)



下载完cuda8.0后,执行如下语句,运行runfile文件:

sudo sh cuda_8.0.61_375.26_linux.run


执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia375驱动时,一定要选择否,因为前面我们已经安装了更加新的nvidia375,所以这里不要选择安装。其余的都直接默认或者选择是即可。

安装完毕后,再声明一下环境变量,并将其写入到 ~/.bashrc 的尾部:

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


然后设置环境变量和动态链接库,在命令行输入:

sudo gedit /etc/profile


在打开的文件末尾加入:

export PATH = /usr/local/cuda/bin:$PATH


保存之后,创建链接文件:

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


在打开的文件中添加如下语句:

/usr/local/cuda/lib64


然后执行

sudo ldconfig


使链接生效。

安装完成后测试一下cuda的samples。

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


若列出gpu信息则安装成功。

3.cudnn安装

cuDNN是GPU加速计算深层神经网络的库。

首先去官网下载(https://developer.nvidia.com/rdp/cudnn-download)你需要的cudnn,下载的时候需要注册账号。选择对应你cuda版本的cudnn下载。这里我下载的是cudnn5.1,是个压缩文件(.tgz)

下载完cudnn5.0之后进行解压,cd进入cudnn5.1解压之后的include目录,在命令行进行如下操作:

sudo cp cudnn.h /usr/local/cuda/include/    #复制头文件


再将cd进入lib64目录下的动态文件进行复制和链接:

sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5    #删除原有动态文件
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5  #生成软衔接
sudo ln -s libcudnn.so.5 libcudnn.so      #生成软链接


4.opencv3.1安装

从官网上下载opencv3.1.0

(http://opencv.org/downloads.html)

并将其解压到你要安装的位置,假设解压到了/home

首先安装需要的依赖项。

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


在终端中cd到opencv文件夹下,然后

mkdir build   #新建一个build文件夹,编译的工程都在这个文件夹里
cd build/
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..


cmake成功后,会出现如下结果,提示配置和生成成功:

-- Configuring done
-- Generating done
-- Build files have been written to: /home/ise/software/opencv-3.1.0/build


然后make编译就可以了

make -j8


上面是将opencv编译成功,但是并没有安装到我们的系统中,有很多的设置都没有写入到系统中,因此还要进行install。

sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig


会出现的错误:

modules/cudalegacy/src/graphcuts.cpp:120:54: error:
‘NppiGraphcutState’ has not been declared
typedef NppStatus (*init_func_t)(NppiSize oSize,
NppiGraphcutState** ppState, Npp8u* pDeviceMem);


这是因为opecv3.0与cuda8.0不兼容导致的。解决办法:

修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件内容

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) //对这一行进行修改
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000) //改为这样


5.caffe安装

终于开始caffe安装了。首先安装各种依赖包。

sudo apt-get update
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y--no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy


将终端cd到你要安装caffe的位置,执行如下指令,从github上clone caffe。

git clone https://github.com/BVLC/caffe.git  //从github上git caffe
cd caffe
sudo cp Makefile.config.example Makefile.config   //将Makefile.config.example的内容复制到Makefile.config
//因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子
sudo gedit Makefile.config //打开Makefile.config文件


打开之后修改如下内容:

//若使用cudnn,则将# USE_CUDNN := 1 修改成: USE_CUDNN := 1
//若使用的opencv版本是3的,则将# OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3
//若要使用python来编写layer,则需要将# WITH_PYTHON_LAYER := 1 修改为 WITH_PYTHON_LAYER := 1
//重要的一项 将# Whatever else you find you need goes here.下面的 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为: INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial //这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径


打开makefile文件:

将
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)


编辑/usr/local/cuda/include/host_config.h,将其中的第115行注释掉:

#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
注释掉
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!


最后

make all -j8
make runtest
make pycaffe


如果没有报错那么就安装成功了。

在成功编译caffe的源码之后,可以在python环境中使用caffe。

在Ubuntu环境下,打开python解释程序,输入import caffe时:出现以下错误

>>>import caffe
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named caffe


解决方法:

打开~/.bashrc

sudo gedit ~/.bashrc


在文件下方写入

export PYTHONPATH=~/caffe/python


关闭文件,在终端写入下面语句,使环境变量生效

source ~/.bashrc


其他的缺什么之类的错误,缺啥安装啥就可以了。

二、faster rcnn安装与运行

1.下载

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git[/code] 
2.生成Cython模块

cd py-faster-rcnn/lib
make


3.生成Caffe和pycaffe

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


打开Makefile.config,修改方式和caffe中的修改方式一样。

打开Makefile文件,也按照caffe中的方式进行修改。

编译

make -j8 && make pycaffe


需要注意的是,因为这个版本所用的cudnn为旧版本的,可能与新环境的cudnn不兼容,导致出现如下错误:

In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from ./include/caffe/util/db.hpp:6,
from src/caffe/util/db.cpp:1:
/usr/local/cuda/include/cudnn.h:803:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetPooling2dDescriptor(
^
make: *** [.build_release/src/caffe/util/db.o] Error 1


解决方法:

1).将/py-faster-rcnn/caffe-fast-rcnn/include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.

2).将/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layer里的,所有以cudnn开头的文件都替换成最新版的caffe里的相应的同名文件。

4.下载模型文件

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


复制其中的URL地址(http://www.cs.berkeley.edu/~rbg/faster-rcnn-data),打开下载faster_rcnn_models.tgz文件。我在windows系统下用迅雷下的,ubuntu里下载速度太慢了……

下载后

cd py-faster-rcnn/data


把文件放在这里,并解压

tar zxvf faster_rcnn_models.tgz -C ./


5.运行demo

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


效果图截取几张:







结语:

安装的过程异常艰辛,出现过很多错误,安装好caffe后我本来想运行fast-rcnn,但在好不容易编译通过后,在运行demo时突然退出出现 段错误核心已转储 字样,找了一圈没什么解决方法,不知道是不是电脑带不动的关系。所以最终选择了faster-rcnn来运行。安装的过程也许远比我写的过程要长,大家遇到问题,还是要多百度多google。

第一次写博,大部分代码都是参考网上其他大神的,我把他们凑在一起了。如果哪里不妥,请告诉我,我会删掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: