原博客地址: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. [GO]接口的定义和实现

    package main import "fmt" type Humaner interface { SayHi() } type Student struct { name st ...

  2. vs2015 debugger,unable to attach to application iisexpress.exe

    vs2015 unable to attach to application iisexpress.exe,没有可用的数据了 搞了一天也没解决...

  3. app里面嵌套的H5页面上电话号码怎么才能点击拨号?

    代码: <p>联系我们:<a href="tel://66666666666">66666666666</a> </p>

  4. 全面剖析Smarty缓存机制二[清除缓存方法]

    前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关 ...

  5. activiti监听器

    activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业务非常的复杂,通常有如下一些场景: 1.activiti人员动态的分配. 2.当前任务节点完成的时候,指定需要指定下一个节点的处理人( ...

  6. WPF学习资源整理

    WPF(WindowsPresentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的编程模型 ...

  7. sampling method

    sampling method 背景 在贝叶斯框架下,利用后验分布对参数进行估计,也即 其中 (1)是参数的先验分布. (2)是似然分布,数据集的生成联合概率 (3)是参数的后验分布. 通常分布很复杂 ...

  8. windows8.1 windows defender service无法启动解决方案

    分析:当pc安装第三方杀毒软件,比如360杀毒,这时候360会强制关闭mse杀毒服务,无法在服务栏目里启动.由于windows defender service是系统强制启动进程,无法在系统启动后进行 ...

  9. Transaction And Lock--锁相关基础

    --=======================================================--锁提示--holdlock :将共享锁保留到事务完成,而不是在相应的表.行或数据页 ...

  10. INDEX--索引页上存放那些数据

    由于索引的叶子节点和非叶子节点的作用不同,导致不同类型节点上每行记录存放的数据不同--============================================唯一聚集索引叶子节点:所有 ...