首先注意的是:ubuntu上面训练好的模型,可以直接用在windows下的caffe中测试,模型是可以跨平台的,并且命令都是几乎一样的,目前没有发现有啥不一样,并且最后无论批量测试还是单张测试的结果与ubuntu上面的结果一抹一眼(理论上也应该是一样的哦~~傻)
主要参考:blog.csdn.net/sinat_27403413/article/details/52791489
材料准备:
(1)VS2013(VS2015应该也可以,我用的是2013,安装包:pan.baidu.com/s/1miJsd4W):其中需要安装NuGet(是Visual Studio的扩展,可以给项目自动添加一些第三方组件),安装方法如下:
a. 打开vs2013,点击“工具”-“扩展和更新”
b. 在弹出的对话框中点击“联机”,在右上角搜索框中搜索NuGet,在搜索结果中“NuGet Package Manager”项上面的“下载”,开始下载NuGet,下载完后进行安装
c. 安装完后重启vs2013,重启后点击“工具”-“扩展和更新”,选择“已安装”,可以看到NuGet Package Manager已经安装好了。
(2)Anaconda2:官方网址:www.continuum.io/downloads,百度云:pan.baidu.com/s/1c2Gk8zI
注意:安装的时候最好把自动添加path的选项勾选,并且安装完成之后,再pip install protobuf,后面才不会出错
(3)微软提供Windows工具包(caffe-master):github.com/Microsoft/caffe(我用的是官网的,有16个项目,注意核对,BVLC的“caffe-windows.zip”中只有15个项目,但是都不影响编译) 百度云:pan.baidu.com/s/1hs8ngpA 密码:ith0
(4)微软的Windows三方包(Nuget得到的包):链接:pan.baidu.com/s/1pKQKJJP 密码:2vzy,只要解压在caffe-master同路径下即可:
注意:本来NugetPackages文件夹是在下面生成libcaffe项目以及生成caffe解决方案的时候下载的,但是下载时间会很久,所以可以直接下载好放在同路径下。
caffe的安装及Python接口的配置
(1)解压caffe-master以及第三方NugetPackages库于同一文件夹下,如上图。
(2)打开caffe-master->windows,复制CommonSettings.props.example,修改后缀为CommonSettings.props(其实就是相当于ubuntu下面caffe编译用到的makefile.config)
(3)修改CommonSettings.props:修改CpuOnlyBuild为true,UseCuDNN改为false。因为要配置Python接口,所以PythonSupport改为true,并将下面的PythonDir修改为自己的Python安装路径,注意Anconda2后面那个斜线不能少。
注意:就算此刻下面python的路径不对,好像没啥影响,可能是因为后面是直接把编译好的东西放在python包中的吧(因为我是在我的电脑上编译完成之后,把我编译好的东西直接放在另一台电脑上用的,并没有用该电脑自己编译最后生成的caffe包,而我这两台电脑的python路径就不一样)
(4)双击caffe.sln,在VS2013中打开文件:
首先点击解决方案,设置解决方案配置和解决方案平台分别是release和x64(这一步是使用Release来进行编译,若用Debug,则之后每次都要打开vs,会不方便):
之后,右击解决方案中的libcaffe项目,选择“属性”,在打开的属性页中选择“C/C++”-“常规”,将“将警告视为错误”设为“否”,如下图所示
先生成项目:libcaffe,再生成解决方案caffe,最后生成项目:pycaffe。完成之后生成可以调用的caffe包:
把最后生成的caffe文件夹拷贝到python安装目录的\Lib\site-packages中
(5)验证:打开python,输入import caffe 看看是否报错,没有报错恭喜你,可以使用了(你也可以继续输入from caffe import layers as L和from caffe import params as P试一试)
注意的是:我做的能见度识别的项目中,ubuntu上面是先将所有图像resize到256,并且生成均值文件,但是网络的大小是227,在ubuntu下测试单张图片没错,但是在windows下面,居然会报错:均值文件的大小与输入图像大小不匹配的问题,后面按照网上的解决方法,修改最后生成的caffe下面的io.py文件:
改成如下这一段:
if ms != self.inputs[in_][1:]:
print(self.inputs[in_])
in_shape = self.inputs[in_][1:]
m_min, m_max = mean.min(), mean.max()
normal_mean = (mean - m_min) / (m_max - m_min)
mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * \
(m_max - m_min) + m_min
#raise ValueError('Mean shape incompatible with input shape.')
即可,后面发现为啥ubuntu里面测试没错,原来是ubuntu下面的caffe-master/python/io.py文件里面的代码就是上面这样的!!!
注意项目的位置:E:\caffe\caffe-master\examples\visionClass
网友评论