Fast RCNN的安装配置是在配置好Caffe环境的基础上进行的,如果还没配置caffe环境,请看之前的博客进行Caffe配置。
系统:Ubuntu16.04
GPU: NVIDIA GTX1070
CUDA8.0+cuDNN5.1
git clone --recursive https://github.com/rbgirshick/fast-rcnn.git
建议用git安装,并且要带上 –recursive。不要尝试着自己下载安装,不然可能会下载不完全,还需要另外手动下载caffe-fast-rcnn子文件夹。
可能需要Python安装包:cython,python-opencv,easydict
先装一个python包管理器pip:
sudo apt-get install python-pip
再安装那三个包
sudo pip install cython
sudo apt-get install python-opencv
sudo pip install easydict
cd fast-rcnn/lib
sudo make
cd fast-rcnn/caffe-fast-rcnn
以下所有操作都在这个目录下进行!!!
注意:这里如果你还没有安装caffe,按照教程安装。如果你已经安装好来caffe,那么复制系统caffe下的Makefile.config到caffe-fast-rcnn下。然后编译 fast rcnn 的 caffe:
sudo make -j8 && make pycaffe
(-j8的含义是run 8 jobs in parallel,看自己机器的性能,自己设置,可以更快编译。)
(-j8的含义是run 8 jobs in parallel,看自己机器的性能,自己设置,可以更快编译。)
编译可能遇到的问题:
这是因为cuDNN版本不匹配,比如安装v6/v5版本,编译v4版本的程序导致的。因为fast-rcnn默认的caffe支持的cudnn版本是v4,而这里使用cuda8.0+cudnn5.1版本,因此编译caffe会出现版本不兼容而导致的函数参数不对应的错误。这种情况参考博文:http://blog.csdn.net/u010733679/article/details/52221404。
我用的是手动修改的方式,fast rcnn比faster rcnn更老一些,因此做法与参考博客有一些不同,在这里详细说明一下:
1.将系统caffe里的include文件夹里的layers文件夹拷贝到fast rcnn的caffe-fast-rcnn/include/caffe/ 下。
2.用系统caffe源码的src/caffe/layers/下的以cudnn为前缀的文件全部替换掉fast rcnn 的对应文件,包括 cudnn_relu_layer.cpp, cudnn_relu_layer.cu, cudnn_sigmoid_layer.cpp, cudnn_sigmoid_layer.cu, cudnn_tanh_layer.cpp, cudnn_tanh_layer.cu 等等。。
3.用系统caffe源码的src/caffe/util/cudnn.cpp这个文件替换掉fast rcnn 的对应文件 。
修改后再重新编译,就可以成功编译了。
在这里简单介绍一下工程目录,可以看到根目录下有以下几个文件夹
caffe-fast-rcnn
#这里是caffe框架目录
data
#用来存放pretrained模型 比如imagenet上的,以及读取文件的cache缓存
experiments
#存放配置文件以及运行的log文件,另外这个目录下有scripts,用来获取imagenet的模型,以及作者训练好的
#fast rcnn模型,以及相应的pascal-voc数据集
lib
#用来存放一些python接口文件,如其下的datasets主要负责数据库读取 config负责cnn一些训练的配置选项
matlab
#放置matlab与python的接口,用matlab来调用实现detection
models
#里面存放了三个模型文件,小型网络的CaffeNet 大型网络VGG16 中型网络VGG_CNN_M_1024
output
#这里存放的是训练完成后的输出目录,默认会在default文件夹下
tools
#里面存放的是训练和测试的Python文件
重新进入fast-rcnn文件夹下,
cd fast-rcnn
./data/scripts/fetch_fast_rcnn_models.sh
下载后 fast_rcnn_models.tgz 文件自动保存到data目录下。
我不推荐这么弄,因为直接用wget去下载的速度比较慢,我们可以打开里面的shell文件,把url粘贴出来,到迅雷里面下载,几分钟就好了。如果模型下载速度太慢,这里有资源可以下载:
链接: https://pan.baidu.com/s/1o7W0S6u 密码: 2bty
到目录下可以看到3个shell文件,分别是fetch_fast_rcnn_models.sh:是作者训练好的fast_rcnn模型, fetch_imagenet_models.sh:是imagenet_model上预训练好的模型, fetch_selective_search_data.sh:是作者基于Pascal VOC数据集提取的selective_search预选框。如果想要看一下fast rcnn的效果,可以直接加载Ross训练好的fast_rcnn模型,如果要自己训练的话,记得加载imagenet模型。
在tools下面有个demo.py文件
cd $FRCN_ROOT
./tools/demo.py
就可以直接运行,记得看一下里面的参数,这里对显卡有一定的要求,Ross说必须是3G的显存以上才可以跑的动哦,里面有3个大小的网络caffenet是最小的,有显卡应该就能跑起来,vgg_cnn_m_1024是一个中型网络,vgg16是大型网络,后两个得看显卡的显存大小才能跑起,显存不够启动会报错的。
如果在cpu模式下的话速度是灰常慢的,GPU模式下大概0.2秒左右。
对了demo里面都是有显示的函数的,如果你是在linux终端下没有输出设备运行是会报错的。
进入fast-rcnn文件夹下,运行
sudo ./tools/demo.py --net caffenet
可能出现No module named skimage.io
cd ~之后再输入
sudo pip install scikit-image
1
再install时,可能又会出现
not find scipy
此时输入:
sudo pip install scipy
1
显然它还有错误:
这样修改后又出现了错误二。
错误二:
二、
FastRCNN在RCNN的基础上增加了Multi task training,整个的训练过程和测试过程比RCNN快了许多,mAP性能上略有上升。Fast RCNN中,提取OP的过程和训练过程仍然是分离的。因此我们在训练过程中,需要用OP的方法先把图像OP提取好,再送入Fast RCNN中训练,在检测过程中也是如此需要先把相应的测试图像的OP提取出来送入检测。
四、下载faster-rcnn,编译caffe*
1、GitHub上下载faster-rcnn:https://github.com/rbgirshick/py-faster-rcnn,并下载对应的caffe
这里写图片描述