Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型

0 说明

系统环境为Ubuntu14.04, 已经安装好了CUDA和cuDNN以及Python等基础包。

1 设置和编译py-faster-rcnn

1.1 下载py-faster-rcnn

$ git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
$ git submodule update --init --recursive 或者下载github上最新版本的caffe-fast-rcnn:
$ git clone https://github.com/rbgirshick/caffe-fast-rcnn.git 然后切换到对应的commit

1.2 编译Cython模块

$ cd py-faster-rcnn/lib
$ make

1.3 编译caffe和pycaffe

$ cd py-faster-rcnn/caffe-fast-rcnn
$ cp Makefile.config.example Makefile.config

# 修改 Makefile.config, 去掉注释
WITH_PYTHON_LAYER := 1
USE_CUDNN := 1
BLAS_INCLUDE := /usr/include/atlas
# 根据你的需求修改Makefile.config , 比如设置GPU 支持, cuDNN, CUDA 版本, Anaconda, OpenCV, 等等。
# 修改完Makefile.config后
$ make all -j32 # -j32 编译加速. 32 CPU核数目,根据你的电脑的CP核数目来修改,或者直接make all -j也可以 
# 假设你已经安装好了PyCaffe相关依赖, 否则请重新去参考Caffe安装教程
$ make pycaffe -j32

1.4 py-faster-rcnn各文件夹说明

.
├── caffe-fast-rcnn              # caffe目录
│   ├── build -> .build_release
│   ├── caffe.cloc
│   ├── cmake
│   ├── CMakeLists.txt
│   ├── CONTRIBUTING.md
│   ├── CONTRIBUTORS.md
│   ├── data
│   ├── distribute
│   ├── docs
│   ├── examples
│   ├── include
│   ├── INSTALL.md
│   ├── LICENSE
│   ├── Makefile
│   ├── Makefile.config         # 编译caffe配置文件
│   ├── Makefile.config.example
│   ├── matlab
│   ├── models
│   ├── python
│   ├── README.md
│   ├── scripts
│   ├── src
│   └── tools
├── data                        # 存放训练数据文件夹
│   ├── cache
│   ├── demo
│   ├── faster_rcnn_models
│   ├── imagenet_models
│   ├── pylintrc
│   ├── README.md
│   ├── scripts
│   ├── VOCdevkit              # VOC2007数据集
│   ├── VOCdevkit2007 -> VOCdevkit
├── experiments
│   ├── cfgs
│   ├── logs
│   ├── README.md
│   └── scripts                # 包含端对端训练脚本
├── lib                        
│   ├── datasets               # 包含数据库读取工厂类
│   ├── fast_rcnn              # 包含config.py
│   ├── Makefile
│   ├── nms
│   ├── pycocotools
│   ├── roi_data_layer
│   ├── rpn
│   ├── setup.py
│   ├── transform
│   └── utils
├── LICENSE
├── models                     # 大中小[VGG16,VGGCNNM1024,ZF]模型文件
│   ├── coco
│   ├── pascal_voc
│   └── README.md
├── output                     # 训练输出模型 
├── README.md
└── tools                      # 包含训练py脚本和运行demo脚本 
    ├── compress_net.py
    ├── demo.py
    ├── eval_recall.py
    ├── _init_paths.py
    ├── _init_paths.pyc
    ├── README.md
    ├── reval.py
    ├── rpn_generate.py
    ├── test_net.py
    ├── train_faster_rcnn_alt_opt.py
    ├── train_net.py
    └── train_svms.py

问题:

faster rcnn 代码默认是使用的cudnn v4, 但是为了体验最新的v5, 或者使用GTX1080 ,我们编译faster rcnn的时候就会报错
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 src/caffe/data_reader.cpp:6:
/usr/local/cuda/include/cudnn.h:799:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetPooling2dDescriptor(

解决办法:

用最新caffe源码的以下文件替换掉faster rcnn 中caffe-fast-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

include/caffe/util/cudnn.hpp

将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter
修改完后,git status下,确保修改了指定的文件:

Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型_第1张图片

然后重新编译:

$ make all -j
$ make pycaffe -j

到此就可以使用py-faster-rcnn了。

2 测试py-faster-rcnn demo

2.1 下载预先训练好的Faster-rcnn模型

$ cd py-faster-rcnn
$ ./data/scripts/fetch_faster_rcnn_models.sh
# 如果下载失败,可以通过这个种子来下载:
# http://academictorrents.com/download/cca56021739c8a75af3b58f536d4930266c25d5e.torrent
# 然后将faster_rcnn_models.tgz解压到data目录下

2.2 运行demo

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

3 基于PASCAL VOC数据集训练模型

3.1 准备数据集和预训练模型

$ cd py-faster-rcnn/data
# 注意链接可能会失效,网上可以另找资源
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

$ tar xvf VOCdevkit_08-Jun-2007.tar 
$ tar xvf VOCtrainval_06-Nov-2007.tar
$ tar xvf VOCtest_06-Nov-2007.tar

$ ln -s VOCdevkit VOCdevkit2007 #create a softlink

$ cd py-faster-rcnn
$ ./data/scripts/fetch_imagenet_models.sh
$ ./data/scripts/fetch_faster_rcnn_models.sh

3.2 训练

$ cd py-faster-rcnn
# ./experiments/scripts/faster_rcnn_end2end.sh [GPU_ID] [NET] [DATASET]
$# # Directly run this command might have an error "AssertionError: Selective search data not  found at:". For the solution, please google it.
$ ./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascavcc

训练完成后,见py-faster-rcnn/output文件夹。

3.3 说明

faster_rcnn_end2end.sh

整个处理的最上层,包括对输入参数的处理,涉及到GPU id, 网络结构(ZF-net, VGG, 或者其他),数据集(PASCAL VOC, COCO或者其他数据集),和一些其他的配置输入参数。
然后它会调用两个程序,一个是train_net.py,紧跟着的是test_net.py,train_net.py是用来训练模型的,而test_net.py是用来评估训练出来的模型的性能的。

faster_rcnn_end2end.yml

# 我们可以从faster_rcnn_end2end.sh看到,cfg来自faster_rcnn_end2end.yml,
# 这意味着这个文件存储着很多重要的配置,下面显示了一些原始的配置:

EXP_DIR: faster_rcnn_end2end
TRAIN:
  HAS_RPN: True
  IMS_PER_BATCH: 1
  BBOX_NORMALIZE_TARGETS_PRECOMPUTED: True
  RPN_POSITIVE_OVERLAP: 0.7
  RPN_BATCHSIZE: 256
  PROPOSAL_METHOD: gt
  BG_THRESH_LO: 0.0
TEST:
  HAS_RPN: True

  但是,如果要添加自己的配置,例如在训练时进行模型快照的迭代次数,可以参考py-faster-rcnn / lib / fast_rcnn / config.py。此文件包含所有配置参数。不需要在此config.py中设置配置,但只需在faster_rcnn_end2end.yml中添加语句。程序可以自动解析参数。当然,如果没有声明.yml文件中的项目,则会采用存在的默认值。

train_net.py

这个py文件主要是读取数据并训练数据,它连接着py-faster-rcnn/lib/database/里面的内容。

你可能感兴趣的:(deep-learning)