深度學習算法火起來之后,基於深度學習各種模型都如雨后春筍一般在各個領域廣泛應用。
由於想把深度學習算法應用在在視頻目標檢測方向,得到一個較好的結果。由於視頻數據的復雜性,因此使用深度學習算法在視頻中的目標檢測難度比較大,但是仍然可以借鑒現階段state-of-art的目標檢測算法r-cnn。通過自己運行r-cnn目標檢測代碼,可以明確目標檢測的流程,同時構建目標檢測的baseline。下面詳細講解構建r-cnn框架的過程和方法以及過程中遇到的問題解決方案。
在跑r-cnn代碼之前需要明確一些問題:
- r-cnn代碼是基於caffe構建的,因此在跑r-cnn代碼之前,首先需要搭建好caffe平台;
- 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 ***
解決方案:地址