吐槽!!!
这都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,所以并没有按照其他博客中建议的来做,最后发现还是好使的;
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以及一些预训练好的模型文件;
其中的都是一些依赖方法,大家可以去看一下;
补充说明:
有关external/存放的是已经编译好的提供matlab接口的caffe,后续我们将使用VS进行编译,并将编译好的caffe放进其中;
有关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行: false 修改成:true
第8行: true 修改成: false
第16行: false 修改成: true
上述三处修改分别表示,仅仅使用CPU、不使用CudNN、使用MATLAB;
继续修改:
第53行: C:\Program Files\MATLAB\R2014b 修改成:F:\software\Matlab 2018a
第55行: $(MatlabDir)\extern\include;$(IncludePath) 修改成:$(MatlabDir)\extern\include;$(MatlabDir)\toolbox\distcomp\gpu\extern\include;$(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,如下图;
需要执行fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m,该脚本文件使用来下载作者提供的编译好的caffe的,因为上面我们已经编译好了适合我们自己机器的caffe,这里不需要执行;
执行faster_rcnn_build.m文件,如果出现错误,重启matlab;遇到下图错误,则表示正常,因为我们配置是CPU版本;
执行start_up.m,应该不会出现什么错误;
该脚本的目的是创建所需文件夹、添加搜索路径;此时,已经将我们编译好的caffe加载到搜索路径了;
% 输入
caffe.reset_all();
% 输出
Cleared 0 solvers and 0 stand-alone nets
表示matlab接口的caffe测试成功;
Testing
根据Faster R-CNN源码中的使用方法进行Testing,如下图;
别着急,执行fetch_data/fetch_faster_rcnn_final_model.m;该文件是作者提供的训练好的模型文件,以及一些预训练模型用于Training;其中下载链接好像需要FQ,如果有需要的话,可以从这里下载:下载地址,提取码:62n6;
下载完成后,解压到./faster_rcnn/中,覆盖原来的./faster_rcnn/output/文件夹,以及多出了五张图片;
打开`./faster_rcnn/experiments/script_faster_rcnn_demo.m,进行如下修改:
至于第三处修改,是因为VGG-16网络太大了,试着跑了一下,跑不动,换成了ZF-Net;
修改完成后,执行script_faster_rcnn_demo.m;得到结果如下图;
应该完事了吧。。。至于Training,就我这机器的渣渣配置,还是算了吧(希望能换台本子啊,,,);
后面想要尝试改一下,安装GPU版本的;
Reference
原文:https://www.cnblogs.com/chenzhen0530/p/10933414.html