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

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

这是一篇关于在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 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安装位置;第二处修改,添加文件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

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

Widows下Faster R-CNN的MATALB配置(CPU)的更多相关文章

  1. Widows下Faster R-CNN的MATALB配置(GPU)

    目录 1. 准备工作 2. VS2013编译Caffe 3. Faster R-CNN的MATLAB源码测试 说在前面,这篇是关于Windows下Faster R-CNN的MATLAB配置,GPU版本 ...

  2. widows下 python环境变量配置

    widows下 python环境变量配置 便于cmd命令行操作,例如:直接进入Python解释器环境.使用pip安装模块等.

  3. ubuntu下升级R版本

    ubuntu下升级R版本   在测试<机器学习 实用案例解析>一书的邮件分类代码时,windows系统下rstudio中无法读取特殊字符,在ubuntu下可以.在ubuntu虚拟机下安装t ...

  4. CentOS下通过yum安装svn及配置

    CentOS下通过yum安装svn及配置 1.环境centos5.5 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata s ...

  5. Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录

    简介 之前也在linux下安装过oralce,可每次都是迷迷糊糊的,因为大脑一片空白,网上随便看见一个文档就直接复制,最后搞了乱七八糟,虽然装上了,却乱得很,现在记录下来,希望能给其他网上朋友遇到问题 ...

  6. CentOS 6.3下rsync服务器的安装与配置[转]

    CentOS 6.3下rsync服务器的安装与配置   一.rsync 简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也 ...

  7. CentOS下Samba文件服务器的安装与配置

    CentOS下Samba文件服务器的安装与配置 http://blog.csdn.net/limingzhong198/article/details/22064801 一.安装配置 1. 安装sam ...

  8. Linux 下的权限改变与目录配置

    Linux 下的权限改变与目录配置 ./代表本目录的意思. (1):用户与用户组, 1:文件所有者,文件被某一用户所有 2:用户组:    对文件给与一个或者多个用户权限配置 3:其它人: (2):l ...

  9. r.js合并实践 --项目中用到require.js做生产时模块开发 r.js build.js配置详解

    本文所用源代码已上传,需要的朋友自行下载:点我下载 第一步: 全局安装  npm install -g requirejs 第二步: 1.以下例子主要实现功能, 1)引用jq库获取dom中元素文本, ...

随机推荐

  1. LightOJ - 1265 Island of Survival —— 概率

    题目链接:https://vjudge.net/problem/LightOJ-1265 1265 - Island of Survival    PDF (English) Statistics F ...

  2. 应用程序无法启动(0*c000007b)

    2个插件就解决  一个是DX缺失工具检查那个 一个是运行库缺失检查

  3. Hadoop- MapReduce分布式计算框架原理

    分布式计算: 原则:移动计算而尽可能减少移动数据(减少网络开销) 分布式计算其实就是将单台机器上的计算拓展到多台机器上并行计算. MapReduce是一种编程模型.Hadoop MapReduce采用 ...

  4. .NET中Eval()方法大全

    <%# Bind("Subject") %> //绑定字段<%# Container.DataItemIndex + 1%> //实现自动编号<%# ...

  5. 「SDOI 2009」Elaxia的路线

    发现自己这几天智商完全不在线-- 这道题的数据十分的水,怎样都可以艹过去-- 开始想了一个完全错误的算法,枚举一对点,判断这一对点是否同时在两条最短路上,是就用两点之间的路径更新答案.显然这样是错的: ...

  6. ES BM25 TF-IDF相似度算法设置——

    Pluggable Similarity Algorithms Before we move on from relevance and scoring, we will finish this ch ...

  7. leetcode 43. Multiply Strings(高精度乘法)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  8. intent实现Activity之间跳转的各种传值

    一.在Activity之间传递String类型的数据 传递 @Override public void onClick(View v) { String num1 = firstNum.getText ...

  9. PS 滤镜— —球面化效果

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...

  10. HihoCoder1653 : 公平分队([Offer收割]编程练习赛39)(贪心)

    描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经 ...