【深度學習】研究Fast rcnn程式碼

查志強發表於2015-09-10

【原文:http://blog.sina.com.cn/s/blog_855a82cd0102vnjq.html

原文:http://arxiv.org/pdf/1504.08083.pdf

程式碼:https://github.com/rbgirshick/fast-rcnn

1.準備工作

1.1 軟體準備

    首先,需要安裝Caffepycaffe

    caffe原作者網頁:http://caffe.berkeleyvision.org/installation.html

    歐新宇師兄caffe安裝說明:http://ouxinyu.github.io/Blogs/20140723001.html

    注意:必須在 Makefile.config配置檔案中開啟Python層支援。

    # In your Makefile.config, make sure to have this line uncommented

    WITH_PYTHON_LAYER := 1

    其次,可能需要Python安裝包:cythonpython-opencveasydict

    先裝一個python包管理器pip

    sudo apt-get install python-pip

    再裝那三個包:

    sudo pip install cython

    #sudo pip install python-opencv

    sudo pip install easydict

    再次,可能需要MATLAB,主要用於對PASCAL voc資料集的評估。

1.2 硬體準備

    對於訓練較小的網路(CaffeNet, VGG_CNN_M_1024),至少需要3G記憶體的GPU(如:TitanK20K40...

    對於訓練VGG16,至少需要一個K40(約11G記憶體),這裡我們就不考慮了。

2.安裝(用於demo

2.1 githubcloneFast RCNN的倉庫。最好就直接這麼clone,不要自己去下載,不然還滿麻煩的。

    # Make sure to clone with --recursive

    git clone --recursive https://github.com/rbgirshick/fast-rcnn.git

2.2 生成Cython模組(下面的$FRCN_ROOT都是指fast-rcnn的解壓位置)

    cd $FRCN_ROOT/lib

    make

2.3 生成Caffepycaffe

    cd $FRCN_ROOT/caffe-fast-rcnn

    # Now follow the Caffe installation instructions here:

    #   http://caffe.berkeleyvision.org/installation.html

    # If you're experienced with Caffe and have all of the requirements installed

    # and your Makefile.config in place, then simply do:

    make -j8 && make pycaffe

2.4 下載Fast RCNN檢測器

    cd $FRCN_ROOT

    ./data/scripts/fetch_fast_rcnn_models.sh

3.執行demo

3.1 Python

    cd $FRCN_ROOT

    ./tools/demo.py

可能我安裝了cudnn,所以即使2G記憶體的GPU也是可以的。

【深度學習】研究Fast <wbr>rcnn程式碼

    如果用CPU模式,就是

    cd $FRCN_ROOT

    ./tools/demo.py --cpu

【深度學習】研究Fast <wbr>rcnn程式碼

顯然是慢很多的。效果圖如下所示:  

【深度學習】研究Fast <wbr>rcnn程式碼

    demo中是用VGG16網路,在PASCAL VOC2007上訓練的模型來執行檢測的,這個模型比較大,如果把caffe弄崩潰了,可以換一個小一點的網路,其實還更快一點,如

    ./tools/demo.py --net caffenet

    或者

    ./tools/demo.py --net vgg_cnn_m_1024

    或者就用CPU模式好了。

3.2 MATLAB版(暫時沒找到編譯好的caffe,現在先不管)

    matlab資料夾下開啟matlab,下面是我的matlab的安裝地址。

    cd $FRCN_ROOT/matlab

    /usr/local/MATLAB/R2014a/bin/matlab  # wait for matlab to start...

    $FRCN_ROOT/caffe-fast-rcnn/matlab下的caffe資料夾拷貝到$FRCN_ROOT/matlab中,為防止記憶體不夠,我們還是以CaffeNet為例,把fast-rcnn-demo.m中的所有VGG16改為CaffeNet。在matlab命令列下輸入命令:

    >> fast_rcnn_demo

【深度學習】研究Fast <wbr>rcnn程式碼

3.3 一些獲取object proposal的演算法程式碼

    Selective Search: original matlab codepython wrapper

    EdgeBoxes: matlab code

    GOP and LPO: python code

    MCG: matlab code

    RIGOR: matlab code

4.準備資料集

4.1 首先要下載訓練集、驗證集、測試集,例子是VOC2007。資源在牆外,將給出百度雲盤中的地址。

    wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtrainval_06-Nov-2007.tar

    wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtest_06-Nov-2007.tar

    wget http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

4.2 提取所有壓縮包到同一個下面稱為$VOCdevkit的資料夾下。

    tar xvf VOCtrainval_06-Nov-2007.tar

    tar xvf VOCtest_06-Nov-2007.tar

    tar xvf VOCdevkit_08-Jun-2007.tar

    要有這些基本的目錄:

    $VOCdevkit/                           # development kit

    $VOCdevkit/VOCcode/                   # VOC utility code

    $VOCdevkit/VOC2007                    # image sets, annotations, etc.

4.3 建立對VOC2007資料集的symlink,也就是連結FRCN_ROOTVOC2007的目錄。

    cd $FRCN_ROOT/data

    ln -s $VOCdevkit VOCdevkit2007

    這個方法非常好,因為別的工程裡面也可能用到這個資料集,這樣就不用多次拷貝了,節省了很多儲存空間,windows下面就沒有。

4.4 可以再用同樣的辦法得到VOC20102012的資料集,如果有需要的話。

4.5 下載預先用selective search計算好的object proposal

    cd $FRCN_ROOT

    ./data/scripts/fetch_selective_search_data.sh

    會下載到$FRCN_ROOT/data下,解壓後是一個名為selective_search_data的資料夾。

4.6 下載預先訓練好的ImageNet模型。

    cd $FRCN_ROOT

    ./data/scripts/fetch_imagenet_models.sh

    下載到三個模型,分別是CaffeNet (model S), VGG_CNN_M_1024 (model M), and VGG16 (model L),會下載到$FRCN_ROOT/data下,解壓後是一個名為imagenet_models的資料夾。

5.模型的訓練與測試

5.1 訓練模型

    訓練Fast R-CNN檢測器,以在VOC2007上訓練一個CaffeNet 的網路為例。

    ./tools/train_net.py --gpu 0 --solver models/CaffeNet/solver.prototxt --weights data/imagenet_models/CaffeNet.v2.caffemodel

    這裡我出現了EnvironmentError: MATLAB command 'matlab' not found. Please add 'matlab' to your PATH.這種錯誤,說明沒把matlab的路徑新增到環境變數中,下面的語句設定環境變數:

    export PATH=$PATH:"/usr/local/MATLAB/R2014a/bin"

    又提示說ImportError: No module named yaml,那就下載安裝一個:

    sudo apt-get install python-yaml

    再次執行程式碼就可以了。如果顯示記憶體不夠,可以用nvidia-smi隨時檢視記憶體使用情況。每10000次迭代會生成一個model,結果存放在output資料夾中。

    訓練VGG_CNN_M_1024網路時,會提示說記憶體不夠,就把$FRCN_ROOT/lib/fast_rcnn下的config.py中每個minibatch所用的圖片由2改為1,如果還不行,說明GPU記憶體太小,只能換GPU了。

    ./tools/train_net.py --gpu 0 --solver models/VGG_CNN_M_1024/solver.prototxt --weights data/imagenet_models/VGG_CNN_M_1024.v2.caffemodel

    訓練 VGG16網路,據作者說,即使把每個minibatch所用的圖片由2改為1,也需要將近5GGPU記憶體,3G以上記憶體的可以嘗試一下,cudnn可能在一定程度上起到了優化作用。

5.2 測試模型

    在自己的模型還沒有訓練好,或者訓練得不夠好的時候,可以試試作者提供的模型:

    ./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt  --net data/fast_rcnn_models/caffenet_fast_rcnn_iter_40000.caffemodel

    在測試的時候一直報下面這樣的錯,困擾了很久,找到原因後覺得自己蠢哭了。

【深度學習】研究Fast <wbr>rcnn程式碼

    VOCevaldet中相應檔名輸出來,發現問題出在VOCinit上,我們現在是在測試,把

【深度學習】研究Fast <wbr>rcnn程式碼

第一句註釋掉,第二句取消註釋。

    下面再測試自己的模型:

    ./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt  --net output/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel

    測試的結果也在output資料夾中。

5.3 用全連線層壓縮的SVD來壓縮FRCNN模型

    ./tools/compress_net.py --def models/CaffeNet/test.prototxt --def-svd models/CaffeNet/compressed/test.prototxt --net output/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel

    壓縮後的模型和壓縮前的模型是放在一起的,只是名字不一樣,在output下的相應資料夾下。再測試這個壓縮後的模型:

    ./tools/test_net.py --gpu 0 --def models/CaffeNet/compressed/test.prototxt --net output/default/voc_2007_trainval/vcaffenet_fast_rcnn_iter_40000_svd_fc6_1024_fc7_256.caffemodel

    好像是快了一些吧,反正這也不是重點。

 

附錄

1.$FRCN_ROOT/experiments/scripts下的這些指令碼可以再現作者論文中的實驗,有興趣的話可以試一下。

2.日誌檔案下載地址:Experiment logs

3.PASCAL VOC的一些檢測結果

voc_2007_test_results_fast_rcnn_caffenet_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg16_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg_cnn_m_1024_trained_on_2007_trainval.tgz    voc_2012_test_results_fast_rcnn_vgg16_trained_on_2007_trainvaltest_2012_trainval.tgzvoc_2012_test_results_fast_rcnn_vgg16_trained_on_2012_trainval.tgz

4.Fast R-CNN VGG16 modeltrained on VOC07 train,val,test union with VOC12 train,val

 

最後,為什麼自己用selective search生成的bounding boxes就再難再現demo裡面那麼好的效果,而作者目前也沒給出迴應。

感謝歐新宇師兄的熱心指導。

 


相關文章