caffe环境配置


从零到一:caffe-windows(CPU)配置与利用mnist数据集训练第一个caffemodel

一、前言

    本文会详细地阐述caffe-windows的配置教程。由于博主自己也只是个在校学生,目前也写不了太深入的东西,所以准备从最基础的开始一步步来。个人的计划是分成配置和运行官方教程,利用自己的数据集进行训练和利用caffe来实现别人论文中的模型(目前在尝试的是轻量级的SqueezeNet)三步走。不求深度,但求详细。因为说实话caffe-windows的配置当初花了挺多时间的,目前貌似还真没有从头开始一步步讲起的教程,所以博主就争取试着每一步都讲清楚吧。

    这里说些题外话:之所以选择SqueezeNet是因为相比于目前互联网行业深度学习应用的火热,移动设备端的深度学习应用实在少得可怜。如果我没记错地话,苹果在2016年9月7日发布会中提到了机器学习两次,其中ios10的一个亮点就是利用深度学习技术实现照片中人脸的自动识别归类,私下里测试了下效果很不错。当然缺点也显而易见:由于需要大量的计算,目前只在用户接通电源的情况下才会去识别。我的师兄们也尝试过用深度学习做移动设备端应用的开发,不过最后由于花费时间太长改成了上传到服务器端完成。所以计算量大应该算是深度学习应用向移动设备端转移的一个很大问题。不过,有理由相信今后移动设备端的深度学习应用会变得越来越多,也会是一个前景广阔的市场。

二、环境

    系统版本:Windows 10 专业版 64位

    Visual Studio版本:Visual Studio Ultimate 2013

    都可以从itellyou上下载到,强烈推荐使用上述版本的Visual Studio(以下简称VS)。

三、详细步骤

caffe-windows配置部分

(1)确保正确安装了VS后首先下载caffe-windows源代码,网址如下:

      https://github.com/BVLC/caffe/tree/windows

   我下载得到的caffe-windows.zip的MD5值为:8F2804014EF395094584230A4A9EE8A6,不排除后续源代码更新导致本教程失效的可能,因此保险的话可以校验一下。

(2)解压后进入如下路径:\caffe-windows\windows(之后路径均默认在caffe-windows文件夹下,因此都省略\caffe-windows)

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

(3)用VS打开CommonSettings.props,进行如下两个更改后保存退出。

   1.第7行的false改成true;2.第8行的true改成false;更改后效果如下:

1

   如果是像我一样的初学者不推荐一开始就配置GPU版本的caffe,因为又会有很多问题出现,容易打消积极性,更应该先利用CPU版本初步掌握caffe后再进一步研究GPU版本。

(4)用VS打开\windows下的Caffe.sln,加载完成后右键点击解决方案资源管理器中的解决方案Caffe,选择启用NuGet程序包还原(VS会自动地将caffe要用到的第三方库下载完成,就功能来说还是很方便的,有点类似linux的apt-get,还不用担心版本问题。不过就caffe实际用这个还原第三方库的体验来说真不咋的),如下图所示:

2    接下来的过程十分漫长,还有可能出现未响应或下载中断的情况。

    我想了一种可取且可行的方案:在第四步打开Caffe.sln之前先下载别人已经下载好的NugetPackages文件夹,并放到和caffe-windows文件夹的同级目录下。这样之后再打开Caffe.sln时能够自动识别出来(亲自试了一下是可行的)。提供一个NugetPackages文件夹的压缩包:http://pan.baidu.com/s/1qYpg3bY,提取码f2zx。

    如果自己可以下载,那下载完成后会在caffe-windows文件同级目录下出现一个新的NugetPackages文件夹(里面有16个子文件夹,都是caffe需要用到的库,之后会结合实际运行结果简单介绍下这些库)。如果点击上图中的管理解决方案的NuGet程序包(G)还可以看到这些库的简要信息,如下图所示:

3

(5)之后点击项目-属性(或直接右击解决方案Caffe选择属性),把配置修改成Release x64,并将生成全部勾上,如下图所示。最后就可以点生成解决方案了,然后又是较长的等待。。

4

    这里会出现一个问题,单独说明下:

    报出类似下面的错误:

     error LNK1104:无法打开文件“libcaffe.lib

    网上的解决方案是对libcaffe单独重新生成,如下图所示:

15

    但这样的话会出现另外一个错误:

    error C2220:警告被视为错误-没有生成“object”文件

    如果出现这样的错误,请打开项目-属性按照下图进行更改:

16

    之后再对libcaffe重新生成应该就可以成功通过。

    最后再点击生成-生成解决方案应该就可以生成成功了。至此caffe-windows配置完成。进入目录\caffe-windows\Build\x64\Debug里面众多的可执行文件都会在之后用到。

    其实Debug也是可以的,但是这样的话之后每次都要打开VS,总觉得有点不方便,所以后面还是通过自己写bat文件调用caffe。Debug的方法可以参考这篇文章[2]。

    到了这一步恭喜你配置已经完成了。接下来就可以用mnist数据集生成模型了。

mnist数据集测试部分

  这部分本来应该分开来写的,但由于完成了caffe-windows配置部分也不知道到底配置得正不正确,所以还是一鼓作气地用机器学习的Hello World程序:mnist手写数字数据集来测试下。

(1)首先下载mnist数据集http://yann.lecun.com/exdb/mnist/,这里需要注意的是caffe并不直接通过下载得到的四个文件进行训练,而是会把它转化为lmdb或leveldb格式进行读取。lmdb是lightning(闪电的) memory-mapped database manager的缩写,能够把原始数据通过更为高效的存储方式存储,从而加快读取和训练速度(lmdb比leveldb更快,可以看看刚刚的NugetPackages文件夹,当中就包含着对应的库)。

    实现这个转化的代码是\examples\mnist的convert_mnist_data.cpp,但也没必要看,因为它的运行脚本create_mnist.sh显然是linux下的东西。想了想也可以理解,毕竟caffe本来也不支持windows,能移植过来就不错了,也不能指望大牛们把所有例子的代码都一并移植过来。后续教程会专门介绍如何实现自己的数据集向lmdb和leveldb转换。目前更很好的办法就是直接网盘下载,这里分享一个http://pan.baidu.com/s/1c2G9qyk 提取码xama。

    里面是已经经过转换的leveldb格式的训练集和测试集,把这两个文件夹直接放到\examples\mnist目录下,如下图所示:

6

(2)在正式运行前还有几个文件中需要进行改动,首先用VS打开\examples\mnist目录下的lenet_solver.prototxt,将最后一行改成CPU:

7

   可以看到,这个文件是对网络训练参数进行指定:max_iter指定了最大迭代次数,snapshot是输出中间结果。上图中的参数已经修改过,初始的max_itersnapshot是10000和5000。

   接着再用VS打开\examples\mnist目录下的lenet_train_test.prototxt,做如下修改以正确指定训练集和测试集。

8

    这里额外介绍下caffe-windows采用的LeNet-5模型,也就是上图中layer的定义方式。由于之后自己写代码实现模型时肯定需要对LeNet-5模型有了解,所以提供该模型的原始资料以供参考。

http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

   其实平时看些别人论文中提供的代码,上述两个文件也算是论文和代码的核心所在。基本都是提供自己编写的上述两个文件,再加上最终训练出来的caffemodel,日志和几张效果图。比如下图就是SqueezeNet提供的的:

13

(3)完成上述工作后就可以编写bat脚本进行正式训练了。回到caffe-windows的根目录下新建一个run.txt并写入以下内容(自己敲一遍感觉效果更佳,特别是像我一样之前对bat文件完全不懂的人):

14

    将后缀名改成bat后双击运行,不出意料,应该会出现类似如下的训练过程:

9

四、mnist运行结果

    我清除解决方案后按照上述步骤重新试了一次,没有出现问题。当然也还是不能保证100%能运行,所以如果出现任何错误的话欢迎交流。

    下面就对运行的结果进行一些简单的解释:

    最前面的部分是打印各种信息(包括是用CPU还是GPU、训练参数、网络参数等等),类似下图内容:

10

    之后即为和下图一样的正式训练过程,可以看到打印信息的格式也是有规律的:

11

    左侧为caffe采用的GLOG库内方法打印的信息,这个库主要起记录日志的功能,方便出现问题时查找根源,具体格式为:

[日期] [时间] [进程号] [文件名] [行号]

    往右即为当前迭代次数以及损失值(训练过程不输出准确率accuracy)。

   当迭代次数达到lenet_solver.prototxt定义的max_iter时,就可以认为训练结束了。并且最终会在目录\examples\mnist下产生训练出的模型(文件后缀名为caffemodel和solverstate),如下图所示:

12

    分别是训练至一半和训练最终完成后的模型。接下来可以用这模型对mnist的测试集和自己手写的数字进行测试(见下篇教程)。

五、结语

    也许到目前为止你还是感觉caffe像个黑盒一样,无法洞悉它的具体工作过程。但至少到这一步为止你已经完成了最初的caffe配置过程并成功利用mnist数据训练出了第一个caffemodel。之后的东西虽然不能说简单,但并没有这最初的一步来得意义重大。完成了Step ZERO to ONE,就能饱含信心的继续下去,进一步探究caffe(好像鸡汤了?)。在接下来的教程中会用到该模型对mnist数据集以及你自己手写的图片进行测试。后者还是很有趣的。

六、参考

[1]深度学习21天实战Caffe 赵永科 电子工业出版社

(虽然这本书由于大量地贴代码,评价不是太好,但对初学者还是有很多可取之处的)

[2]http://m.blog.csdn.net/article/details?id=51355143

[3]Caffe官方教程中译本 社区预览版


从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试

    通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文件:

1

      接下来就可以利用模型进行测试了。关于测试方法按照上篇教程还是选择bat文件,当然python、matlab更为方便,比如可以迅速把识别错误的图片显示出来。

一、均值文件mean.binaryproto

    在进行分类之前首先需要产生所有图片的平均值图片,真正分类时的每个图片都会先减去这张平均值图片再进行分类。这样的处理方式能够提升分类的准确率。

   产生均值文件的方法是利用解决方案中的compute_image_mean.exe,位于目录\caffe-windows\Build\x64\Release下。回到caffe-windows根目录下创建一个mnist_mean.txt,写入如下内容:

6

   将后缀名改为bat后双击运行(其实写了那么多bat文件也应该有体会了,只要指定的路径正确就行,不一定非要放在caffe-windows根目录下)。正确运行的话会在根目录下产生一个mean.binaryproto,也就是我们所需要的均值文件。接着为了使用均值文件需要稍微修改下层的定义。所以打开\examples\mnist\lenet_train_test.prototxt,做如下修改:

7

    到此为止,均值文件的预处理部分处理完毕,下面就可以进行测试了。

二、利用mnist测试集进行测试

   这部分比较简单,因为之前生成的Caffe.exe就可以直接用来进行测试。同样地在caffe-windows目录下新建mnist_test.txt,并写入如下内容(其中的间断处都为一个空格)。

2

   意思也显而易见,首先指定为测试模式,随后指定模型和训练出来的参数。

   将后缀名改为bat后双击运行,结果如下所示:

3   左侧的内容依旧是GLOG的记录日志,右侧中的Batch需要和网络参数初始中的batch_size一起理解。每个Batch中包含了batch_size张测试图片,所以每个Batch的准确率是对这batch_size张测试图片整体而言的。而不是像我最初一样先入为主地以为准确率应该是对每张测试图片而言,故只有0和1两种情况。

   这边个人也有个小问题,Batch之所以为0-49共50个是由caffe.cpp中一个叫做FLAGS_iterations的变量指定的,但是找来找去实在无法确定这个变量是否是由网络参数确定的,之后再好好看一下代码。

   这个准确率不能说特别好,因为我有空也尝试过Tensorflow,Tensorflow官方文档中的一个多层卷积网络对mnist测试集的准确率为99.2%左右。不过到此为止我们已经完成了mnist测试集在caffe上的运行和测试。

三、利用自己的手写数字进行测试

   主要参考了http://blog.csdn.net/zb1165048017/article/details/52217772这篇文章,不过还是有些细节需要更改。

(1)首先可以按照上面网址教程中的第六和第七步在\examples\mnist目录下生成手写的一个28*28像素数字的bmp文件和一个标签文件label.txt。比如我手写的数字如下图所示:
test1

   这里需要注意的是上述教程中的matlab代码最后一句需要更改。例如我已经将matlab的工作目录设为\caffe-windows\examples\mnist,就可以直接输入(test1为我的手写数字文件名):

4

(2)之后就可以调用之前生成的classification.exe进行分类。同样的在caffe-windows目录下新建test_personaldig.txt并写入如下内容:

5

    中间的三行其实是每个加一个空格后跟在examples\mnist\lenet.prototxt的后面,这里为了显示地更加清楚而进行了换行。更改后缀为bat后就可以双击运行,会出现类似下面的内容:

8

   可见分类结果正确。让我们再来测试一个下图写得一个比较飘逸的5。

im

   分类结果还是正确的。

9

四、后记

   到此为止我们已经完成了利用mnist测试集对生成的模型进行准确率测试,并成功对自己手写的数字进行了识别,总之效果还不差。然而至此教程甚至根本没有提及过卷积神经网络,可见caffe的确可以让一个完全不懂卷积神经网络原理的人通过不断手动调整参数完成学习,实现分类等目标,甚至还能取得非常不错的效果。就像程序员和数学的关系一样,知晓了卷积神经网络的详细原理对我们使用caffe只有好处没有坏处,并且要真正做到看懂caffe的每个模块必须了解卷积神经网络。博主自己也正在深入学习卷积神经网络,这里推荐一个非常好的入门资料CS231n Convolutional Neural Networks for Visual Recognition

http://cs231n.github.io/convolutional-networks/

   上面网址中的教程对卷积神经网络的基础知识讲述得非常透彻清楚。但如果想继续了解其中的数学推导的话,建议再看下面这篇文章:

Notes on Convolutional Neural Networks, Jake Bouvrie


转载原文:http://www.cnblogs.com/yixuan-xu/p/5862657.html



第三篇

参考链接:
  http://www.cnblogs.com/yixuan-xu/p/5858595.html http://www.cnblogs.com/zf-blog/p/6139044.html http://blog.csdn.net/zb1165048017/article/details/51355143?locationNum=6&fps=1
http://blog.csdn.net/zb1165048017/article/details/52980102 搭建一个完整的运行环境,不出错是很难的。尤其是对于我这样的小白。上面是我为搭建此环境参考的前辈博客链接。 这里做下总结,Windows7 64下搭建Caffe+python接口环境。(有些资源是前辈博客里的) 1.软件 Caffe下载链接(caffe-master): https://github.com/Microsoft/caffe 百度云下载:http://pan.baidu.com/s/1hs8ngpA 密码:ith0 微软的Windows三方包(Nuget程序包):http://pan.baidu.com/s/1pKQKJJP 密码:2vzy VS2013安装包链接:http://pan.baidu.com/s/1dF5OTWH 密码:16fn anaconda2下载: 官网下载 https://repo.continuum.io/archive/Anaconda2-4.2.0-Windows-x86_64.exe
         (千万要下载支持python2.7的anaconda2,不然后面会遇到找不到python27.lib,折腾了我一下午时间) 2.软件下载完成之后,开始一步一步来搭建环境。 (1)首先解压caffe-master.zip压缩包,打开caffe-master文件夹。在windows文件夹下复制CommonSettings.props.example文件, 重命名为CommonSettings.props文件。
(2)在windows文件夹下找到Caffe.sln,并用VS2013打开->项目/解决方案。 在CommonSettings.props文件中修改相应内容:(下面Python路径一定要改为anaconda2的路径,图片中是anaconda3路径)

  
   由于PC只有CPU没有GPU,修改第7、8行;想要支持Python接口,修改第13行,并添加Python路径,修改第48行 打开Caffe.sln出现了libcaffe和test_all加载失败。
出现这个情况,原因可能和更改配置有关系,就将项目/解决方案关闭,重新打开就好了。
   
  (3)配置文件修改好后,可以编译Caffe了。(有两种Debug和Release活动配置,都可以编译)
    
  这时,可能会弹出一个对话框,表示正在下载第三方包。 也可以这么做,在编译之前直接将NugetPackages文件夹(由于我们已经下载好NugetPackages),放在与Caffe-Master并列文件夹中。下载完成后,如图。
   (4)设置一下运行项。
   (5)运行caffe.cpp,直接双击打开caffe.cpp,然后ctrl+F5直接编译。出现如下命令窗口说明编译成功。
  
  

3.用Caffe来测试mnist数据集 (1)去官网http://yann.lecun.com/exdb/mnist/下载数据集。将图里的数据都下载下来,备用。
   下载后解压到.\caffe-master\data\mnist放在两个文件夹下。
  
(2)在caffe-master目录下,新建一个create_mnist.bat文件,写入下面代码:
.\Build\x64\Release\convert_mnist_data.exe .\data\mnist\mnist_train_lmdb\train-images.idx3-ubyte  .\data\mnist\mnist_train_lmdb\train-labels.idx1-ubyte .\examples\mnist\mnist_train_lmdb 
echo.
.\Build\x64\Release\convert_mnist_data.exe .\data\mnist\mnist_test_lmdb\t10k-images.idx3-ubyte  .\data\mnist\mnist_test_lmdb\t10k-labels.idx1-ubyte .\examples\mnist\mnist_test_lmdb
pause
    双击该脚本运行,会在.\caffe-master\examples\mnist下生成相应的lmdb数据文件。
  

    caffe环境配置_第1张图片

    可能会遇到这个问题:
        convert_mnist_data.cpp:103] Check failed: mdb_env_open(mdb_env, db_path, 0, 0664) == 0 (112 vs. 0) mdb_env_open failed
        解决:在convert_mnist_data.cpp第103行代码中
                CHECK_EQ(mdb_env_set_mapsize(mdb_env, 1099511627776), MDB_SUCCESS) //1TB
             将数字改为107374182(100M),再重新生成一下convert_mnist_data.cpp
    再次运行脚本,又出现这个问题:
        convert_mnist_data.cpp:98] Check failed: _mkdir(db_path) == 0 (-1 vs. 0) mkdir .\examples\mnist\mnist_test_lmdbfailed
        解决:前面虽然出现了错误,但数据文件夹同样生成了。在convert_mnist_data.cpp第98行代码中mkdir(db_path, 0744)表示为数据库创建文件夹。
            如果文件夹已经存在,程序会报错退出。程序不会覆盖已有的数据库。已有的数据库如果不要了,需要手动删除。
    (3)修改.\caffe-master\examples\mnist\lenet_solver.prototxt 将最后一行改为solver_mode:CPU
       修改.\caffe-master\examples\mnist\lenet_train_test.prototxt,如下图。
   
    (4)在.\caffe-master目录下,新建train_mnist.bat,然后写入下面代码:
        .\Build\x64\Release\caffe.exe train --solver=.\examples\mnist\lenet_solver.prototxt
        pause
      然后双击运行,就会开始训练,训练完毕后会得到相应的准确率和损失率。(用Debug配置运行时,大概要一个小时左右才能训练完)

  caffe环境配置_第2张图片

4.配置Python接口
    (1)编译caffe接口,确认配置文件CommonSettings.props的参数中第13、48行已修改,如下。
        true
        C:\Anaconda2\
    保存之后,去编译pycaffe,配置模式改为Release
   编译完成以后,会出现.\caffe-master\Build\x64\Release\pycaffe文件夹
   将caffe文件夹复制到Anaconda2安装目录下C:\Anaconda2\Lib\site-packages    (2)import caffe 由于我PC装了很多版本的Python,在cmd里指定下目录,调用C:\Anaconda2\里的Python.exe 再import caffe
     这时会出现 ImportError: No module named google.protobuf.internal 这个错误。 原因是没有protobuf这个模块。使用pip install protobuf(这个安装也需要注意,在cmd里指定下目录, 调用C:\Anaconda2\Scripts\里的pip.exe 即pip.exe install protobuf).
    
    
    模块安装完成以后,再import caffe,就OK了。
    
   (3)看一个实例
       实现的是利用噪声生成一张真实图片,使用的实例是Texture Synthesis Using Convolutional Neural Networks
       原文地址: http://blog.csdn.net/zb1165048017/article/details/52980102
       github地址:https://github.com/leongatys/DeepTextures
       下载github的程序,新建一个DeepTextures-master.py文件。
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import  glob
import  sys
import  os
from  collections  import  OrderedDict
import  caffe
import  numpy as np
from  matplotlib  import  pyplot as plt
import  qtpy
 
base_dir1  =  os.getcwd()
print  base_dir1
sys.path.append(r 'C:\Anaconda2\Lib\site-packages\PyQt5' )
print  sys.path
 
#How to call custom moudles(DeepTextures-master)?
#1.find the site-packages folder in the python installation directory(.\Lib\site-packages)
#2.create a path file in this directory,such as myPython.pth
#3.open the myPython.pth,write the folder path for the user module(xxx.\DeepTextures-master)
#4.restart python container(IDLE/command line)
#5.from DeepImageSynthesis import *
 
 
base_dir  =  r "C:\baidu\spider\caffe\PDF\example\DeepTextures-master"
from  DeepImageSynthesis  import  *
 
VGGweights  =  os.path.join(base_dir,r 'Models\vgg_normalised.caffemodel' )
VGGmodel  =  os.path.join(base_dir,r 'Models\VGG_ave_pool_deploy.prototxt' )
 
imagenet_mean  =  np.array([  0.40760392 ,   0.45795686 ,   0.48501961 ])  #mean for color channels (bgr)
im_dir  =  os.path.join(base_dir,  'Images/' )
 
caffe.set_mode_cpu()  #for cpu mode do 'caffe.set_mode_cpu()'
#if cpu mode we should not call,below 3 line of code is just for using GPU mode.
#gpu = 0
#caffe.set_mode_gpu()
#caffe.set_device(gpu)
 
 
#load source image
source_img_name  =  glob.glob1(im_dir, 'pebbles.jpg' )[ 0 ]
print  source_img_name
source_img_org  =  caffe.io.load_image(im_dir  +  source_img_name)
im_size  =  256.
[source_img,net]  =  load_image(im_dir  +  source_img_name, im_size,
                               VGGmodel, VGGweights, imagenet_mean,
                               show_img = True )
im_size  =  np.asarray(source_img.shape[ - 2 :])
 
 
#l-bfgs parameters optimisation
 
maxiter   =  2000
=  20
 
#define layers to include in the texture model and weights w_l
tex_layers  =  [ 'pool4' 'pool3' 'pool2' 'pool1' 'conv1_1' ]
tex_weights  =  [ 1e9 , 1e9 , 1e9 , 1e9 , 1e9 ]
 
#pass image through the network and save the constraints on each layer
constraints  =  OrderedDict()
net.forward(data  =  source_img)
for  l,layer  in  enumerate (tex_layers):
     constraints[layer]  =  constraint([LossFunctions.gram_mse_loss],
                                     [{ 'target_gram_matrix' : gram_matrix(net.blobs[layer].data),
                                      'weight' : tex_weights[l]}])
     
#get optimisation bounds
bounds  =  get_bounds([source_img],im_size)
 
 
#generate new texture   
result  =  ImageSyn(net, constraints, bounds = bounds,
                   callback = lambda  x: show_progress(x,net),
                   minimize_options = { 'maxiter' : maxiter,
                                     'maxcor' : m,
                                     'ftol' 0 'gtol' 0 })
 
 
#match histogram of new texture with that of the source texture and show both images
new_texture  =  result[ 'x' ].reshape( * source_img.shape[ 1 :]).transpose( 1 , 2 , 0 )[:,:,:: - 1 ]
new_texture  =  histogram_matching(new_texture, source_img_org)
plt.imshow(new_texture)
pltfigure()
plt.imshow(source_img_org)
       调试可能遇到下面几个问题:
       (1). F0122 16:28:32.843454 14000 common.cpp:75] Cannot use GPU in CPU-only Caffe
            因为在前面caffe配置过程中,只配置了CPU模式。无法使用GPU,代码中已更改。
       (2). This application failed to start because it could not find or load the Qt platform plugin "windows" in "".
            由于没有配置系统的环境变量QT_QPA_PLATFORM_PLUGIN_PATH,找到pyqt的plugin目录
            C:\Anaconda2\Library\plugins(可能每个人安装的路径不同)
    
       不知道是什么问题。结果却不敬人意,待续解决。


第四篇

仿照cifar10的模型使用,本文对mnist的训练方式做了部分修改

【注】本文caffe安装路径为E:\CaffeDev-GPU\caffe-master。请自行参考并修改相关路径(debug以及release参考你编译caffe时候采用的模式)

第一步

按照前面的model生成方法的前两步骤制作数据集,得到两个文件夹。并拷贝到E:\CaffeDev-GPU\caffe-master\Build\x64\Release


train:链接:http://pan.baidu.com/s/1cJZNI2 密码:ikz8

test:链接:http://pan.baidu.com/s/1gfuhmvx 密码:7krq

第二步

计算均值文件:在E:\CaffeDev-GPU\caffe-master\Build\x64\Release目录下新建bat文件mnist_mean.bat,内容如下

[html]  view plain  copy
  1. compute_image_mean.exe mnist_train_leveldb mean.binaryproto  
  2. pause  
得到mean.binaryproto

mean.binaryproto:链接:http://pan.baidu.com/s/1dFp19i5 密码:xhux

第三步

将上面两步的train和test数据集以及均值文件拷贝到E:\CaffeDev-GPU\caffe-master\examples\mnist文件夹下,方便后面的路径书写

修改此文件夹下的训练方法lenet_train_test1.prototxt的前两层,就是在原来的基础上把均值文件加进去。同时注意lenet_solver.prototxt中的net是你修改以后的prototxt文件,我是把修改后的prototxt训练文件命名为lenet_train_test1.prototxt了(加了一个1)

[html]  view plain  copy
  1. name: "LeNet"  
  2. layer {  
  3.   name: "mnist"  
  4.   type: "Data"  
  5.   top: "data"  
  6.   top: "label"  
  7.   include {  
  8.     phase: TRAIN  
  9.   }  
  10.   transform_param {  
  11.     mean_file: "examples/mnist/mean.binaryproto"  
  12.     scale: 0.00390625  
  13.   }  
  14.   data_param {  
  15.     source: "examples/mnist/mnist_train_leveldb"  
  16.     batch_size: 64  
  17.     backend: LEVELDB  
  18.   }  
  19. }  
  20. layer {  
  21.   name: "mnist"  
  22.   type: "Data"  
  23.   top: "data"  
  24.   top: "label"  
  25.   include {  
  26.     phase: TEST  
  27.   }  
  28.   transform_param {  
  29.      mean_file: "examples/mnist/mean.binaryproto"  
  30.      scale: 0.00390625  
  31.   }  
  32.   data_param {  
  33.     source: "examples/mnist/mnist_test_leveldb"  
  34.     batch_size: 100  
  35.     backend: LEVELDB  
  36.   }  
  37. }  
lenet_train_test1.prototxt:链接:http://pan.baidu.com/s/1skBN3Md 密码:ixzt

lenet_solver1.prototxt:链接:http://pan.baidu.com/s/1kVxwQl5 密码:3o5a

第四步

在E:\CaffeDev-GPU\caffe-master目录下新建训练bat文件train_minist.bat,内容如下:

[html]  view plain  copy
  1. .\Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver1.prototxt  
  2. pause    

此处注意一下CPU与GPU的训练仅仅需要修改lenet_solver1.prototxt的最后一行即可

caffe环境配置_第3张图片

训练好的lenet_iter_10000.caffemodel共享 : 链接:http://pan.baidu.com/s/1i55hlid 密码:7fxl

第五步

测试一下测试集的分批准确率,同样在E:\CaffeDev-GPU\caffe-master下新建test_mnist.bat,内容如下

[html]  view plain  copy
  1. .\Build\x64\Release\caffe.exe test --model=examples/mnist/lenet_train_test1.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu=0  
  2. pause  
运行之,得到如下结果:

caffe环境配置_第4张图片

第六步

这一步往后就比较实用了,先介绍如何制作手写数字的单张测试样本。两种方法:①按照我前面的博客,从mnist数据集里面摘取里面的某张或者某些图片;②用Windows的画图工具自己手写一张(怎么打开画图工具就不说了吧)

caffe环境配置_第5张图片

为了方便直接调整写的数字的大小,如果你这里不调整大小,在matlab里面有相关的resize函数,自己查询调用方法,很简单


然后,写几张,本人龙飞凤舞地画了几张:链接:https://pan.baidu.com/s/1mkf3aXi 密码:zo3c

可以发现,这个保存下来的是RGB图像,三通道,然而我们的测试集和训练集mnist都是灰度图像,怎么办,简单,用matlab转

[html]  view plain  copy
  1. %存储二值图像  
  2. image=imread('009.png');  
  3. im=255-rgb2gray(image);  
  4. imshow(im)  
  5. imwrite(uint8(im),'./binarybmp/9.bmp');   
【注意】这里不要手动去save那个figure哦,不然图像会比28*28大,一定要用imwrite,并且格式为bmp

转换完毕的测试集:链接:http://pan.baidu.com/s/1o7NySMu 密码:bead

第七步

把转换好的二值图像拷贝到E:\CaffeDev-GPU\caffe-master\examples\mnist\

在E:\CaffeDev-GPU\caffe-master\examples\mnist下建立标签文件synset_words.txt:

[html]  view plain  copy
  1. 0  
  2. 1  
  3. 2  
  4. 3  
  5. 4  
  6. 5  
  7. 6  
  8. 7  
  9. 8  
  10. 9  


调用classification.exe去识别某张图片,E:\CaffeDev-GPU\caffe-master目录新建mnist_class.bat

[cpp]  view plain  copy
  1. E:\CaffeDev-GPU\caffe-master\Build\x64\Release\classification.exe E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet.prototxt E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet_iter_10000.caffemodel E:\CaffeDev-GPU\caffe-master\examples\mnist\mean.binaryproto E:\CaffeDev-GPU\caffe-master\examples\mnist\synset_words.txt E:\CaffeDev-GPU\caffe-master\examples\mnist\binarybmp\0.bmp  
  2. pause  

运行就会得到结果

caffe环境配置_第6张图片

【已解决】【笔者注】现在正在研究matlab的实现,在预处理部分卡住了,在模型中加入均值计算以及归一化以后,这两个操作有没有先后顺序,在matlab中先进行了减均值计算,发现数据分布有大于0和小于0的,如果直接除以255,肯定不可能归一化到[0,1],此法测试效果很差,肯定错了。如果采用mapminmax(A,0,1)归一化到[0,1],结果也是错的。如果有想法的同学请私密我一下,一起探讨一下matlab的实现

参考预处理代码详解:http://blog.csdn.net/langb2014/article/details/51050213

python的实现:http://www.dongcoder.com/detail-57212.html

你可能感兴趣的:(caffe环境配置)