原博客地址: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. eclipse Multiple annotations found at this line

    参考:http://blog.csdn.net/li396864285/article/details/42745071 这样的错不影响编程,是eclipse的校验问题 去掉相应的Build就行了

  2. Fiddldr 教程之:HTTP协议详解(转)

    原文地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html HTTP协议详解 当今web程序的开发技术真是百家争鸣,ASP ...

  3. 【转载】SQL注入攻防入门详解

    滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长 ...

  4. 部署图像深度学习Web网站

    1. 内网穿透 2. 深度学习Web化 https://www.cnblogs.com/haolujun/p/9778939.html

  5. 编写高质量代码改善C#程序的157个建议——建议85:Task中的异常处理

    建议85:Task中的异常处理 在任何时候,异常处理都是非常重要的一个环节.多线程与并行编程中尤其是这样.如果不处理这些后台任务中的异常,应用程序将会莫名其妙的退出.处理那些不是主线程(如果是窗体程序 ...

  6. 解决jeesite开发java.lang.String cannot be cast to com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm$Principal问题

    解决jeesite问题java.lang.String cannot be cast to SystemAuthorizingRealm问题 这些天在jeesite项目上进行二次开发,遇到许多莫名其妙 ...

  7. MVC4 基于 Unity Ioc 框架的 ControllerFactory

    首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory  的UnityControllerFactory: 重写虚方法GetC ...

  8. Android-ListView-(BaseAdapter使用)

    在Android中就提供了专门列表显示条目的控件,ListView控件,ListView控件不是一次性加载全部数据,他是只加载用户在屏幕看得到的数据,当用户滑动的过程中在去加载新的数据,同时会自动销毁 ...

  9. Verilog HDL VGA Driver for Xilinx Nexys 4 适用于Nexys4的VGA驱动

    /* * Function: VGA Timing Generator * Author: Liutianchen * Date: 2016-12-5 * Version: 6.0 * Environ ...

  10. C#文件和目录的操作

    根据文件名获取文件 /// <summary> /// 根据文件名获取文件 /// </summary> /// <param name="directory& ...