原博客地址: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
由于国内网络问题,可能下载失败,可以参考以下方法:

FQ下载

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

Ubuntu16.04+Cuda8.0+cuDNN6配置py-faster rcnn(转)的更多相关文章

  1. Ubuntu16.04+CUDA8.0+cudnn6

    按之前的方法给TITAN X安装cuda8.0会发生循环登录的问题,因此换了一种安装方法 参考:https://www.jianshu.com/p/002ece426793,http://blog.c ...

  2. ubuntu16.04+cuda8.0+cudnn6.0安装mxnet(极简!+成功!)

    安装MXNet 1.安装 CUDA8.0对应的mxnet版本是mxnet-cu80(同理如果是CUDA9.0对应版本则是mxnet-cu90). 如果pip安装过慢,请参考 Ubuntu16.10下配 ...

  3. Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7+TensorFlow1.2.0环境搭建

    软件版本说明:我选的Linux系统是Ubuntu16.04,CUDA用的8.0,Ubuntu16.04+CUDA8.0+cuDNN5.1+Python2.7只支持TensorFlow1.3.0以下的版 ...

  4. Ubuntu16.04+Cuda8.0+1080ti+caffe+免OpenCV3.2.0+faster-rCNN教程

    一.事先声明:1.Ubuntu版本:Ubuntu使用的是16.04.而不是16.04.1或16.04.2,这三个是有区别的.笔者曾有过这样的经历,Git上一个SLAM地图构建程序在Ubuntu14.0 ...

  5. Ubuntu16.04 +cuda8.0+cudnn+caffe+theano+tensorflow配置明细

      本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www ...

  6. Ubuntu16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano

    title: Ubuntu 16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano categories: 深度学习 tags: [深度学习框架搭建] --- 前言 ...

  7. Keras学习环境配置-GPU加速版(Ubuntu 16.04 + CUDA8.0 + cuDNN6.0 + Tensorflow)

    本文是个人对Keras深度学习框架配置的总结,不周之处请指出,谢谢! 1. 首先,我们需要安装Ubuntu操作系统(Windows下也行),这里使用Ubuntu16.04版本: 2. 安装好Ubunt ...

  8. 深度学习环境配置Ubuntu16.04+CUDA8.0+CUDNN5

    深度学习从12年开始打响,配置深度学习环境软件一直是一个头疼的问题,如何安装显卡驱动,如何安装CUDA,如何安装CUDNN:Ubuntu官方一直吐槽Nvidia显卡驱动有问题,网上大神也给出了关闭li ...

  9. 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3

    紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...

随机推荐

  1. TextView 垂直居中

     需要区分的是这里的top,bottom,ascent,descent,baseline是指字内容的属性,通过getPaint().getFontMetricsInt()来获取得到.和字体内容的外部容 ...

  2. Tango Java API常数

    Tango Java API Constants常数 Constant Field Values常数字段值 Contents com.google.* com.google.* com.google. ...

  3. 编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法、Lambda表达式代替方法

    建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List< ...

  4. 编写高质量代码改善C#程序的157个建议——建议80:用Task代替ThreadPool

    建议80:用Task代替ThreadPool ThreadPool相对于Thread来说具有很多优势,但是ThreadPool在使用上却存在一定的不方便.比如: ThreadPool不支持线程的取消. ...

  5. Nginx根据用户请求的不同参数返回不同的json值

    用户请求url:http://localhost:8000/getconfig?v=1.03.01,根据参数v=1.03.01或者其他的值返回不同的json值.如果用户请求不带该参数,则返回默认的js ...

  6. MVC4 Action 两种异步方式

    1. xxxAsync/xxxCompleted 组合方式异步,xxxCompleted  就是他的回调函数,在执行完 xxxAsync 后调用xxxCompleted  . 使用 异步方式必须继承A ...

  7. Reporting Service服务SharePoint集成模式安装配置(7、配置SharePoint2010产品)

    在第3步安装完成SharePoint2010产品后,没有选择[立即安装产品配置向导],这一小节将单独配置SharePoint2010产品数据库(管理中心). 1)启动SharePoint 2010 产 ...

  8. Verilog MIPS32 CPU(七)-- DIV、DIVU

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  9. Excel转Json工具

    应用程序在本地的数据配置的格式一般有JSON.XML.YAML.INI等格式,但是如果直接编写JSON数据往往不是特别方便, 今天给大家分享的是如何在EXCEL配置好数据,然后一键转换成JSON和C# ...

  10. bitnami openedx安装的各种坑及痛苦经历

    那天在华为网站上学习,看见他们的培训系统挺不错的,看到下边写着openedx,百度了一下是个开源软件,挺流行的,在这之前对于openedx没有任何了解,然后开始了一周多的痛苦经历. 首先在opened ...