zoukankan      html  css  js  c++  java
  • Widows下Faster R-CNN的MATALB配置(CPU)



    说实话,费了很大的劲,在调试的过程中,遇到了很多的问题;

    幸运的是,最终还是解决了问题;

    这是一篇关于在Windows下Faster R-CNN的MATLAB源码(该项目已不再维护)调试的笔记,目前只在CPU上Testing通过;

    GPU版本见:Widows下Faster R-CNN的MATALB配置(GPU)

    由于机器配置的原因,没有涉及到Faster R-CNN的Training问题;

    另外,机器的软硬件是一个不小的问题,由于使用的Microsoft提供的caffe(该项目已不再维护),该项目使用VS2013、CUDA7.5,由于本文不使用GPU测试及训练,因此不关注CUDA版本;至于VS,之前安装过VS2015,遇到了一些问题,因此为了能够快速的对Faster R-CNN源码的测试,这里不建议使用VS2015;(当然了,使用VS2015也可能会得到想要的结果,但是相对来说,使用VS2013更容易些)

    环境配置:

    Windows 10
    VS 2013
    MATLAB 2018a
    

    这里再补充一点,有些博主建议说先安装VS再安装MATLAB,防止MATLAB找不到VS的C/C++编译器;由于本人之前就已经安装过MATLAB,后来才安装的VS2013,幸运的是,关于找不到C编译器的这个问题,没有遇到;

    对了,这里做一个整体的概括,我们想要执行Faster R-CNN的MATLAB源码完成Testing;大致可分为三个步骤:

    • 准备工作;下载一些文件;
    • 使用VS2013对Caffe编译;(这一块将会占用很大一部分时间)
    • 测试Faster R-CNN的MATLAB源码;

    说实话,里面有很多小细节,一招不慎,就会error;

    下面也将分成三大部分进行介绍;



    1. 准备工作

    1.1 Faster R-CNN的MATLAB源码

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

    得到./faster_rcnn文件夹;

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

    部分文件夹介绍:
    experiment/:主要是用于testing/training的脚本;
    external/:主要存放成功编译的提供matlab接口的caffe;(后面将花费很多时间在这个上面)
    fetch_data/:作者提供的一些用于下载的脚本文件;
    
    其中的都是一些依赖方法,大家可以去看一下;
    

    补充说明:

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

    1.2 Microsoft-Caffe

    下载Microsoft提供的caffe:下载地址

    解压得到./caffe文件夹;

    目前,我们得到两个文件夹;

    1.3 matlab指定C/C++编译器

    打开matlab,执行:

    mex -setup
    

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

    2. VS2013编译Caffe

    2.1 CommonSettings.props

    打开./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 FilesMATLABR2014b</MatlabDir> 修改成:<MatlabDir>F:softwareMatlab 2018a</MatlabDir>
    第55行: <IncludePath>$(MatlabDir)externinclude;$(IncludePath)</IncludePath> 修改成:<IncludePath>$(MatlabDir)externinclude;$(MatlabDir)	oolboxdistcompgpuexterninclude;$(IncludePath)</IncludePath>
    

    上述第一处修改指定MATLAB安装位置;第二处修改,添加文件mxGPUArray.h,否则后续会报错;

    2.2 项目-属性配置

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

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

    之后,

    libcaffe项目右键—> 属性—>配置属性—> C/C++ —> 常规,将将警告视为错误修改为;否则编译libcaffe时会报下面的错误;

    提示出现:error C2220:...,表示alt_sstream_impl.hpp文件编码格式错误;解决方法是:双击错误信息,弹出错误提示信息,确定后打开一个alt_sstream_impl.hpp文件,然后Ctrl+S进行保存即可;

    2.3 添加roi_pooling_layer.cpp

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

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

    2.4 编译libcaffe

    选中项目libcaff,右键—> 重新生成;

    首先会自动还原NuGet包,然后生成成功;

    补充说明:

    在选择重新生成后,会自动还原NuGet包;

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

    之前安装过VS2015,在这里遇到问题了,因为有些包在NuGet网站上就没有对应于vc140的,只有vc120的;

    2. 5 编译matcaffe

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

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


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

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

    其中,./caffe/Build/文件夹就是编译caffe得到文件;

    如果在./caffe/Build/x64/Release/matcaffe+caffe/private/文件夹下,有caffe_.mexw64文件表明caffe的matlab接口编译正确;


    2.6 在matlab中使用caffe

    在对Faster R-CNN的源码测试之前呢,先说明一下如何在matlab中使用编译好的caffe;


    参考其他博客中,最常见的做法是:

    • 首先,将./caffe/Build/x64/Release添加到系统变量的path中;
    • 然后,将./ccaffe/Build/x64/Release/matcaffe添加到matlab的搜索路径中;
    • 最后,打开matlab,在命令行中使用caffe.reset_all()进行测试是否成功;

    电脑重启、maltab重启都试过了,然而我的却是总是错误:

    未定义变量 "caffe" 或类 "caffe.reset_all"。
    

    怎么解决的呢?最后对比./caffe/matlab/+caffe/./caffe/Build/x64/Release/matcaffe/+caffe/这两个文件夹才发现了端倪,如下图所示;

    发现在多了一些.m文件,而且注意到reset_all.m这个文件在其中,有没有很熟悉;

    其实命令caffe.reset_all()中的caffe指的就是这里的文件夹+caffe.reset_all()就是调用的这个reset_all.m这个脚本文件;

    而在编译之后,+caffe这个文件夹是没有reset_all()这个方法的;

    因此,在设置系统变量path以及添加matlab搜索路径之后,将缺失的这些方法都拷贝到编译成功的./caffe/Build/x64/Release/matcaffe/+caffe/文件夹中;

    这时候,再执行caffe.reset_all()就不会报错了;

    输出结果如下:

    Cleared 0 solvers and 0 stand-alone nets
    

    那么接下来就开始执行faster r-cnn的源码测试了;

    3. Faster R-CNN的MATLAB源码测试

    在此之前,我们已经将Faster R-CNN的源码已经下载了,那么就根据作者提供的README.md来一步步的执行;

    3.1 Preparation for Testing

    1. Run fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m to download a compiled Caffe mex (for Windows only).
    2. Run faster_rcnn_build.m
    3. Run startup.m

    其中,

    • 第0步:表示下载作者提供的编译好的caffe,因为我们已经编译好了,这里不需要执行;

    • 第1步:执行faster_rcnn_build.m

      如下图所示,会报错,没关系,因为我们使用的是CPU;

    • 第2步:执行start_up.m,会出现下面错误;

      这是因为,我们没有将编译好的caffe放在./external/caffe/文件夹下;

      因此,根据错误提示,需要在./external/caffe/文件夹下新建一个空白名为matlab的文件夹;

      然后,再执行start_up.m,就不会报错了;

    3.2 Testing Demo

    1. Run fetch_data/fetch_faster_rcnn_final_model.m to download our trained models.
    2. Run experiments/script_faster_rcnn_demo.m to test a single demo image.

    其中,

    • 第0步:下载作者提供的训练好的模型文件;

      其中下载链接好像需要翻墙,如果有需要的话,可以从这里下载:下载地址,提取码:62n6;

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

    • 第1步:执行脚本文件experiments/script_faster_rcnn_demo.m,测试;

      进行如下图所示修改:

      第一、二处指定使用CPU进行计算;

      第二处,由于VGG-16网络有些大,我的笔记本扛不住,因此使用ZF-Net网络;

    最后的结果,如下图所示:

    3.3 Training

    目前这个笔记本还做不了。。。

  • 相关阅读:
    套接字描述符在多进程和多线程下的共享
    广播和多播
    原始套接字和数据链路层访问
    Libevent:11使用Libevent的DNS上层和底层功能
    Lib1vent:10链接监听器接受TCP链接
    Libevent:9Evbuffers缓存IO的实用功能
    Libevent:7Bufferevents基本概念
    python生成url测试用例
    OMD开源监控软件
    iptable防范ddos攻击
  • 原文地址:https://www.cnblogs.com/chenzhen0530/p/10933414.html
Copyright © 2011-2022 走看看