Caffe使用step by step:r-cnn目標檢測代碼


  深度學習算法火起來之后,基於深度學習各種模型都如雨后春筍一般在各個領域廣泛應用。

  由於想把深度學習算法應用在在視頻目標檢測方向,得到一個較好的結果。由於視頻數據的復雜性,因此使用深度學習算法在視頻中的目標檢測難度比較大,但是仍然可以借鑒現階段state-of-art的目標檢測算法r-cnn。通過自己運行r-cnn目標檢測代碼,可以明確目標檢測的流程,同時構建目標檢測的baseline。下面詳細講解構建r-cnn框架的過程和方法以及過程中遇到的問題解決方案。

  在跑r-cnn代碼之前需要明確一些問題:

  1. r-cnn代碼是基於caffe構建的,因此在跑r-cnn代碼之前,首先需要搭建好caffe平台;
  2. caffe的版本必須時0.999,在r-cnn官網已經明確,r-cnn不支持最新的caffe,0.999版本見r-cnn的github主頁。

 

下面,我們一步步搭建r-cnn代碼。跑r-cnn代碼流程在r-cnn的gtihub主頁已經非常清楚。按照官網說明一步步操作。

這里主要講解一些r-cnn代碼構建時的一些問題:

編譯caffe-0.999時遇到的錯誤:

make: *** [build/src/caffe/util/math_functions.cuo] Error 2
解決方法:地址

修改文件 caffe/include/caffe/util/math_functions.hpp中

修改前:

using std::signbit;
DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = signbit(x[i])); 

修改后:

// using std::signbit;
DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = std::signbit(x[i]));

 

caffe-0.999版本下make matcaffe出問題的解決方案:

在修改makefile.config中CUDA_ARCH,修改后為:

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
        -gencode arch=compute_20,code=sm_21 \
        -gencode arch=compute_30,code=sm_30 \
        -gencode arch=compute_35,code=sm_35 \
        -gencode arch=compute_50,code=sm_50 \
        -gencode arch=compute_50,code=compute_50
matcaffe編譯不能通過,解決方法
通過修改makefile中第266行和272行中的問題:
266行修改前:
$(MAT$(PROJECT)_SO): $(MAT$(PROJECT)_SRC) $(STATIC_NAME)

  修改后:

$(MAT$(PROJECT)_SO): $(MAT$(PROJECT)_SRC) $(NAME)

 在將rcnn代碼應用到自己的數據集時,需要注意的是:

1.將已經設計好的網絡定義文件prototxt和提取好的window_files拷貝到external/caffe/example/finetune_voc_exp/文件夾下;

2.使用caffe的cmd命令來對網絡進行finetuning;

  1).使用cd 命令進入external/caffe/example/finetune_vid_exp/文件夾下;

  2).使用caffe/build/caffe工具來對網絡進行finetuning,由於caffe的接口變化,rcnn官網上的命令已不能使用,具體命令為:  

  GLOG_logtostderr=1 ../../build/tools/caffe train  -solver pascal_finetune_solver.prototxt  -weights /home/startag/Desktop/code/rcnn-master/data/caffe_nets/ilsvrc_2012_train_iter_310k 2>&1 | tee log.txt

 

在獲取到bbox之后,生成window_file之后,使用該window_file進行DL網絡訓練時出現錯誤信息:

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /home/uujjwal/libraries/opencv-3.0.0/modules/core/src/matrix.cpp, line 495
terminate called after throwing an instance of 'cv::Exception'
what():  /home/uujjwal/libraries/opencv-3.0.0/modules/core/src/matrix.cpp:495: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat
*** Aborted at 1447952145 (unix time) try "date -d @1447952145" if you are using GNU date ***

解決方案:地址



免責聲明!

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



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