Widows下Faster R-CNN的MATALB配置(CPU)



吐槽!!!

这都9012了,感觉自己太菜了;

终于将代码初步跑通了,报了很多错,费了很大劲,回过头来,再重新整理一遍;

这里需要说明的一点是这是CPU版本的;

另外,如果你的机器配置和Faster R-CNN源码中指定的配置完全一致,继续这篇文章可能就不太适合了;

如果你想在Windows下编译适合自己机器配置的提供matlab接口的caffe,并完成faster r_nn的matlab源码的测试,请继续阅读下去;



环境配置:

Windows 10
VS 2013
MATLAB 2018a

补充说明:

建议安装VS2013,我一开始安装的是VS2015,后来出了许多问题,浪费了不少时间,又装回了VS2013,至于哪里出问题,以及为什么要使用VS2013,后续会说明;

还有一点,有些博客中提到建议先安装VS,再安装MATLAB,防止MATLAB找不到C编译器;因为之前我就安装了MATALB,所以并没有按照其他博客中建议的来做,最后发现还是好使的;

扫描二维码关注公众号,回复: 6287585 查看本文章

1. Faster R-CNN的MATLAB源码

下载faster_rcnn的matlab源码:下载地址

得到./faster_rcnn文件夹;

补充说明:

如果你使用的是git进行clone的话,是./faster_rcnn/文件夹;如果直接Download Zip的话,解压出来的应该是./faster_rcnn-master/文件夹;当然,这一说明只做提醒,防止后续出乱子;

打开matlab,定位到./faster_rnn/,目录结构如下图所示;

部分文件夹介绍:
experiment/:主要是用于testing/training的脚本;
external/:主要存放成功编译的提供matlab接口的caffe;(后面将花费很多时间在这个上面)
fetch_data/:下载作者提供的caffe以及一些预训练好的模型文件;

其中的都是一些依赖方法,大家可以去看一下;

补充说明:

  1. 有关external/存放的是已经编译好的提供matlab接口的caffe,后续我们将使用VS进行编译,并将编译好的caffe放进其中;
  2. 有关fetch_data/中有一个脚本文件fetch_caffe_mex_windows_vs2013_cuda65.m用于下载作者提供的编译好的caffe,因为我们需要重新编译,所以并不会使用它;

2. Windows下的Caffe配置(matlab接口)

下面就开始编译提供matlab接口的caffe了,也就是上述./faster_rcnn/exteral/文件夹中所需的文件;

这里我们使用的Microsoft提供的caffe:下载地址;得到./caffe/文件夹;(也可能是./caffe-master/)

打开./caffe/windows/,找到CommonSettings.props.example文件,复制后,将名称改为CommonSettings.props,如下图:

使用notepad打开CommonSettings.props,修改下面内容:

第7行: <CpuOnlyBuild>false</CpuOnlyBuild> 修改成:<CpuOnlyBuild>true</CpuOnlyBuild>
第8行: <UseCuDNN>true</UseCuDNN> 修改成: <UseCuDNN>false</UseCuDNN>
第16行: <MatlabSupport>false</MatlabSupport> 修改成: <MatlabSupport>true</MatlabSupport>

上述三处修改分别表示,仅仅使用CPU、不使用CudNN、使用MATLAB;

继续修改:

第53行: <MatlabDir>C:\Program Files\MATLAB\R2014b</MatlabDir> 修改成:<MatlabDir>F:\software\Matlab 2018a</MatlabDir>
第55行: <IncludePath>$(MatlabDir)\extern\include;$(IncludePath)</IncludePath> 修改成:<IncludePath>$(MatlabDir)\extern\include;$(MatlabDir)\toolbox\distcomp\gpu\extern\include;$(IncludePath)</IncludePath>

上述第一处修改指定MATLAB安装位置;

修改完成,使用VS2013打开./caffe/windows/Caffe.sln,双击即可;

打开之后,将Debug模式调成Release模式;(在调试的过程中,可能会重新加载项目,注意需要调整成Release)

添加roi_pooling_layer.cpp

打开解决方案资源管理器,找到libcaffe/cu/layers/右键—》添加—》现有项,在./caffe/src/caffe/layers/中找到roi_pooling_layers.cpp文件,进行添加,如下图;

添加成功后,可以看到libcaffe/cu/layers/下有roi_pooling_layers.cpp文件;

重新生成libcaffe

选择libcaffe,右键—》重新生成;

会自动还原NuGet包;

之后会出现一个错误:error C2220:....双击,弹出错误提示信息,确定后,会打开一个alt_sstream_impl.hpp文件;

Ctrl+S进行保存;然后重新生成;

补充说明:

在选择重新生成后,会自动还原BuGet包,如果幸运,还原成功后,会出现上述错误;如果失败,那就是其他问题;

需要还原哪些NuGet包,都在ibcaffe/packages.config中定义,如下图所示;其中有些包的名称为vc120表示适用于VS2013;而VS2015的话,对应名称则为vc140;

之前说过我将VS2015卸载,重新装的VS2013;你可能会想将对应的vc120改成vc140不就ok了吗?当然了,卸载VS2015前,还没有看到这个packages.config文件,那会啥也不懂啊;后来也考虑这样做行不行,但是应该不行,因为在NuGet网站,有些包根本就没有vc140版本的,只有vc120版本;

总不能一部分使用VS2013的包,一部分使用VS2015的吧。不过没试过,结果谁知道呢。

重新生成matcaffe

如果上面幸运的话,没出什么错,那这里也不会遇到什么麻烦了;

类似重新生成libcaffe,以同样的方式,选择matcaffe,右键—》重新生成;



到目前为止,我们已经有了三个文件夹,如下图所示:

  • ./caffe/:表示microsoft提供的caffe;
  • ./faster_rcnn/:表示faster r-cnn的matlab源码;
  • ./NugetPackages/:就是在编译libcaffe时还原出来的NuGet包;
  • 另外,./caffe/Build/x64/Release/下就是得到caffe;

经过上面一系列的操作,我们已经成功编译了支持matlab接口的caffe;

为保证后续测试的正常执行,这里仍需要一步配置:

  • ./faster_rcnn/external/caffe/下新建文件夹/matlab/
  • ./caffe/Build/x64/下将Release文件夹复制到上述新建的/matlab/文件夹中;
  • ./faster_rcnn/external/caffe/matlab/Release/添加到系统的path中,见下图;

在matlab命令行执行:

mex -setup

选择 Microsoft Visual C++ 2013 (C) 进行C语言编译,如下图:



3. Preparation for Testing

Preparation

下面就开始配置Faster R-CNN的Matlab源码进行测试了;

根据Faster R-CNN源码中的使用方法进行Preparation for Testing,如下图;

  1. 需要执行fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m,该脚本文件使用来下载作者提供的编译好的caffe的,因为上面我们已经编译好了适合我们自己机器的caffe,这里不需要执行
  2. 执行faster_rcnn_build.m文件,如果出现错误,重启matlab;遇到下图错误,则表示正常,因为我们配置是CPU版本;

  1. 执行start_up.m,应该不会出现什么错误;

    该脚本的目的是创建所需文件夹、添加搜索路径;此时,已经将我们编译好的caffe加载到搜索路径了;

% 输入
caffe.reset_all();
% 输出
Cleared 0 solvers and 0 stand-alone nets

表示matlab接口的caffe测试成功;

Testing

根据Faster R-CNN源码中的使用方法进行Testing,如下图;

  1. 别着急,执行fetch_data/fetch_faster_rcnn_final_model.m;该文件是作者提供的训练好的模型文件,以及一些预训练模型用于Training;其中下载链接好像需要FQ,如果有需要的话,可以从这里下载:下载地址,提取码:62n6;

    下载完成后,解压到./faster_rcnn/中,覆盖原来的./faster_rcnn/output/文件夹,以及多出了五张图片;

  2. 打开`./faster_rcnn/experiments/script_faster_rcnn_demo.m,进行如下修改:

    至于第三处修改,是因为VGG-16网络太大了,试着跑了一下,跑不动,换成了ZF-Net;

  1. 修改完成后,执行script_faster_rcnn_demo.m;得到结果如下图;



应该完事了吧。。。至于Training,就我这机器的渣渣配置,还是算了吧(希望能换台本子啊,,,);

后面想要尝试改一下,安装GPU版本的;

Reference

猜你喜欢

转载自www.cnblogs.com/chenzhen0530/p/10933414.html