【Caffe学习01】在Caffe中trian MNIST

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AkashaicRecorder/article/details/71379610

在上次搭建好Caffe环境的基础上我们进行第一次实验,将Caffe自带的一个Mnist example跑一跑,对其在处理图像方面的能力有个初步了解。

如果还没有搭建好环境的朋友可以看看我的上一篇文章:
http://blog.csdn.net/AkashaicRecorder/article/details/71016942

MNIST简介

MNIST手写数字数据库是另外一个更大的手写体数据库NIST的子集,现在已成为图像识别领域用来测试自己的算法的一个基准数据库,它的训练集由60000张手写数字图片样本组成,测试集包含了10000个样本,其中所有的图片样本都经过了尺寸标准化和中心化,图片的大小固定为28*28。对于想要在实际数据上学习技巧和学习模式识别方法的人来说,这是一个很好的数据库,同时减少了人们在对素材进行预处理和格式化方面花费的时间。

以下是官网原文的描述:

The MNIST database of handwritten digits, available from this page, has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image.
It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting.


官网地址,你可以在这里下载用于训练的数据集:
http://yann.lecun.com/exdb/mnist/

这里写图片描述


生成需要的文件及使用训练好的模型进行识别

1.要使用这个训练集,你需要编译以下几个项目并使用它们生产的exe

这里写图片描述

2.将之前在minist官网下载好的训练集解压并放到指定目录下,
注意一定要放到你caffe工程的data\minist目录下,不然后面会执行文件报错

(PS:由于我们是windows系统执行不了get_mnist.sh这个shell文件,直接去官网下载包放到指定目录可以达到相同的效果)

这里写图片描述

这里写图片描述

3.在..\caffe\build\examples\mnist目录下新建bat文件夹并创建如下bat文件

这里写图片描述

下面我们一一来解释它们分别的作用:

convert_train_lmdb.bat

F:\OpenSource\caffe\build\examples\mnist\Release\convert_mnist_data.exe 
::train-images训练图片路径
F:\OpenSource\caffe\data\mnist\train-images.idx3-ubyte 
::训练标签路径
F:\OpenSource\caffe\data\mnist\train-labels.idx1-ubyte 
::训练出来的lmdb文件存放的位置
F:\OpenSource\caffe\data\mnist\lmdb\train_lmdb
pause

注:

Caffe生成的数据分为2种格式:Lmdb和Leveldb 它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。 虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。 因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。

也就是说,这个程序的作用是为了将原始图片素材和标签对应转换成caffe中能够运行的lmdb文件。


convert_test_lmdb.bat

F:\OpenSource\caffe\build\examples\mnist\Release\convert_mnist_data.exe 
F:\OpenSource\caffe\data\mnist\t10k-images.idx3-ubyte F:\OpenSource\caffe\data\mnist\t10k-labels.idx1-ubyte F:\OpenSource\caffe\data\mnist\lmdb\test_lmdb
pause

同上,convert_train_lmdb.bat是为了转换用于训练的lmdb文件这个则是为了转换用于测试的lmdb文件

注意,用于生产存放lmdb文件的文件夹一定要是不存在的,不然执行bat会报错——处理程序停止响应

执行完以上两个后,我们发现caffe\data\mnist\lmdb里多了两个文件夹

这里写图片描述


train.bat

F:\OpenSource\caffe\build\tools\Release\caffe.exe train -solver=F:/OpenSource/caffe/examples/mnist/lenet_solver.prototxt
pause

训练模型生成迭代model文件

这里写图片描述

必需文件》》》

一、网络模型文件 lenet_train_test.prototxt

位于caffe\examples\mnist

二、训练超参数文件 lenet_solver.prototxt

在 lenet_train_test.prototxt修改
TRAIN source路径为训练图片的lmdb文件路径
TEST source路径为测试图片的lmdb文件路径

这里写图片描述

在 lenet_solver.prototxt中修改
net的path为网络模型文件 lenet_train_test.prototxt的地址,
snapshot_prefix为生产训练模型的地址caffe\data\mnist\model

如果snapshot_prefix不指定,模型文件将会默认生成在train.bat同级文件夹下

这里写图片描述

迭代模型训练时间根据计算机性能决定,一般在15——45分钟

这里写图片描述

模型生产成功即意味着可以使用它来识别图片


mnist_mean.bat

F:\OpenSource\caffe\build\tools\Release\compute_image_mean.exe F:\OpenSource\caffe\data\mnist\lmdb\train_lmdb F:\OpenSource\caffe\data\mnist\mean_file\mean.binaryproto
pause

mean_file需要自己创建,用于存放计算均值文件mean.binaryproto

这里写图片描述

平均归一化训练出来的图像对识别结果有提升,所以要使用该方法计算出 训练/测试数据的平均图像。且求平均图像的方法是直接从LevelDB或者LMDB数据库里面直接读取出来的,而不是直接用图像数据库里面求出,所以要提供train_lmdb 路径,才能求平均图像。

mnist_classification.bat

::分类执行文件
F:\OpenSource\caffe\build\examples\cpp_classification\Release\classification.exe
::网络模型配置文件,暂时不用改
F:\OpenSource\caffe\examples\mnist\lenet.prototxt
::训练好的Caffe Model模型
F:\OpenSource\caffe\data\mnist\model\_iter_10000.caffemodel
::均值文件的路径
F:\OpenSource\caffe\data\mnist\mean_file\mean.binaryproto
::训练图像label标签
F:\OpenSource\caffe\data\mnist\mnist_lable.txt
::要测试的图片文件
F:\OpenSource\caffe\data\mnist\binarybmp\XXX.bmp
pause
mnist_lable.txt要怎么写?

这里写图片描述

这里可以下载用于测试的Mnist图片库
http://pan.baidu.com/s/1hrXYLLi

执行mnist_classification.bat
显示出识别结果

源图片:

这里写图片描述

识别结果

这里写图片描述

第一行显示的是该图片为0的概率,可以看到它成功的识别出了数字0,经测试,这个模型识别数字的准确率大概为90%

下一次,我们将详细解析模型分析出这样结果的原因,及如何进一步提高识别率

猜你喜欢

转载自blog.csdn.net/AkashaicRecorder/article/details/71379610