ubutnu16.04下实现faster-rcnn

花费了一天的时间终于将faster-rcnn跑通了。把整个流程记录下来,分享给大家,也有利于自己下次配置提供方便。第一次写博客,语句表达不清楚的地方请多包含。好了,下面进入正题。

主要参考:

http://blog.csdn.net/zoro_lov3/article/details/60581174

http://blog.csdn.net/hu_oo/article/details/54918256

http://blog.csdn.net/u013832707/article/details/53501478

运行环境:ubuntu16.04    N卡:GTX970

一:安装nvidia驱动

1. 首先在这个网站上查看属于自己电脑的显卡驱动(http://www.nvidia.com/Download/index.aspx?lang=en-us),下载下来。

ubutnu16.04下实现faster-rcnn_第1张图片

2. 禁止集成的nouveau(鹦鹉螺)驱动

     Ubuntu系统集成的显卡驱动程序是nouveau,它是第三方为NVIDIA开发的开源驱动,我们需要先将其屏蔽才能安装NVIDIA官方驱动。 将驱动添加到黑名单blacklist.conf中,但是由于该文件的属性不允许修改。所以需要先修改文件属性。

    查看属性:

$sudo ls -lh /etc/modprobe.d/blacklist.conf 

    修改属性:

$sudo chmod 666 /etc/modprobe.d/blacklist.conf

    使用gedit编辑器打开: 

$sudo gedit /etc/modprobe.d/blacklist.conf

   

    在文件的最后添加如下内容:

1.  blacklist  vga16fb
2.  blacklist  nouveau
3.  blacklist  rivafb
4.  blacklist  rivatv
5.  blacklist  nvidiafb

3. 开始安装nvidia显卡驱动

 关闭当前图形工作界面(不要害怕,只是一小会的事情)

$sudo service lightdm stop

使用下列命令进入控制台

Ctrl + Alt + F1

安装显卡驱动的两种方式

方式一:

$sudo sh NVIDIA-Linux-x86_64-xxx.run

方式二:

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

安装结束后进入原来的图形界面
$sudo service lightdm start

4.  查看安装的驱动

$nvidia-smi

出现下面的显卡信息表示安装成功:

ubutnu16.04下实现faster-rcnn_第2张图片

到此,nvidia显卡的驱动就安装好了。

二:安装 cuda8.0

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

ubutnu16.04下实现faster-rcnn_第3张图片

ubutnu16.04下实现faster-rcnn_第4张图片

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

$sudo sh cuda_8.0.61_375.26_linux.run



执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装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:
1. cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
2. make   (sudo make -j8)
3. sudo ./deviceQuery

若显示GPU信息则安装成功。三:安装cudnn

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

下载完cudnn5.1后进行解压,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      #生成软链接

四:安装 opencv3.1

安装过程中主要是opencv这一块花费的时间较多,也在本文中重点讲一下这一个过程以及遇到的各种问题。

1.官网下载:(https://opencv.org/opencv-3-2.html)(文件下载在网页的最后,两种形式: zip tar.gz)

2.根据网上资料,输入如下命令安装依赖包:

$sudo apt-get install build-essentia
$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的源码
$ cd /opencv-3.2.0  
$ mkdir release  
$ cd release  
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
效果展示:
 

ubutnu16.04下实现faster-rcnn_第5张图片


ubutnu16.04下实现faster-rcnn_第6张图片


出现上图中的情况,说明配置和生成成功。

接下来,就开始编译:

$sudo make -j8    #-j8是指cpu提供几个线程去工作,配置一般的电脑可直接make
效果展示:

ubutnu16.04下实现faster-rcnn_第7张图片

ubutnu16.04下实现faster-rcnn_第8张图片

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

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

最终效果展示:

ubutnu16.04下实现faster-rcnn_第9张图片

ubutnu16.04下实现faster-rcnn_第10张图片

至此opencv的安装过程就结束了。

安装过程中遇到的问题:

1. 关于QT5的错误

终端显示错误报文如下:

CMake Warning at cmake/OpenCVFindLibsGUI.cmake:22 (find_package):

  By not providing "FindQt5Concurrent.cmake" in CMAKE_MODULE_PATH this

  project has asked CMake to find a package configuration file provided by

  "Qt5Concurrent", but CMake did not find one.

 

  Could not find a package configuration file provided by "Qt5Concurrent"

  with any of the following names:

 

    Qt5ConcurrentConfig.cmake

    qt5concurrent-config.cmake

 

  Add the installation prefix of "Qt5Concurrent" to CMAKE_PREFIX_PATH or set

  "Qt5Concurrent_DIR" to a directory containing one of the above files.  If

  "Qt5Concurrent" provides a separate development package or SDK, be sure it

  has been installed.

  Call Stack (most recent call first):

  CMakeLists.txt:466 (include)

 

 

qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file     or         directory

CMake Error at /usr/share/cmake-2.8/Modules/FindQt4.cmake:1386 (message):

  Found unsuitable Qt version "" from NOTFOUND, this code requires Qt 4.x

Call Stack (most recent call first):

  cmake/OpenCVFindLibsGUI.cmake:34 (find_package)

  CMakeLists.txt:466 (include)

-- Configuring incomplete, errors occurred!

See also "/home/*******/OpenCV/opencv-2.4.9/build/CMakeFiles/CMakeOutput.log".

See also "/home/*******/OpenCV/opencv-2.4.9/build/CMakeFiles/CMakeError.log".

问题原因:系统上没有安装Qt5

解决方案:

$sudo apt-get install qt5-default

2. ippicv_linux_201651201.tgz 下载安装

因为""的问题,很多安装问题都会卡在相关资源下载失败上,ippicv_linux_20151201.tgz也是因此下载失败,如果翻不出去还可以选择离线下载之后再放到相应文件夹中,具体如下:

        下载ippicv_linux_20151201.tgz之后,将其复制到opencv-3.1.0/3rdparty/ippicv/downloads/linux-  808b791a6eac9ed78d32a7666804320e 目录下然后再继续编译,(这一文件夹是在编译过程中生成的,若找不到也可以手动创建)。

下载地址:http://download.csdn.net/download/lx928525166/9479919

     2. 不使用上述命令:cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

         改为:cmake -DWITH_IPP=OFF

3.  没有安装java环境,以至于无法生成jar包。

     请广大小伙伴自行安装java环境,最好安装在如下图所示:(博主也在这一步掉入了一个坑,耽误了些时间,如何安装java环境请自行Google)

4. 系统未安装 ant(使用如下命令安装)

$sudo apt-get install ant

5. opecv3.0与cuda8.0不兼容导致的问题(小伙伴可以先行改掉这个地方,然后在cmake  make  以及make install)

解决方案:

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) //对这一行进行修改

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000) //改为这样

五: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文件:

#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 -j82. make runtest3. make pycaffe

如果没有报错那么就安装成功了。
在成功编译caffe的源码之后,可以在python环境中使用caffe
Ubuntu环境下,打开python解释程序,输入import caffe时:出现以下错误

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

解决方法:

打开~/.bashrc

$sudo gedit ~/.bashrc
在文件下方写入
$ export PYTHONPATH = ~/caffe/python
关闭文件,在终端写入下面语句,使环境变量生效
$ source ~/.bashrc

注意:除此之外,还有错误出现,全部都是缺少某个东西的原因。因此依次安装  cython   easydict   yaml   protobuf

 

$sudo pip install easydict
$sudo pip install cython
$sudo pip install python-yaml
$sudo pip install protobuf 

生成Cython模型

首先,如果你用了独立显卡,需要修改关于独立显卡计算能力的部分。去CUDA-GPUS确定你的显卡的CUDA计算能力。我的是GTX970,为5.2.所以修改$FRCN_ROOT/lib中的setup.py中的-arch=sm_XX-arch=sm_52。具体位置如下:

extra_compile_args={'gcc': ["-Wno-unused-function"],
                            'nvcc': ['-arch=sm_52',
                                     '--ptxas-options=-v',
                                     '-c',
                                     '--compiler-options',
                                     "'-fPIC'"]},
        include_dirs = [numpy_include, CUDA['include']]
    ),

$ cd $FRCN_ROOT/lib

$ make

生成Caffepycaffe

$ 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里的相应的同名文件。


下载模型文件(faster_rcnn_models.tgzimagenet_models.tgz) 

相关链接:(http://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0)

      (http://dl.dropbox.com/sgstw7122padlf0l/imagenet_models.tgz?dl=0)

备注:下载需。

 
$ cd py-faster-rcnn/data

 

把文件放在这里,并解压


$ tar zxvf faster_rcnn_models.tgz -C ./

运行demo

$ ./tools/demo.py --net zf(--net zf是指选择哪个网络)

效果展示:



ubutnu16.04下实现faster-rcnn_第11张图片



ubutnu16.04下实现faster-rcnn_第12张图片


















你可能感兴趣的:(目标识别,ubuntu,博客,cuda,cudnn,caffe,faster-rcnn,目标识别)