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 ***

解决方案:地址


posted @ 2016-01-04 11:15  Fight boy  阅读(10076)  评论(3编辑  收藏  举报