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/:作者提供的一些用于下载的脚本文件;
其中的都是一些依赖方法,大家可以去看一下;
补充说明:
- 有关external/存放的是编译好的提供matlab接口的caffe,后续我们将使用VS进行编译,并将编译好的caffe放进其中;
- 有关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
- Run
fetch_data/fetch_caffe_mex_windows_vs2013_cuda65.m
to download a compiled Caffe mex (for Windows only).- Run
faster_rcnn_build.m
- 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
- Run
fetch_data/fetch_faster_rcnn_final_model.m
to download our trained models.- 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)的更多相关文章
- Widows下Faster R-CNN的MATALB配置(GPU)
目录 1. 准备工作 2. VS2013编译Caffe 3. Faster R-CNN的MATLAB源码测试 说在前面,这篇是关于Windows下Faster R-CNN的MATLAB配置,GPU版本 ...
- widows下 python环境变量配置
widows下 python环境变量配置 便于cmd命令行操作,例如:直接进入Python解释器环境.使用pip安装模块等.
- ubuntu下升级R版本
ubuntu下升级R版本 在测试<机器学习 实用案例解析>一书的邮件分类代码时,windows系统下rstudio中无法读取特殊字符,在ubuntu下可以.在ubuntu虚拟机下安装t ...
- CentOS下通过yum安装svn及配置
CentOS下通过yum安装svn及配置 1.环境centos5.5 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata s ...
- Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录
简介 之前也在linux下安装过oralce,可每次都是迷迷糊糊的,因为大脑一片空白,网上随便看见一个文档就直接复制,最后搞了乱七八糟,虽然装上了,却乱得很,现在记录下来,希望能给其他网上朋友遇到问题 ...
- CentOS 6.3下rsync服务器的安装与配置[转]
CentOS 6.3下rsync服务器的安装与配置 一.rsync 简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也 ...
- CentOS下Samba文件服务器的安装与配置
CentOS下Samba文件服务器的安装与配置 http://blog.csdn.net/limingzhong198/article/details/22064801 一.安装配置 1. 安装sam ...
- Linux 下的权限改变与目录配置
Linux 下的权限改变与目录配置 ./代表本目录的意思. (1):用户与用户组, 1:文件所有者,文件被某一用户所有 2:用户组: 对文件给与一个或者多个用户权限配置 3:其它人: (2):l ...
- r.js合并实践 --项目中用到require.js做生产时模块开发 r.js build.js配置详解
本文所用源代码已上传,需要的朋友自行下载:点我下载 第一步: 全局安装 npm install -g requirejs 第二步: 1.以下例子主要实现功能, 1)引用jq库获取dom中元素文本, ...
随机推荐
- MySQL——存储引擎
核心知识点 1.InnoDB:数据和索引存放在单独的文件,聚簇索引,行级锁,事务,MVCC 2.MyISAM: (1)缺点:不支持事务和表级锁,因为不支持表锁,锁颗粒比较大,因此适合只读和小文件. ( ...
- linux 防火墙配置与REJECT导致没有生效问题
1.进入到/etc/sysconfig 如图 2.使用vi命令对iptables进行编辑."vi iptables",然后显示如图 # Firewall configuration ...
- myeclipse破解补丁激活失败方法
查看本博客前,请先参考博客:http://blog.csdn.net/miss_kun/article/details/51819048 有时候,激活的时候不成功,比如我的是myeclipse2014 ...
- leetcode 859. Buddy Strings
Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...
- 复制一个带random指针的链表
一个单链表,其中除了next指针外,还有一个random指针,指向链表中的任意某个元素.如何复制这样一个链表呢? 通过next来复制一条链是很容易的,问题的难点在于如何恰当地设置新链表中的random ...
- 「SDOI 2009」Elaxia的路线
发现自己这几天智商完全不在线-- 这道题的数据十分的水,怎样都可以艹过去-- 开始想了一个完全错误的算法,枚举一对点,判断这一对点是否同时在两条最短路上,是就用两点之间的路径更新答案.显然这样是错的: ...
- ES搜索排序,文档相关度评分介绍——TF-IDF—term frequency, inverse document frequency, and field-length norm—are calculated and stored at index time.
Theory Behind Relevance Scoring Lucene (and thus Elasticsearch) uses the Boolean model to find match ...
- Linux_异常_02_WinSCP上传文件时显示Permission denied
异常现象如下: 二.解决方案 1.设置对应目录权限全开,就可以上传文件到这个目录了 sudo chmod 777 /devloper
- PyNLPIR python中文分词工具
官网:https://pynlpir.readthedocs.io/en/latest/ github:https://github.com/tsroten/pynlpir NLP ...
- liunx命令之:命令链接ftp服务器
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...