zoukankan      html  css  js  c++  java
  • Ubuntu16.04+Cuda8.0+cuDNN6配置py-faster rcnn(转)

    原博客地址:https://blog.csdn.net/meccaendless/article/details/79557162

    0前言
    Faster R-CNN是任少卿2015年底推出的目标检测算法 ,时至今日依旧还是Object Detection领域最好方法之一,基于该框架后续推出了 R-FCN,Mask R-CNN 等改进框架,但基本结构变化不大。同时不乏有SSD,YOLO2等骨骼清奇的新作,虽然在速度上大幅度领先Faster R-CNN,尤以SSD lite和yolo lite为甚, 但精度上依然以Faster R-CNN为最好。对于一般的detector问题,只需在ImageNet pre-train model上进行若干次 fine-tune,就能得到非常好的效果。

            Faster R-CNN 主要由三个部分组成:(1)基础特征提取网络(2)RPN (Region Proposal Network) (3)Fast-RCNN 。其中RPN和Fast-RCNN共享特征提取卷积层,思路上依旧延续提取proposal + 分类的思想。后人在此框架上,推出了一些更新,也主要是针对以上三点。有关改进总结和理解参考以下三篇博客:

    http://blog.csdn.net/z5337209/article/details/72838049

    http://blog.csdn.net/linolzhang/article/details/74159463

    http://blog.csdn.net/linolzhang/article/details/75137050

    1配置基本环境
    1. 硬件环境:

    i5 6500 四核四线程

    NVIDIA GTX1080TI

    16G RAM

    2. 软件基础环境:

    ubuntu 16.04 LTS

    CUDA 8.0 + cuDNN6.0

    需要注意的是:

    (1)有关显卡驱动,cuda和cudnn安装参考这里。需要注意的是拆显卡装ubuntu的步骤,笔者在某些机器上安装ubuntu时出现黑屏才采取此下策,若已经装好ubuntu,直接正常安装cuda即可。

    (2)还需注意的是,笔者没有测试py-faster rcnn是否支持cuda9.1和cuDNN7,还是采用了保守的cuda8.0+cudnn6.0。其实py-faster rcnn支持的是cudnn 4,所以即使采用cudnn6.0也需要做一些修改,具体请看下文。

    (3)cuda8.0默认的驱动版本是375,需要修改/NVIDIA_CUDA-8.0_Samples/3_Imaging/cudaDecodeGL/findgllib.mk file文件,否则会报错,参考这里。

    到此为止,还需安装opencv3.1,caffe,python以及numpy等依赖项,参考下文介绍。

    2安装依赖项
    sudo apt-get update
    sudo apt-get install -y --no-install-recommends
          build-essential
          cmake
          git
          libgoogle-glog-dev
          libprotobuf-dev
          protobuf-compiler
          python-dev
          python-pip                          
    sudo pip install numpy protobuf
    sudo apt-get install -y --no-install-recommends libgflags-dev

    其它依赖项
    sudo apt-get install -y --no-install-recommends
          libgtest-dev
          libiomp-dev
          libleveldb-dev
          liblmdb-dev
          libopencv-dev
          libopenmpi-dev
          libsnappy-dev
          openmpi-bin
          openmpi-doc
          python-pydot
    sudo pip install
          flask
          graphviz
          hypothesis
          jupyter
          matplotlib
          pydot python-nvd3
          pyyaml
          requests
          scikit-image
          scipy
          setuptools

          tornado


    3.opencv安装
    安装必要的库

    sudo apt-get -y remove ffmpeg x264 libx264-dev
    sudo apt-get -y install libopencv-dev build-essential checkinstall cmake pkg-config yasm libtiff4-dev libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev x264 v4l-utils ffmpeg libgtk2.0-dev
    点这里下载OpenCV3.1.0版本,下载tar.gz压缩包,进行解压,解压之后进入opencv3.1目录,建立要编译的build目录,然后进入build目录进行编译:

    cd ~/opencv-3.1.0
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
    由于国内网络原因,cmake过程可能会出现如下以下错误:

     ICV: Downloading ippicv_linux_20151201.tgz…

    在直接下载该文件的过程中,会因为超时而失败,可以下载ippicv_linux_20151201.tgz, 并替换掉 opencv-3.1.0/3rdparty/ippicv/downloads/linux-8b449a536a2157bcad08a2b9f266828b下的同名文件,然后再次cmake即可。

    生成编译文件之后,在opencv-3.1.0/build目录下,终端输入:

    make -j4
    sudo make install
    接着配置环境变量:

    sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
    sudo ldconfig
    编译make opencv时可能以下错误:

    /opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState‘ has not been declared typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat

    .......

    这是由于opencv3.1不支持cuda8.0的原因,解决方案:
    进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件

    <span style="color:#990000;">cd ~/opencv-3.1.0/modules/cudalegacy/src
    sudo gedit ./graphcuts.cpp</span>
    将:

    #include "precomp.hpp"

    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

    改为
    #include "precomp.hpp"
    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
    然后make编译就可以了

    安装完毕后终端输出:

    pkg-config --modversion opencv
    若输出opencv版本号则说明安装成功。

    4安装python
    用系统自带的python2.7即可,需要再装一些依赖项:

    sudo apt-get install python-numpy python-scipy python-matplotlib python-qt4 qt4-designer pyqt4-dev-tools python-qt4-doc spyder cython swig python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags ipython protobuf-c-compiler protobuf-compiler
    sudo apt-get install python-pip
    sudo pip install tornado pyzmq pygments
    sudo apt-get install libzmq-dev
    完成后终端输入

    ipython
    查看是否安装成功。

    5安装caffe
    首先安装依赖

    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 build-essential cmake git pkg-config libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev python-dev
    sudo apt-get install --no-install-recommends libboost-all-dev
    sudo apt-get install libatlas-base-dev
    然后github上clone 源码

    git clone https://github.com/BVLC/caffe.git
    cd到caffe根目录,修改Makefile.conf文件

    cd caffe
    cp Makefile.config.example Makefile.config
    修改如下内容:

    去掉第5行注释 USE_CUDNN := 1
    去掉第21行的注释 OPENCV_VERSION := 3
    去掉注释 WITH_PYTHON_LAYER := 1
    在 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 后面添加 /usr/include /usr/include/hdf5/serial
    在 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 后面添加 /usr/lib/x86_64-linux-gnu/hdf5/serial
    实现caffe对Python和Matlab接口的支持 修改 PYTHON_LIB := /usr/local/lib
    注意
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include和/usr/include /usr/include/hdf5/serial 有一个空格,
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib同理
    cuda8.0编译器问题,打开/usr/local/cuda/include/host_config.h ,将:

    #error -- unsupported GNU version! gcc versions later than 5.3 are not supported!
    注释掉,即:

    //#error -- unsupported GNU version! gcc versions later than 5.3 are not supported!
    最后编译caffe

    make all -j4
    make test -j4
    make runtest -j4
    make pycaffe -j4
    时间较长,耐心等待编译完成。

    6训练MINST测试caffe
    配置caffe完成后,用MNIST数据集对caffe进行测试

    1.将终端定位到Caffe根目录

    cd ~/caffe
    2.下载MNIST数据库并解压缩

    ./data/mnist/get_mnist.sh
    3.将其转换成Lmdb数据库格式
    ./examples/mnist/create_mnist.sh
    4.训练网络

    ./examples/mnist/train_lenet.sh
    训练速度很快,几十秒即可结束。

    笔者参考了

    http://blog.csdn.net/zem_nezer/article/details/56966964

    的caffe配置方案,博主没有使用cudnn,测试速度大概117 literations/s,使用cudnn后,速度可达850 literations/s。根据NVIDIA官方信息,采用cuda9.1+cudnn7速度会更快,感兴趣的同学可以尝试一下是否能够配置成功。
    7部署faster rcnn
    1. github clone源码

    git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
    2. 编译Cython模型

    cd py-faster-rcnn/lib
    make
    3. 替换caffe-fast-rcnn文件,以支持cudnn6.0:

    (1)用最新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

    (2)用caffe源码中的这个文件替换掉faster rcnn 对应文件
      include/caffe/util/cudnn.hpp

    (3)将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
      cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
      cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter

    4.编译Caffe和pycaffe

    cd py-faster-rcnn/caffe-fast-rcnn
    make -j8 && make pycaffe
    5.下载faster-rcnn识别模型

    cd py-faster-rcnn
    ./data/scripts/fetch_faster_rcnn_models.sh
    由于国内网络问题,可能下载失败,可以参考以下方法: 

    翻墙下载

    https://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0

    下载好后,将压缩包放在 py-faster-rcnn/data/下解压即可

    6.测试demo

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

  • 相关阅读:
    在linux下搭建wiki环境【转】
    GitLab版本管理【转】
    linux设备驱动中的并发控制【转】
    分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace【转】
    Git常用命令总结【转】
    Linux中断(interrupt)子系统之一:中断系统基本原理【转】
    大话Linux内核中锁机制之原子操作、自旋锁【转】
    自旋锁spin_lock和raw_spin_lock【转】
    Linux内核同步机制之(四):spin lock【转】
    spin_lock浅析【转】
  • 原文地址:https://www.cnblogs.com/byteHuang/p/9933172.html
Copyright © 2011-2022 走看看