之前在ubuntu下搞过,没有弄出来,想起来实在是不甘心,现在重新拾起,感觉学的还是迟了好几年啊。
RCNN 出自2014 cvpr Rich feature hierarchies for accurate object detection andsemantic segmentation
该文章主要提出了以下3个点,
(1)CNN网络结构,采用selective search从底向上生成候选区域(region proposals)
(2)采用了ILSVRC数据库训练,VOC数据库微调的策略,(supervised pre-training/domain-specific finetuning)平均提高了8个点的mAP
(3)采用了边界框回归策略(bounding box regression),使得检测定位准确度更高,平均提高3-4个点的mAP
整个系统的检测过程分为以下4步,
(1)读取输入图片
(2)使用ss方法,提取2000左右的候选区域
(3)使用CNN提取候选区域的特征
(4)线性SVM分类,NMS抑制,bounding box回归,输出分类结果和边界框
安装过程:
安装caffe-0.999
RCNN只有0.999的caffe支持。
git clone https://codeload.github.com/BVLC/caffe/zip/v0.999
make matcaffe -j8
出现如下错误,
解决,
vim include/caffe/util/math_functions.hpp
gg 224
将第一行注释掉,第二行改为std::signbit(x[i]));
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]));
出现如下错误,
vim Makefile
修改274行,-o为-output
然后,进入caffe-root/matlab/caffe下面,如果有caffe.mexa64,证明安装成功。
cd caffe-root/data/ilsvrc12/
./get_ilsvrc_aux.sh
这个脚本中的下载链接已经失效,可以cp一个caffe-master的该脚本,进行下载。
安装RCNN
git clone https://github.com/rbgirshick/rcnn.git
cd rcnn
ln -sf $CAFFE_ROOT external/caffe
./data/fetch_models.sh (1.5G)
./data/fetch_selective_search_data.sh (1.8G)
./selective_search/fetch_selective_search.sh (0.3M)
运行demo
matlab
rcnn_build()
出现错误,chmod之后还是出这个错误,换成root权限还是有这个错误
解决方法,一个很low的解决方法,但是通过编译了,
将rcnn_build.m打开,第50行,做如下修改,将下面第一行替换为下面的4行
"external/liblinear-1.94/blas/*.c"...
external/liblinear-1.94/blas/daxpy.c ...
external/liblinear-1.94/blas/ddot.c ...
external/liblinear-1.94/blas/dnrm2.c ...
external/liblinear-1.94/blas/dscal.c ...
完毕后执行下面语句,输出-2证明安装成功
key=caffe('get_init_key')
运行,examples下面的rcnn_demo
rcnn_demo
整体流程:
(1)在图像中通过选择性搜索selective search方法确定确定1000-2000个roi 候选框。
(2)将每一个ROI候选框resize到同一个大小,然后输入cnn网络进行特征提取。
(3)将cnn提取的特征,输入SVM中进行分类操作。
(4)对于确定的类别进行候选框的回归操作,从而得到更加精确的候选框。
总结:
优点:
(1)使用神经网络替代了传统机器学习中的hog,sift,dpm等算子来提取目标的特征,提取出的特征相比手工设计的算子效果更好。
缺点:
(1)提取特征中,存在计算冗余,速度太慢,平均需要47s的样子