您的位置:首页 > 编程语言

【深度学习】研究Fast rcnn代码

2016-01-29 11:08 453 查看
原文地址:【深度学习】研究Fast rcnn代码作者:木_卯卯
原文:http://arxiv.org/pdf/1504.08083.pdf

代码:https://github.com/rbgirshick/fast-rcnn

1.准备工作

1.1 软件准备

首先,需要安装Caffe和pycaffe。

caffe原作者网页:http://caffe.berkeleyvision.org/installation.html

欧新宇师兄的caffe安装说明:http://ouxinyu.github.io/Blogs/20140723001.html

注意:必须在Makefile.config配置文件中打开Python层支持。

# In your Makefile.config, make sure to have this lineuncommented
WITH_PYTHON_LAYER := 1
其次,可能需要Python安装包:cython,python-opencv,easydict

先装一个python包管理器pip:

sudo apt-get install python-pip
再装那三个包:

sudo pip install cython
#sudopip install python-opencv
sudo pip install easydict
再次,可能需要MATLAB,主要用于对PASCALvoc数据集的评估。

1.2 硬件准备

对于训练较小的网络(CaffeNet,VGG_CNN_M_1024),至少需要3G内存的GPU(如:Titan,K20,K40...)

对于训练VGG16,至少需要一个K40(约11G内存),这里我们就不考虑了。

2.安装(用于demo)

2.1 从github上clone到FastRCNN的仓库。最好就直接这么clone,不要自己去下载,不然还满麻烦的。

# Make sure to clone with --recursive
git clone --recursivehttps://github.com/rbgirshick/fast-rcnn.git
2.2 生成Cython模块(下面的$FRCN_ROOT都是指fast-rcnn的解压位置)

cd
$FRCN_ROOT/lib
make
2.3 生成Caffe和pycaffe

cd
$FRCN_ROOT/caffe-fast-rcnn
# Now follow the Caffe installation instructions here:
# http://caffe.berkeleyvision.org/installation.html # If you're experienced with Caffe and have all of the requirementsinstalled
# and your Makefile.config in place, then simply do:
make -j8 && make pycaffe
2.4 下载Fast RCNN检测器

cd
$FRCN_ROOT
./data/scripts/fetch_fast_rcnn_models.sh
3.运行demo

3.1 Python版

cd
$FRCN_ROOT
./tools/demo.py
可能我安装了cudnn,所以即使2G内存的GPU也是可以的。





如果用CPU模式,就是

cd
$FRCN_ROOT
./tools/demo.py --cpu




显然是慢很多的。效果图如下所示:





demo中是用VGG16网络,在PASCALVOC2007上训练的模型来执行检测的,这个模型比较大,如果把caffe弄崩溃了,可以换一个小一点的网络,其实还更快一点,如

./tools/demo.py --net caffenet
或者

./tools/demo.py --net vgg_cnn_m_1024
或者就用CPU模式好了。

3.2 MATLAB版(暂时没找到编译好的caffe,现在先不管)

在matlab文件夹下打开matlab,下面是我的matlab的安装地址。

cd
$FRCN_ROOT/matlab
/usr/local/MATLAB/R2014a/bin/matlab # wait for matlab to start...
把$FRCN_ROOT/caffe-fast-rcnn/matlab下的caffe文件夹拷贝到$FRCN_ROOT/matlab中,为防止内存不够,我们还是以CaffeNet为例,把fast-rcnn-demo.m中的所有VGG16改为CaffeNet。在matlab命令行下输入命令:

>> fast_rcnn_demo




3.3 一些获取object proposal的算法代码

Selective Search:
originalmatlab code,
python wrapper

EdgeBoxes:
matlabcode

GOP and LPO:
pythoncode

MCG:
matlabcode

RIGOR:
matlabcode

4.准备数据集

4.1 首先要下载训练集、验证集、测试集,例子是VOC2007。资源在墙外,将给出百度云盘中的地址。

wgethttp://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wgethttp://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCtest_06-Nov-2007.tar
wgethttp://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
4.2 提取所有压缩包到同一个下面称为$VOCdevkit的文件夹下。

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
要有这些基本的目录:

$VOCdevkit/ # development kit

$VOCdevkit/VOCcode/ # VOC utility code

$VOCdevkit/VOC2007 # image sets, annotations, etc.

4.3 创建对VOC2007数据集的symlink,也就是链接FRCN_ROOT和VOC2007的目录。

cd
$FRCN_ROOT/data
ln -s
$VOCdevkitVOCdevkit2007
这个方法非常好,因为别的工程里面也可能用到这个数据集,这样就不用多次拷贝了,节省了很多存储空间,windows下面就没有。

4.4 可以再用同样的办法得到VOC2010和2012的数据集,如果有需要的话。

4.5 下载预先用selective search计算好的objectproposal。

cd
$FRCN_ROOT
./data/scripts/fetch_selective_search_data.sh
会下载到$FRCN_ROOT/data下,解压后是一个名为selective_search_data的文件夹。

4.6 下载预先训练好的ImageNet模型。

cd
$FRCN_ROOT
./data/scripts/fetch_imagenet_models.sh
下载到三个模型,分别是CaffeNet (model S), VGG_CNN_M_1024(model M), and VGG16 (modelL),会下载到$FRCN_ROOT/data下,解压后是一个名为imagenet_models的文件夹。

5.模型的训练与测试

5.1 训练模型

训练FastR-CNN检测器,以在VOC2007上训练一个CaffeNet的网络为例。

./tools/train_net.py --gpu 0 --solvermodels/CaffeNet/solver.prototxt --weightsdata/imagenet_models/CaffeNet.v2.caffemodel
这里我出现了EnvironmentError: MATLAB command 'matlab' not found.Please add 'matlab' to yourPATH.这种错误,说明没把matlab的路径添加到环境变量中,下面的语句设置环境变量:

export PATH=$PATH:"/usr/local/MATLAB/R2014a/bin"
又提示说ImportError: No module namedyaml,那就下载安装一个:

sudo apt-get installpython-yaml
再次运行代码就可以了。如果显示内存不够,可以用nvidia-smi随时查看内存使用情况。每10000次迭代会生成一个model,结果存放在output文件夹中。

训练VGG_CNN_M_1024网络时,会提示说内存不够,就把$FRCN_ROOT/lib/fast_rcnn下的config.py中每个minibatch所用的图片由2改为1,如果还不行,说明GPU内存太小,只能换GPU了。

./tools/train_net.py --gpu 0 --solvermodels/VGG_CNN_M_1024/solver.prototxt --weightsdata/imagenet_models/VGG_CNN_M_1024.v2.caffemodel
训练VGG16网络,据作者说,即使把每个minibatch所用的图片由2改为1,也需要将近5G的GPU内存,3G以上内存的可以尝试一下,cudnn可能在一定程度上起到了优化作用。

5.2
测试模型

在自己的模型还没有训练好,或者训练得不够好的时候,可以试试作者提供的模型:

./tools/test_net.py --gpu 0 --defmodels/CaffeNet/test.prototxt --netdata/fast_rcnn_models/caffenet_fast_rcnn_iter_40000.caffemodel
在测试的时候一直报下面这样的错,困扰了很久,找到原因后觉得自己蠢哭了。





把VOCevaldet中相应文件名输出来,发现问题出在VOCinit上,我们现在是在测试,把





第一句注释掉,第二句取消注释。

下面再测试自己的模型:

./tools/test_net.py --gpu 0 --def models/CaffeNet/test.prototxt --netoutput/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel
测试的结果也在output文件夹中。

5.3 用全连接层压缩的SVD来压缩FRCNN模型

./tools/compress_net.py --def models/CaffeNet/test.prototxt--def-svd models/CaffeNet/compressed/test.prototxt --netoutput/default/voc_2007_trainval/caffenet_fast_rcnn_iter_40000.caffemodel
压缩后的模型和压缩前的模型是放在一起的,只是名字不一样,在output下的相应文件夹下。再测试这个压缩后的模型:

./tools/test_net.py --gpu 0 --defmodels/CaffeNet/compressed/test.prototxt --netoutput/default/voc_2007_trainval/vcaffenet_fast_rcnn_iter_40000_svd_fc6_1024_fc7_256.caffemodel
好像是快了一些吧,反正这也不是重点。

附录

1.$FRCN_ROOT/experiments/scripts下的这些脚本可以再现作者论文中的实验,有兴趣的话可以试一下。

2.日志文件下载地址:Experimentlogs

3.PASCAL VOC的一些检测结果

voc_2007_test_results_fast_rcnn_caffenet_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg16_trained_on_2007_trainval.tgzvoc_2007_test_results_fast_rcnn_vgg_cnn_m_1024_trained_on_2007_trainval.tgz voc_2012_test_results_fast_rcnn_vgg16_trained_on_2007_trainvaltest_2012_trainval.tgzvoc_2012_test_results_fast_rcnn_vgg16_trained_on_2012_trainval.tgz

4.FastR-CNN VGG16 modeltrainedon VOC07 train,val,test union with VOC12 train,val

最后,为什么自己用selectivesearch生成的bounding boxes就再难再现demo里面那么好的效果,而作者目前也没给出回应。

感谢欧新宇师兄的热心指导。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: