Deep Learning---py-faster-rcnn基于PASCAL VOC数据集训练模型
生活随笔
收集整理的這篇文章主要介紹了
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
- 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 # 根據你的需求修改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 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里面的對應文件 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 函數名替換為 cudnnConvolutionBackwardData cudnnConvolutionBackwardFilter_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_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
??但是,如果要添加自己的配置,例如在訓練時進行模型快照的迭代次數,可以參考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---py-faster-rcnn基于PASCAL VOC数据集训练模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: py-faster-rcnn用自己的数据
- 下一篇: Deep Learning---caff