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

来源:互联网 发布:天津日报大厦知乎 编辑:程序博客网 时间:2024/06/05 21:15

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
  • 3
  • 1
  • 2
  • 3

1.2 编译Cython模块

$ cd py-faster-rcnn/lib$ make
  • 1
  • 2
  • 1
  • 2

1.3 编译caffe和pycaffe

$ cd py-faster-rcnn/caffe-fast-rcnn$ cp Makefile.config.example Makefile.config# 修改 Makefile.config, 去掉注释WITH_PYTHON_LAYER := 1USE_CUDNN := 1BLAS_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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

问题:

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 herecudnnStatus_t CUDNNWINAPI cudnnSetPooling2dDescriptor(
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

解决办法:

用最新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.cuinclude/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cuinclude/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp, src/caffe/layers/cudnn_tanh_layer.cuinclude/caffe/util/cudnn.hpp将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardDatacudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter修改完后,git status下,确保修改了指定的文件:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这里写图片描述

然后重新编译:

$ make all -j$ make pycaffe -j
  • 1
  • 2
  • 1
  • 2

到此就可以使用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目录下
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

2.2 运行demo

$ cd py-faster-rcnn$ ./tools/demo.py
  • 1
  • 2
  • 1
  • 2

这里写图片描述

这里写图片描述

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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 refer to Part 4.$ ./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascavcc
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

训练完成后,见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是用来评估训练出来的模型的性能的。
  • 1
  • 2
  • 1
  • 2

faster_rcnn_end2end.yml

# 我们可以从faster_rcnn_end2end.sh看到,cfg来自faster_rcnn_end2end.yml,# 这意味着这个文件存储着很多重要的配置,下面显示了一些原始的配置:EXP_DIR: faster_rcnn_end2endTRAIN:  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.0TEST:  HAS_RPN: True
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

train_net.py

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

阅读全文
0 0
原创粉丝点击