r-cnn系列代码编译及解读(1)

来源:互联网 发布:西南交大学网络教育 编辑:程序博客网 时间:2024/06/09 17:13

本系列针对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/libmake

2)修改FRCN_ROOT/caffe-fast-rcnn/Makefile.config文件
解除以下内容注释:

USE_CUDNN := 1WITH_PYTHON_LAYER := 1 #如果不解除会在train时提示“Unknown layer type: Python

修改以下内容:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serialLIBRARY_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-rcnnmake -j8 && make pycaffe

但由于作者是在cudnn4的caffe上做的修改,对于预装cudnn5的机器,编译会出错
文章faster rcnn +cudnn V5给出了两种解决方案

本文参考第2种方法:
用最新的caffe源码替换fast rcnn的文件:

include/caffe/layers/cudnn_relu_layer.hppsrc/caffe/layers/cudnn_relu_layer.cppsrc/caffe/layers/cudnn_relu_layer.cuinclude/caffe/layers/cudnn_sigmoid_layer.hppsrc/caffe/layers/cudnn_sigmoid_layer.cppsrc/caffe/layers/cudnn_sigmoid_layer.cuinclude/caffe/layers/cudnn_tanh_layer.hppsrc/caffe/layers/cudnn_tanh_layer.cppsrc/caffe/layers/cudnn_tanh_layer.cuinclude/caffe/layers/cudnn_conv_layer.hppsrc/caffe/layers/cudnn_conv_layer.cppsrc/caffe/layers/cudnn_conv_layer.cuinclude/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, gpupython FRCN_ROOT/tools/demo.py

在这里运行demo不出现检测结果,调试代码发现网络对background的概率接近1,其他目标接近0
相同的问题在github上有人提出

经过测试发现,如果改为CPU模式,能成功检测出结果。截至目前还不知道原因

          这里写图片描述
                         图1. CPU模式检测结果


0 0
原创粉丝点击