Caffe使用step by step:faster-rcnn目標檢測matlab代碼


faster-rcnn是MSRA在物體檢測最新的研究成果,該研究成果基於RCNN,fast rcnn以及SPPnet,對之前目標檢測方法進行改進,faster-rcnn項目地址
首先,faster rcnn所使用的caffe版本並不是官方caffe,是Shaoqing Ren自己在官方版本上實現的一個caffe,具體下載地址為:caffe-faster-rcnn地址


另外,在配置caffe時,可以直接把自己已配置成功的makefile.config文件拷貝過去。
由於該版本caffe相對最新的caffe比較舊,因此如果使用opencv 3.0以上版本,需要對Makefile進行修改(實現對OpenCV 3.x的支持)
查找“Derive include and lib directories”一節,修改“LIBRARIES +=”的最后一行,增加opencv_imgcodecs
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

保存,退出。
在此基礎之上,需要對原本編譯成功的caffe的makefile.config文件進行修改,rbg給出了makefile.config修改參考地址:Makefile.config
如果出現錯誤:
Building with 'g++'.
/home/agruzdev/git/faster_rcnn/external/caffe/matlab/+caffe/private/caffe_.cpp:19:28: fatal error: gpu/mxGPUArray.h: No such file or directory
compilation terminated.
 
         
         
        

解決地址:解決方案

在Makefile.config文件中加入:

MATLAB_INCLUDE := -I$(MATLAB_DIR)/toolbox/distcomp/gpu/extern/include
MATLAB_LIBS := -lmwgpu

 

提示錯誤:

Invalid MEX-file caffe_.mexa64': libcudart.so.7.5: cannot open shared object file: No such file or directory

解決方案:

 LD_LIBRARY_PATH路徑未配置

sudo gedit ~/.bashrc

在文本最后加入:

export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:/usr/local/lib:$LD_LIBRARY_PATH

對應自己的cuda路徑位置

 注:每次需要在新機器上部署fater-rcnn代碼時候,最好的方法就是把對應的caffe-fater-rcnn版本重新放在external下面,保留原有的Makefile.config文件,
這樣可以最快的部署好faster- rcnn平台。

錯誤:
[libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: caffe.proto
[libprotobuf FATAL google/protobuf/descriptor.cc:1018] CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
Killed
解決方法:
最好方法是重啟matlab

安裝2:
在有多個項目需要使用多個data時,最好將所有需要用的數據都存放在datasets文件夾下,使用ln -s srcpath dstpath來構建軟鏈接到項目中,這樣一次構建就可以永久使用,也不用考慮后續的其它問題。
構建軟鏈接的命令為:
ln -s srcpath dstpath
 
        
在使用faster-rcnn時候,如果因為服務器的遷移帶來的問題,那么需要將bin文件夾下生成的mex文件進行刪除,使用faster_rcnn_build命令來重新生成,具體的操作細節同faster-rcnn的github主頁上readme相同。


注意:faster-rcnn中使用的caffe版本較低,不支持cudnn-v4,因此如果要在Makefile.config文件中打開CUDNN加速,那么安裝的cudnn版本應該低於v4(v2或者v3:沒試過)



---------------------------------------------------- 2016.05.09更新 --------------------------------------------------

Faster RCNN主要有兩部分組成:
  Region porposal Network(獲取region candidate)
  Detection(Fast RCNN)

由於rpn網絡是一個0(non-region) vs 1 (region)網絡,所以一般情況下不用使用自己的數據集進行finetuning,直接使用已經訓練好的rpn_ZF.caffemodel獲取對應圖像的region proposal即可。當然也可以使用自己的數據集對該網絡進行finetuning。
RPN網絡的另外一種region 提取方法:
DeepBox
deepproposal
deepmask


但是在一般應用中需要根據自己的實際情況對detection網絡,即Fast RCNN網絡進行finetuning。這里要講的是如何使用自己的數據集對Fast RCNN網絡進行finetuning。在已有訓練好的網絡caffemodel前提下,從頭訓練一個網絡是非常費時也是費人的。我就是經歷了這樣一個痛苦的過程,才走回正道。在做一個事情之前需要認證想清楚自己的目標是什么,不要盲目的做,到頭來浪費時間,耽誤研究進程。

如何使用自己的數據集finetuning FastRCNN,網上已經給出了很多參考教程:

Train a fast-rcnn CovNet on another dataset

Train Fast-RCNN on Another Dataset

Test Fast-RCNN on Another Dataset

how to use py-faster-rcnn to do 4 classes training instead of 20 classes?

Training Faster RCNN on Imagenet

How to train fast rcnn on imagenet

 

以及將ResNet應用於Fast RCNN中進行檢測:

ResNet Implementation for Faster-rcnn

上述進行Fast RCNN finetuning都是基於fast rcnn python版本進行。由於本人使用的是Ren Shaoqing提供的matlab版本,所以需要在matlab下面進行finetuning。

在$FRCNN/experiments/ZF_for_Fast_RCNN_VOC0712文件中,在給定train.mat(bbox:region candidate,images: image_path)條件下使用數據集進行finetuning。

操作步驟:

1.$FRCNN/+Dataset/文件夾下添加自己的數據集對應文件;

2.使用selective search 或者上面提到的已經訓練好的RPN網絡來獲取bbox,將其存成train.mat形式(具體形式見網上selective_search_data.mat);

3.修改solver.prototxt文件以及train_val.prototxt 和 test.protxt文件中對應的cls  和 bbox數值,以及對應的layer_name;

4. 修改fast_rcnn_train.m文件中snapshot函數中

  bbox_pred_layer_name = 'bbox_pred_vid';

為自己定義的layer:name(bbox_pred_vid)。

5. 修改fast_rcnn_im_detect.m文件中

    scores = caffe_net.blobs('cls_score_vid').get_data();

為自己定義的layer:name(cls_score_vid)。

6.修改imdb_eval函數

 

最后就可以按照ZF_for_Fast_RCNN_VOC0712仿寫自己的訓練程序。

 

 


2017.05.16更新 py-faster-rcnn

Nvidia cuda版本已經更新至8.0,因此在使用py-faster-rcnn的時候需要支持cuda8.0,而原始的faster python版本代碼並不支持cuda8.0,所以需要將其中的caffe代碼進行更新。

更新代碼方式見:py-faster-rcnn support 1080P and cudnn v5?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM