深度学习算法火起来之后,基于深度学习各种模型都如雨后春笋一般在各个领域广泛应用。
由于想把深度学习算法应用在在视频目标检测方向,得到一个较好的结果。由于视频数据的复杂性,因此使用深度学习算法在视频中的目标检测难度比较大,但是仍然可以借鉴现阶段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 ***
解决方案:地址