王老头

导航

【总结】win10下visual studio2013 配置Caffe-CPU

参考博客:https://blog.csdn.net/wanz2/article/details/52770316    https://www.cnblogs.com/TensorSense/p/6260293.html

一、环境准备

windows 10 64位 专业版(非必须)

visual studio 2013(墙裂推荐此版本)

  1. 笔者使用的操作系统为win10 64位,在其他版本的64位windows系统上应该同样可行。
  2. visual studio 2013(以下简称vs2013)中需要安装NuGet,安装方法如下:
    a. 打开vs2013,点击“工具”-“扩展和更新”
    b. 在弹出的对话框中点击“联机”,在右上角搜索框中搜索NuGet,在搜索结果中“NuGet Package Manager”项上面的“下载”,开始下载NuGet,下载完后进行安装
    c. 安装完后重启vs2013,重启后点击“工具”-“扩展和更新”,选择“已安装”,可以看到NuGet Package Manager已经安装好了。

二、配置步骤

    1. 下载代码
      https://github.com/Microsoft/caffe
      得到文件“caffe-master.zip”   (推荐此版本)
      或从https://github.com/BVLC/caffe/tree/windows
      得到文件“caffe-windows.zip”
      二者的配置步骤相同,均能编译成功,本文以源码“caffe-master.zip”为例

    2. 解压后进入如下路径:\caffe-master\windows 之后的操作均在该目录下进行,因此之后省略\caffe-master的路径

    3. 在\windows目录下复制文件 CommonSettings.props.example(应该会以副本形式出现CommonSettings.props - 副本.example),并将该副本改名为CommonSettings.props。(请确认显示文件扩展名这个选项已生效)

    4. 用vs(或其他编辑器)打开CommonSettings.props,将第7行CpuOnlyBuild标签中的值改为true,将第8行UseCuDNN标签中的值改为false,更改完毕后保存并退出。
      (这两步是将caffe的GPU版本关闭,仅使用CPU版本。由于打开GPU会出现其他错误,作为初学者,我们先从CPU版本开始,等熟悉caffe之后再深入研究GPU版本)

    5. 用vs打开\windows下的Caffe.sln,可以看到该解决方案中共有16个项目,请注意核对。(若下载的源码为BVLC的“caffe-windows.zip”,则该解决方案中只有15个项目,所缺少的项目为“caffe.managed”,但经过笔者测试,在编译时并没有影响)右击“解决方案‘Caffe’”,选择“属性”,将“配置属性”-“配置”修改成Release和x64,如下图所示
      这里写图片描述
      (这一步是使用Release来进行编译,若用Debug,则之后每次都要打开vs,会不方便)
      注意:在上图顶部工具栏中的“解决方案配置”和“解决方案平台”框,若你的vs2013中将这两个框在工具栏中显示,则要在工具栏中将配置改成Release和x64,否则直接右击“解决方案Caffe”来更改配置是无效的。

    6. 右击解决方案中的libcaffe项目,选择“属性”,在打开的属性页中选择“C/C++”-“常规”,将“将警告视为错误”设为“否”,如下图所示:
      这里写图片描述

    7. 右击“libcaffe”项目,选择“生成”,之后是一段时间的等待。 (注意我这里visual studio2013配置的是Release x64版本,我记得哪里看过Debug x64会出问题,所以用的是Release x64,一次即成功。)
      注意:点击“生成”后会出现如下图的窗口,此时vs正在使用NuGet对caffe的一些依赖文件进行自动还原
      这里写图片描述
      还原成功后,会在caffe-master的同级目录生成文件夹NugetPackages。

    8. 右击“解决方案Caffe”,选择“生成解决方案”,之后又是一段时间的等待

    9. 等待过后生成成功,到此windows下的caffe配置完成,此时在\caffe-master目录下会生成Build文件夹,即为我们编译成功的文件夹,而\caffe-master\Build\x64\Release目录下则会有我们编译出的caffe.exe执行文件,到此caffe配置完成。

三、MNIST实验

第一步:   官网下载mnist数据 http://yann.lecun.com/exdb/mnist/,共4个文件,解压放到caffe-master\data\mnist下

如图:

第二步: 转换成caffe需要的数据格式,此处转换为 LMDB(cifar是转换成 LEVELDB,可对比参考如何实现的) ,转换格式需要用到caffe里的项目convert_mnist_data ,这个convert_mnist_data.exe程序是放在caffe-master\Build\x64\Release下,如果是用 debug生成的解决方案,则是在caffe-master\Build\x64\Debug下,这个在写 bat文件的时候要注意更改相应的路径。 

在caffe-master\data\mnist下新建一个文本文档,更改后缀为 .bat  在里面复制以下code: 

..\..\Build\x64\Release\convert_mnist_data.exe  ..\..\data\mnist\train-images.idx3-ubyte ..\..\data\mnist\train-labels.idx1-ubyte ..\..\examples\mnist\mnist_train_lmdb  

echo.  

..\..\Build\x64\Release\convert_mnist_data.exe  ..\..\data\mnist\t10k-images.idx3-ubyte  ..\..\data\mnist\t10k-labels.idx1-ubyte ..\..\examples\mnist\mnist_test_lmdb 

pause 

其实第一个路径就是 exe文件所在路径, 后面两个就是数据所在路径,最后一个是输出文件路径

保存后,双击运行如图:

(PS:想转换成LEVELDB格式的话,只需要在.bat文件中把 mnist_train_lmdb改成mnist_train_leveldb ,有两处喔! )

第三步: 更改lenet_train_test.prototxt 和lenet_solver.prototxt文件,主要是改数据的路径以及数据的格式(默认LMDB,若在第二步转成了LEVELD的话,要改成LEVELDB )

首先 lenet_train_test.prototxt改的有

    source: "../../examples/mnist/mnist_train_lmdb"

    batch_size: 64

    backend: LMDB

 

    source:"../../examples/mnist/mnist_test_lmdb"

    batch_size: 100

    backend: LMDB 

如图:

lenet_solver.prototxt改的有

net:"../../examples/mnist/lenet_train_test.prototxt"

snapshot_prefix:"../../examples/mnist/lenet" 

如图:

 

若用CPU在最后一行改成 CPU。(注意这里如果你安装的是CPU版本的Caffe,这里必须改为CPU,否则会出现caffe.exe停止工作的错误;若你是安装的GPU版本的Caffe,这里mode也改成了GPU,那可能是你说明当前设置的CUDA的architecture与电脑的CUDA不匹配,详情请参考:https://blog.csdn.net/jieleiping/article/details/53134174

第四步: 开始训练,和之前我博客里cifar10一样,有两种方法,这里只介绍第一种方法,用批处理文件的方法(想知道第二种方法的请查看之前博客http://blog.csdn.net/u011995719/article/details/53998331

在caffe-master\examples\mnist 下建立文本文档,后缀改为 .bat  复制以下code:

..\..\Build\x64\Release\caffe.exe train--solver=../../examples/mnist/lenet_solver.prototxt

Pause 

保存,双击运行,弹出命令窗,等待训练结束,我的显卡是 GTX 960M ,只需要1分07秒就迭代了10000次,准确率 0.9915(用了一台i3的笔记本,cpu跑的,用了17分钟!)

如图:

PS: 总结两个遇到问题:

1. 转换数据时候要确定转换的是 LMDB还是LEVELDB,这个是在一开始转换的时候设置的,一旦设置,在后面的train_test.prototxt文件中一定要对应的改过来,切记,切记。

2.Debug 和 Release    ,这个是在VS2013中选择的,具体有什么区别我不太清楚(百度了,说对使用问题不大),但是我们在调用例如 convert_mnist_data.exe 、compute_image_mean.exe等这些 应用程序时,要选择路径,一定要看清楚你生成的是在Debug文件夹(caffe-master\Build\x64\Debug)里还是在Release(caffe-master\Build\x64\Release)里,如果你生成的是在Debug里,而调用的时候是用路径:. Build\x64\Release 的话,就会出现如下错误:

当然,可以在VS2013中分别 选择 Debug和Release 进行生成,这样就不用担心第二个问题啦。

 

posted on 2018-05-10 21:09  王老头  阅读(819)  评论(0编辑  收藏  举报