务本寻道

Windows8.1下matlab版本Faster R-CNN配置简述

Windows8.1下matlab版本的Faster R-CNN配置简述

首先,应当说明的是:网上的关于Faster R-CNN的实现都是基于caffe的,所以我们的电脑应该首先配置并编译caffe,而caffe又需要进行并行计算加速,运行在GPU上,这就需要用cuda。                                                                                                                       

而支持cdua的GPU呢,又得是英伟达的GPU才可以,AMD的不行。所以不支持cuda的GPU就只能运行CPU版本的caffe。但是最让人纠结的是,网上的所有教程都是基于GPU的教程,因为使用cpu真的是太慢了,网上这么说,单纯使用cpu的教程也并不是完全没有。最后,我选择使用(GTX950的显卡),支持GPU加速。                                   

其次,并不是说基于caffe我们就一定需要先安装它,毕竟这是个编译的文件集,是支持运算和搭建神经网络结构的函数集,网上已经有很多人编译过了,也发布出来了,找一个适配于自己电脑的编译版本,下载下来就直接可以上手。我就是傻傻的先自己安装了caffe,还尝试了各种系统下的版本,浪费了三天,最后竟然还让我编译成功了,不仅编译了matlab版本的,还编译了python版本的。

 

推荐教程:

1.      https://github.com/ShaoqingRen/faster_rcnn

2.      http://blog.csdn.net/Swordddddd/article/details/51555128

3.      http://blog.csdn.net/sharon686/article/details/52056199

4.      http://blog.csdn.net/sinat_30071459/article/details/50546891

 

开始讲述配置Faster R-CNN

1.      下载所需文件:

a)        VS:本机用的VS2013的update5,默认安装了C++的编译环境。有的版本的VS是没有安装C++的环境的,比如:VS2015,所以网上的教程大多都以VS2013作为C++编译环境的提供者。如果我们不编译caffe直接用,还需不需要VS2013呢?小的就不晓得了。cn_visual_studio_ultimate_2013_with_update_5_x86_dvd_6816649.iso

b)        Matlab:我们用的是matlab版本的,当然必备matlab,R2014a_windows。

c)        Cuda最新的版本,我使用的是7.5版本:cuda_7.5.18_windows.exe:选择windows --x86-64 ---win8.1,就会自动下载。

d)        需要Faster R-CNN的程序包:在作者ShaoqingRen的github上下载Matlab版本的faster-cnn:链接。然后解压到本地。

e)        别人编译过的caffe,比如

http://blog.csdn.net/Swordddddd/article/details/51555128里作者的caffe,在这里下载:http://download.csdn.net/detail/swordddddd/9537627,是基于cuda7.5的。解压到faster_rcnn-master下。

f)         faster_rcnn_final_model.zip文件,里面包含了ShaoqingRen作者当时训练好的模型,这个文件就在作者https://github.com/ShaoqingRen/faster_rcnn的最下面,使劲往下拉。


把它直接解压到faster_rcnn-master下就可以。Output文件夹里就是训练好的模型所在的位置。

g)        可能还需要VOC2007的数据集,因为我们需要做测试、做自己的数据集,得了解这个数据集的文件结构。去VOC2007的官网下载,训练数据集和测试数据集以及数据集的配置函数集:

http://host.robots.ox.ac.uk/pascal/VOC/voc2007/

用的时候就将test和train解压、合并到voc2007里去

 

h)        我们应该具有这些文件夹的,并且划红线的文件夹是被操作过的。

 

2.      开始安装

a)        安装VS和matlab不用交代,然后安装cuda:

可以参考:Caffe学习笔记(一)——Windows下caffe安装与配置:http://blog.csdn.net/hong__fang/article/details/51317424

它提供了一个cuda的安装教程 ,但是我并没有在最后多配置几个cuda的环境变量,因为当时看它的环境变量我可能用不到,结果也是对后面没啥影响,至少我没遇到因为没有配置那个环境变量而产生的问题。

b)        解压faster_rcnn-master.zip,作为根目录。

c)        把faster r-cnn matlab cuda7.5 external的caffe库文件解压到faster_rcnn-master

3.      利用别人训练好的模型看看自己的环境可不可用,这一步可以熟悉模型的使用

按照这个教程:Faster R-CNN Win10配置/Matlab版本编译,第六步里的models就是faster_rcnn_final_model.zip文件,大概是这个文件结构,我只用了ZF的模型,因为那个VGG的文件损坏了:

4.      运行VOC2007的数据集,这一步可以不做,只是为了熟悉模型训练的过程,但VOC2007的训练过程相当漫长,我忘了哪个地方说大概需要9.5个小时,我当时训练了一夜,第二天早上出现了caffe的GPU内存溢出的错误就崩溃了。

把VOC2007的数据集解压到datasets文件夹下,把VOCdevkit文件夹重命名为VOCdevkit2007,改了路径就不用改代码了,我可是小心翼翼地做,生怕多改一点代码,改得最后错误百出,所以原始代码里怎么要求我就怎么来,避免一切不必要的麻烦。它的训练集和测试集的文件是分离的,但是文件夹的结构完全一样,解压的时候直接合并是不会出现任何问题的。

解压完,把上一步的output里清空,把imdb文件夹下的cache删掉

把experiments文件夹下的script_faster_rcnn_VOC2007_ZF.m拷贝到根目录下,打开,运行试试,如果是这句出错:

就把它修改成下面那句。这句话的作用是运行那个startup.m。如果调试这句话你会发现,它把文件夹目录索引到更上层了。我试过一次直接在experiments文件夹下直接运行script_faster_rcnn_VOC2007_ZF.m出现了别的错误,就再也没有在里面试过了,在experiments里这句话是对的。接下来运行就好了。

5.      训练自己的模型

训练自己的模型是需要构建训练数据集的。而我根据教程采用的是把自己的训练数据集做成VOC2007的格式。我建议文件夹就使用VOC2007,因为这样什么配置都不用多改,还是不给自己找麻烦。具体步骤如下:

1)      标注图像

这里27行的n要改成n1,因为下面的for循环是n1,估计作者出错了?它的作用是在自己即将标注的图片上需要标注几个矩形框。

2)      生成XML:会在VOC2007\Annotations的文件夹里生成跟图片一样多的xml,每个对应我们在第一步中标的区域。

3)      生成训练集/验证集/测试集相关的4个txt文件

4)      修改VOC2007的配置文件:可以参考Faster-RCNN+ZF用自己的数据集训练模型(Matlab版本),因为我们的目录都是下面这个名字的,所以会少改很多地方。

5)      我们是单分类问题,所以类只有一个,修改models\ fast_rcnn_prototxts\ZF\里的诸多配置文件的时候:类别数=1,所以计算不要出错。

6)      修改迭代次数:solver文件有3个,例如30k40k就是迭代3万次、4万次,具体到底是针对哪里的迭代我还没学习,容日后再议。

7)      训练完成以后,你会发现matlab的输出里会有提示,让删除一部分内容,如果不删除,我试了,matlab崩溃了,弹出个对话框需不需要VS调试,点关闭就好了。

 

 

6.      可能遇到的问题

a)        GPU内存溢出:GTX950的GPU是2G内存,会在output里,比如这种:

出现这种错误

Usually, when caffe is out of memory - the first thing to do is reduce the batch size。减小那个叫做batch_size的变量。这个变量在:functions\fast_rcnn\ fast_rcnn_config.m里,24行。

改小点,再奔溃再改小,同时老夫还改了它的姊妹变量ims_per_batch,改成1,才了事。为什么?不知道。

另一个值得批评的教程就是:RCNN安装编译与MATLAB2014下问题解决,看完愣是一点不懂,估计不是同一个算法的原因。