caffe在windows平台上的编译一文提到了windows版本caffe编译。微软的官方说明上该版本支持faster-rcnn。但尝试了之后发现并不支持任少卿作者所给的MATLAB版faster-rcnn。按照@toothless_sun博客添加了roi的一些文件之后,可以正常跑demo,训练时会报错:
F0221 10:05:49.852730 9236 layer.hpp:385] Check failed: ExactNumBottomBlobs() == bottom.size() (2 vs. 3) SoftmaxWithLoss Layer takes 2 bottom blob(s) as input.
网上虽然有很多人提问,但是没有给出解决方案。应该还是caffe版本的问题。只好编译任少卿作者给出的caffe版本。
1.编译环境
- vs2013+cuda8.0(不使用cudnn)+matlab2014a
- faster-rcnn(matlab)
- caffe源码
- caffe_library,caffe的windows项目及其用到的库。
2.编译caffe
- 解压caffe_library,将caffe源码复制到/caffe_library/caffe中。
- 用记事本打开/caffe_library/caffe/windows/caffe/caffe.vcxproj,修改里面的cuda版本号为自己的版本号。有两处292行、481行。
- 用vs2013打开/caffe_library/caffe.sln
- 按照博客使用Nuget管理第三方库吧为caffe工程添加opencv、boost、OpenBLAS(用于替换mkl,mkl是收费的)。
- 为caffe添加maltlab需要的文件。Properties->C/C++->Genaral->Additional Include Directories。添加/你的MATLAB路径/extern/include和/你的MATLAB路径/toolbox/distcomp/gpu/extern/include
- 删除宏USE_MKL(如果使用mkl,则跳过此步).Properties->C/C++->Preprocessor->Preprecessor Definitions。删除USE_MKL。
- 删除无用的链接库。Properties->Linker Input->Adtional Dependences。删除opencv和mkl相关的库。
- 切换项目为x64,Release_Mex编译。
3.faster rcnn配置
- 将/caffe_library/x64/Release_Mex文件全部拷贝只/faster-rcnn/exteral/caffe/matlab/caffe-rcnn目录下,将caffe源码目录下的matlab中+caffe连同目录拷贝至/faster-rcnn/exteral/caffe/matlab
- 打开MATLAB切换至faster-rcnn目录。改./function/nms/nvmex.m文件第8行中的vs为自己的安装路径 。然后运行faster_rcnn_build.m编译faster-rcnn。
Host_Compiler_Location = '-ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64"';
注:任少卿作者给的caffe仅支持GPU训练,使用CPU训练时会报错。Python版的faster r-cnn有人对其进行了扩展,支持CPU训练。