1. 程式人生 > >py-faster-rcnn + ZF 實現自己的資料訓練與檢測(一)

py-faster-rcnn + ZF 實現自己的資料訓練與檢測(一)

0.前言

最近兩個星期,一直在看faster rcnn物體檢測,在一段折騰之後,總算能夠訓練自己的資料並進行物體檢測了。這篇部落格就當作是對最近整個實驗過程的記錄吧。首先先從最開始如何配置py-faster-rcnn並訓練PASCALVOC2007開始講起,然後再對程式碼和資料集進行修改實現自己資料的訓練與檢測。我的實驗平臺是Ubuntu14.04 LTS

1.配置py-faster-rcnn

(1)這裡,首先不用說的,大家肯定都已經在自己的機器上配好了caffe的環境,那各種依賴項的安裝就不必多說。在配置之前,需要安裝一下幾個python包:cython,python-opencv和easydict

<pre name="code" class="python">pip install cython
pip install easydict
apt-get install python-opencv

(2)從github上clone專案檔案,注意:一定要在clone時加入--recursive引數,不然會很麻煩,也不要直接下載

<pre name="code" class="python">git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

(3)Cython模組的編譯

cd py-faster-rcnn/lib
make

(4)Caffe和Pycaffe的編譯,在編譯之前,主要將makefile.config檔案配置好,具體如何配置在你自己安裝caffe框架時肯定已經接觸過。這裡也提供一個連結:實驗室歐大神的主頁Caffe + Ubuntu 15.04 + CUDA 7.5 新手安裝配置指南

cd py-faster-rcnn
make all -j8 && make pycaffe

(5)下載訓練好的模型,執行demo.py看效果

cd py-faster-rcnn
./data/scripts/fetch_faster_rcnn_models.sh
./tools/demo.py --net ZF
下載模型時,直接在指令碼檔案中複製URL使用迅雷下載更快。因為自己的電腦配置不是很高,所以就只實驗了ZF net的訓練效果。demo.py預設載入的模型是VGG16,執行時可以自己修改程式碼,也可以加命令引數。

相信到了這一步,看到執行之後的結果是不是很開心呢,不過在我實驗過程中,執行demo.py時總是出現bug:

<span style="font-size:18px;">Loaded network /home/ubuntu/py-faster-rcnn/data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel  
F1008 04:30:16.139123 5360 roi_pooling_layer.cu:91] Check failed: error == cudaSuccess (8 vs. 0) invalid device function  </span>

抓耳撓腮查了好久資料終於找到問題所在:顯示卡的計算能力不匹配,如何修改請看這裡cudaSuccess( 8 vs.0 )

2.訓練PASCAL VOC 2007的資料

(1)下載pascal voc2007的訓練集,測試集和VOCdevkit

<pre name="code" class="plain"><span style="font-size:18px;">http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar</span>

下載完成之後,將三個壓縮包解壓合併到一起。整體結構如下所示

$VOCdevkit/                           # development kit
$VOCdevkit/VOCcode/                   # VOC utility code
$VOCdevkit/VOC2007                    # image sets, annotations, etc.
# ... and several other directories ...
將VOCdevkit改名為VOCdevkit2007,然後放到data資料夾下,亦可以使用軟連線的方式,這裡不再說明。

(2)下載預訓練好的ImageNet模型

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

下載這個模型和之前的faster rcnn訓練好的模型時,不一定非要執行指令碼,直接在指令碼中找到資源的URL用迅雷下載更快。然後解壓到data資料夾即可。

(3)使用交替優化來訓練資料

cd py-faster-rcnn
./experiments/scripts/faster_rcnn_alt_opt.sh [GPU_ID] [NET] [--set ...]
# GPU_ID is the GPU you want to train on
# NET in {ZF, VGG_CNN_M_1024, VGG16} is the network arch to use
# --set ... allows you to specify fast_rcnn.config options, e.g.
#   --set EXP_DIR seed_rng1701 RNG_SEED 1701
#例如命令
./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc

預設的迭代次數是[80000, 40000, 80000, 40000]不過這對於我這種想看到實驗能否正常執行的人來說,實在要的等的太久,就在./tools/train_faster_rcnn_alt_opt.py中將迭代次數改為100吧

在程式執行到第一階段的第三部分“訓練fast r-cnn”時,很可能會報錯:out of memory !根據我的經驗所得,修改./lib/fast_rcnn/config.py 中的圖片大小,論文中作者使用的是將短邊縮放為600 pixels,對於我的渣渣電腦而言是吃不消的,所以修改如下:

# Scales to use during training (can list multiple scales)
# Each scale is the pixel size of an image's shortest side
__C.TRAIN.SCALES = (450, )# Max pixel size of the longest side of a scaled input image__C.TRAIN.MAX_SIZE = 750

如果對作者論文中其他實驗也感興趣的話,可以嘗試一下experiments資料夾中的其他訓練指令碼。最後,所有的輸出結果都在output資料夾

接下將如何在本篇部落格的基礎上訓練自己的資料集並進行檢測

未完待續。。。