Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型
0 說(shuō)明
系統(tǒng)環(huán)境為Ubuntu14.04, 已經(jīng)安裝好了CUDA和cuDNN以及Python等基礎(chǔ)包。
1 設(shè)置和編譯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 然后切換到對(duì)應(yīng)的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 := 1 USE_CUDNN := 1 BLAS_INCLUDE := /usr/include/atlas # 根據(jù)你的需求修改Makefile.config , 比如設(shè)置GPU 支持, cuDNN, CUDA 版本, Anaconda, OpenCV, 等等。 # 修改完Makefile.config后 $ make all -j32 # -j32 編譯加速. 32 CPU核數(shù)目,根據(jù)你的電腦的CP核數(shù)目來(lái)修改,或者直接make all -j也可以 # 假設(shè)你已經(jīng)安裝好了PyCaffe相關(guān)依賴(lài), 否則請(qǐng)重新去參考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各文件夾說(shuō)明
. ├── 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 # 存放訓(xùn)練數(shù)據(jù)文件夾 │ ├── cache │ ├── demo │ ├── faster_rcnn_models │ ├── imagenet_models │ ├── pylintrc │ ├── README.md │ ├── scripts │ ├── VOCdevkit # VOC2007數(shù)據(jù)集 │ ├── VOCdevkit2007 -> VOCdevkit ├── experiments │ ├── cfgs │ ├── logs │ ├── README.md │ └── scripts # 包含端對(duì)端訓(xùn)練腳本 ├── lib │ ├── datasets # 包含數(shù)據(jù)庫(kù)讀取工廠類(lèi) │ ├── 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 # 訓(xùn)練輸出模型 ├── README.md └── tools # 包含訓(xùn)練py腳本和運(yùn)行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
問(wèn)題:
faster rcnn 代碼默認(rèn)是使用的cudnn v4, 但是為了體驗(yàn)最新的v5, 或者使用GTX1080 ,我們編譯faster rcnn的時(shí)候就會(huì)報(bào)錯(cuò) 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(- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
解決辦法:
用最新caffe源碼的以下文件替換掉faster rcnn 中caffe-fast-rcnn里面的對(duì)應(yīng)文件 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 函數(shù)名替換為 cudnnConvolutionBackwardData cudnnConvolutionBackwardFilter_v3函數(shù)名替換為 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 測(cè)試py-faster-rcnn demo
2.1 下載預(yù)先訓(xùn)練好的Faster-rcnn模型
$ cd py-faster-rcnn $ ./data/scripts/fetch_faster_rcnn_models.sh # 如果下載失敗,可以通過(guò)這個(gè)種子來(lái)下載: # http://academictorrents.com/download/cca56021739c8a75af3b58f536d4930266c25d5e.torrent # 然后將faster_rcnn_models.tgz解壓到data目錄下- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
2.2 運(yùn)行demo
$ cd py-faster-rcnn $ ./tools/demo.py- 1
- 2
- 1
- 2
3 基于PASCAL VOC數(shù)據(jù)集訓(xùn)練模型
3.1 準(zhǔn)備數(shù)據(jù)集和預(yù)訓(xùn)練模型
$ cd py-faster-rcnn/data # 注意鏈接可能會(huì)失效,網(wǎng)上可以另找資源 $ 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 訓(xùn)練
$ 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
訓(xùn)練完成后,見(jiàn)py-faster-rcnn/output文件夾。
3.3 說(shuō)明
faster_rcnn_end2end.sh
整個(gè)處理的最上層,包括對(duì)輸入?yún)?shù)的處理,涉及到GPU id, 網(wǎng)絡(luò)結(jié)構(gòu)(ZF-net, VGG, 或者其他),數(shù)據(jù)集(PASCAL VOC, COCO或者其他數(shù)據(jù)集),和一些其他的配置輸入?yún)?shù)。 然后它會(huì)調(diào)用兩個(gè)程序,一個(gè)是train_net.py,緊跟著的是test_net.py,train_net.py是用來(lái)訓(xùn)練模型的,而test_net.py是用來(lái)評(píng)估訓(xùn)練出來(lái)的模型的性能的。- 1
- 2
- 1
- 2
faster_rcnn_end2end.yml
# 我們可以從faster_rcnn_end2end.sh看到,cfg來(lái)自faster_rcnn_end2end.yml, # 這意味著這個(gè)文件存儲(chǔ)著很多重要的配置,下面顯示了一些原始的配置:EXP_DIR: faster_rcnn_end2end TRAIN:HAS_RPN: TrueIMS_PER_BATCH: 1BBOX_NORMALIZE_TARGETS_PRECOMPUTED: TrueRPN_POSITIVE_OVERLAP: 0.7RPN_BATCHSIZE: 256PROPOSAL_METHOD: gtBG_THRESH_LO: 0.0 TEST: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
??但是,如果要添加自己的配置,例如在訓(xùn)練時(shí)進(jìn)行模型快照的迭代次數(shù),可以參考py-faster-rcnn / lib / fast_rcnn / config.py。此文件包含所有配置參數(shù)。不需要在此config.py中設(shè)置配置,但只需在faster_rcnn_end2end.yml中添加語(yǔ)句。程序可以自動(dòng)解析參數(shù)。當(dāng)然,如果沒(méi)有聲明.yml文件中的項(xiàng)目,則會(huì)采用存在的默認(rèn)值。
train_net.py
這個(gè)py文件主要是讀取數(shù)據(jù)并訓(xùn)練數(shù)據(jù),它連接著py-faster-rcnn/lib/database/里面的內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: py-faster-rcnn用自己的数据
- 下一篇: Deep Learning---caff