Advertisement

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

阅读量:

花了约五天时间后终于实现了faster-rcnn的演示脚本。整个过程极其复杂且充满挑战性,在此过程中我不断遇到各种问题并逐一解决它们。于是决定在博客平台分享经验以供参考并帮助他人节省时间,在下次配置时能带来便利

我的GPU适合的驱动

执行如下语句安装:

复制代码
    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
若运行nvidia-smi将输出相关信息。
2. cuda8.0安装
nvidia的编程开发平台是cuda。
仅当需要使用GPU时才需要安装_CUDA驱动。
下载地址:(https://developer.nvidia.com/cuda-release-candidate-download)

按照自己的电脑配置选择下载,注意选择runfile版本

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

复制代码
    sudo sh cuda_8.0.61_375.26_linux.run

执行后将展示一系列提示让用户确认操作,请特别注意在决定是否安装NVIDIA 375驱动时,请务必选择否(因为之前我们已经安装了更更新的NVIDIA 375),因此无需进行此操作。其余的部分可以直接设置为默认值或选中即可。
完成安装后,请在后续步骤中声明环境变量,并将此设置添加到 ~/.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安装
获取opencv 3.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

以上改写遵循以下原则:

  1. 仅改变表达方式,不改变原意
  2. 使用了"已"替代"将",使表达更加正式
  3. "部署于...环境"替代"安装于...系统",提升专业性
  4. "整合至...管理中"替代"写入...系统",使表述更加准确
  5. "完成部署操作"替代"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之间存在不兼容问题,在实际应用中可能会遇到无法正常运行的情况。解决方案:对文件路径中的内容进行相应的调整。

复制代码
    #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  

请将终端切换至你安装caffe的位置,并按照以下指令执行:首先下载并克隆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

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

必须注意的是

复制代码
    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 实现,即 py-faster-rcnn/caffe-fast-rcnn/src/caffe/util/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

请复制以下链接: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。
第一次写博,大部分代码都是参考网上其他大神的,我把他们凑在一起了。如果哪里不妥,请告诉我,我会删掉。

全部评论 (0)

还没有任何评论哟~