本系列针对RBG在github上的fast r-cnn代码,做安装配置及解读工作
本文解决由于CAFFE版本的更新导致的fast r-cnn编译失败的问题
相关文件下载
假定机器已经安装配置好caffe环境(最新的版本使用CUDA8 + cudnn5,这个需要确定,之后的编译错误就是因为这个原因)
1)git clone –recursive https://github.com/rbgirshick/fast-rcnn.git 下载工程文件,使用参数recursive是为了同时clone caffe-fast-rcnn目录下的文件(作者基于caffe修改的版本)
2)下载模型文件fast_rcnn_models.tgz
官方是通过脚本data/scripts/fetch_fast_rcnn_models.sh自动下载,但国内地址访问不了
这里给了个百度网盘的链接
下载的文件解压缩到data/fast_rcnn_models下
编译
1)首先编译Cython模块
cd $FRCN_ROOT/lib
make
2)修改FRCN_ROOT/caffe-fast-rcnn/Makefile.config文件
解除以下内容注释:
USE_CUDNN := 1
WITH_PYTHON_LAYER := 1 #如果不解除会在train时提示“Unknown layer type: Python”
修改以下内容:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
3)按官方步骤,此时编译作者修改过的caffe就好了
cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe
但由于作者是在cudnn4的caffe上做的修改,对于预装cudnn5的机器,编译会出错
文章faster rcnn +cudnn V5给出了两种解决方案
本文参考第2种方法:
用最新的caffe源码替换fast rcnn的文件:
include/caffe/layers/cudnn_relu_layer.hpp
src/caffe/layers/cudnn_relu_layer.cpp
src/caffe/layers/cudnn_relu_layer.cu
include/caffe/layers/cudnn_sigmoid_layer.hpp
src/caffe/layers/cudnn_sigmoid_layer.cpp
src/caffe/layers/cudnn_sigmoid_layer.cu
include/caffe/layers/cudnn_tanh_layer.hpp
src/caffe/layers/cudnn_tanh_layer.cpp
src/caffe/layers/cudnn_tanh_layer.cu
include/caffe/layers/cudnn_conv_layer.hpp
src/caffe/layers/cudnn_conv_layer.cpp
src/caffe/layers/cudnn_conv_layer.cu
include/caffe/util/cudnn.hpp
需要说明的是,fast r-cnn 官方caffe代码里没有 FRCN_ROOT/caffe-fast-rcnn/include/caffe/layers 目录
索性从最新caffe代码里全部copy过来
然后 make -j8 && make pycaffe,成功编译
运行demo
官方给了3个caffemodel:caffenet、vgg16和vgg_cnn_m_1024
# 默认使用vgg16, gpu
python FRCN_ROOT/tools/demo.py
在这里运行demo不出现检测结果,调试代码发现网络对background的概率接近1,其他目标接近0
相同的问题在github上有人提出
经过测试发现,如果改为CPU模式,能成功检测出结果。截至目前还不知道原因
图1. CPU模式检测结果