caffe之利用mnist数据集训练好的lenet_iter_10000.caffemodel模型测试一张自己的手写体数字

原文:http://blog.csdn.net/xunan003/article/details/73126425

其他参考文章:http://blog.csdn.net/jiongnima/article/details/52681816?locationNum=11&fps=1http://


一、前沿

        写这篇博文,是因为一开始在做《21天学习caffe》第6天6.4练习题1的时候看着自己搜索的博文,在不理解其根本的情况下做的,结果显然是错的。在接下来阅读完源代码之后,在第10天学习完caffe model zoo之后,明白了其中原理,反过来再去做那个习题,一开始在网上搜索并没有完完整整解释整个过程的一篇博文,而是写的不知所云,本着我们初学者互相共享的精神,也方便自己查阅,特详细写一下,将自己的一张手写体图片送入训练好的caffemodels中测试这个过程,博主也是在仿照参考书目的命令来逐项百度每个文件的制作方法,最终成功。结果还是比较美好的。接下来,就让我们一起来看看ubuntu下手写体数字的测试情况。 

二、具体步骤    

1、首先我们要知道要利用模型lenet_iter_10000.caffemodel测试单张手写体数字所需要的文件:
      1>待测试图片(自己画的也行,网络上下的也行,楼主是在自己windows系统下用画图工具画的并命名为3.jpg,当然你如果愿意也可以弄成.dmp,.png等其他格式);

                    

这是博主自己画的图片

         需要注意的是,不管是什么格式,都要转换为28*28大小的黑白灰度图像,具体转化方法请自行百度(我是就拿windows自带的画图工具转化的)。因为

         mnist数据集都是28*28的单通道黑白灰度图像。

     2>deploy.prototxt(模型描述型文件);具体生成方法下面我们解释。

     3>network.caffemodel(模型权值文件);在本例中就是lenet_iter_10000.caffemodel

     4>labels.txt(标签文件);生成方法一会儿描述

     5>mean.binaryproto(二进制图像均值文件);生成方法下面描述(类似的还有python下的均值文件mean.pny我们这里不做考虑,想去尝试的可以自己尝试)

     6>classification.bin(二进制程序名)。与二进制均值文件配合使用,只是均值文件不同的模型有不同的均值文件,而这个bin文件为通用的,就是任何模型都

         可以做分类使用。但是如果采用python借口模式的测试就要自己再做一个classification分类文件,具体方法下面解释的时候给链接。

2、步骤1:生成待测试图片

     具体要求在1中已有说明,这里不做过多阐述。如还有人不懂如何做图请自行百度。

3、步骤2:生成deploy.prototxt文件

     要了解deploy.prototxt文件的作用请自行百度或google,这里我们需要知道的是,他和lenet_train_test.prototxt文件类似,或者说对后者改动可得到前者。在熟悉生成文件的原理及方法之后我们可以之间在原训练prototxt网络文件中改动。在examples/mnist目录下复制一份lenet_train_test.prototxt修改并保存后得到deploy.prototxt如下:

  1. name: "LeNet"    
  2.   
  3.      
  4. layer {    
  5.   name:"data"    
  6.  type: "Input"    
  7.  top: "data"    
  8.  input_param { shape: { dim: 1 dim: 1 dim: 28 dim: 28 } }    
  9. }    
  10.      
  11.     
  12. layer {    
  13.   name:"conv1"    
  14.  type: "Convolution"    
  15.  bottom: "data"    
  16.  top: "conv1"    
  17.  convolution_param {    
  18.    num_output: 20    
  19.    kernel_size: 5    
  20.    stride: 1    
  21.    weight_filler {    
  22.      type: "xavier"    
  23.    }    
  24.  }    
  25. }    
  26. layer {    
  27.   name:"pool1"    
  28.  type: "Pooling"    
  29.  bottom: "conv1"    
  30.  top: "pool1"    
  31.  pooling_param {    
  32.    pool: MAX    
  33.    kernel_size: 2    
  34.    stride: 2    
  35.   }    
  36. }    
  37. layer {    
  38.   name:"conv2"    
  39.  type: "Convolution"    
  40.  bottom: "pool1"    
  41.  top: "conv2"    
  42.  convolution_param {    
  43.    num_output: 50    
  44.    kernel_size: 5    
  45.    stride: 1    
  46.    weight_filler {    
  47.      type: "xavier"    
  48.    }    
  49.  }    
  50. }    
  51. layer {    
  52.   name:"pool2"    
  53.  type: "Pooling"    
  54.  bottom: "conv2"    
  55.  top: "pool2"    
  56.  pooling_param {    
  57.    pool: MAX    
  58.    kernel_size: 2    
  59.    stride: 2    
  60.   }    
  61. }    
  62. layer {    
  63.   name:"ip1"    
  64.  type: "InnerProduct"    
  65.  bottom: "pool2"    
  66.  top: "ip1"    
  67.  inner_product_param {    
  68.    num_output: 500    
  69.    weight_filler {    
  70.      type: "xavier"    
  71.    }    
  72.  }    
  73. }    
  74. layer {    
  75.   name:"relu1"    
  76.  type: "ReLU"    
  77.  bottom: "ip1"    
  78.  top: "ip1"    
  79. }    
  80. layer {    
  81.   name:"ip2"    
  82.  type: "InnerProduct"    
  83.  bottom: "ip1"    
  84.  top: "ip2"    
  85.  inner_product_param {    
  86.    num_output: 10    
  87.    weight_filler {    
  88.      type: "xavier"    
  89.    }    
  90.  }    
  91. }    
  92.      
  93.    
  94. layer {    
  95.   name:"prob"    
  96.  type: "Softmax"    
  97.  bottom: "ip2"    
  98.  top: "prob"    
  99. }    
     pass:具体利用python生成deploy.prototxt文件请参看博文:点击博文地址

4、步骤3:生成labels.txt标签文件

     在当前目录下新建一个txt文件,命名为synset_words.txt,里面内容为我们训练mnist的图片内容,共有0~9十个数,那么我们就建立如下内容的标签文件:

5、步骤4:生成mean.binaryproto二进制均值文件

     均值文件分为二进制均值文件和python类均值文件。因为博主还未配置python接口,故未采用python方法,这也是之前一直出错的原因。

     生成均值文件的两种方法请参看博文:点击博文链接

     caffe作者为我们提供了一个计算均值的文件compute_image_mean.cpp,放在caffe根目录下的tools文件夹里面,运行下面命令生成mean.binaryproto二进制均值文件。

  1. sudo build/tools/compute_image_mean examples/mnist/mnist_train_lmdb examples/mnist/mean.binaryproto  

     生成的mean.binaryproto均值文件保存在了examples/mnist目录下。

6、步骤5:分类器classification.bin(windows下caffe为classification.exe)

       在example文件夹中有一个cpp_classification的文件夹,打开它,有一个名为classification的cpp文件,这就是caffe提供给我们的调用分类网络进行前向计算,得到分类结果的接口。就是这个文件在命令中会得到classification.bin,具体我们可以不用管它,在其他caffemodel下不用修改也可以用,不像均值文件,不同的模型需要不同的均值文件。

       需要详细了解classification请参看博文(或其他资料):点击博文链接

       如果是按照python接口方法做此测试,均值文件及分类classification以及测试过程请参看博文:点击博文链接

7、步骤6:准备测试

      万事具备,只欠东风。下面我们就在caffe根目录下命令:

  1. ./build/examples/cpp_classification/classification.bin examples/mnist/deploy.prototxt examples/mnist/lenet_iter_10000.caffemodel examples/mnist/mean.binaryproto examples/mnist/synset_words.txt examples/images/3.jpg   
      读者也可以根据你们自己建立的文件的具体位置更改路径,这个相信我不用多说。
      下面看看我们的测试结果吧!

     

三、参考博文

           参考博文链接:http://blog.csdn.net/jiongnima/article/details/52681816?locationNum=11&fps=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值