caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)

准备数据集

http://yann.lecun.com/exdb/mnist/提供了训练集与测试集数据的下载。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第1张图片
但是caffe并不是直接处理这些数据,而是要转换成lmdb或leveldb格式进行读取。如何转换可以再去查阅相关资料,为简化步骤,直接给出下载地址:
链接:http://pan.baidu.com/s/1nv3a5LJ 密码:jvlt
数据集格式是leveldb。

进行训练

在正式开始训练之前,要先配置一些参数。
进入到配置caffe环境时编译caffe工程的目录。
1、打开目录下的 \examples\mnist 下的lenet_solver.prototxt。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第2张图片
更改最后的solver_mode,是CPU版本的填CPU,GPU版本的填GPU。

# The maximum number of iterations
max_iter: 10000

最大迭代次数为10000次,训练进行到10000次停止。

# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"

snapshot为中间过程文件,后面输出文件中包含了中间过程生成的caffelmodel文件。

2、接着打开 \examples\mnist 下的lenet_train_test.prototxt。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第3张图片
source指定到训练集存放的目录;
backend选择LEVELDB;

caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第4张图片
source指定到测试集存放的目录;
backend选择LEVELDB;

mnist的数据集存放目录在:\examples\mnist
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第5张图片

3、接下来可以开始训练了。
在编译caffe的工程根目录下编写bat脚本:
这里写图片描述

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

Build\x64\Release\caffe.exe:指定到caffe.exe所在目录,caffe.exe就是之前caffe工程编译后的可执行文件。
train:进行训练。
--solver=examples/mnist/lenet_solver.prototxt:lenet_solver.prototxt就是之前更改的配置文件。
编写完成后,保存,双击运行bat脚本。
caffe开始训练,首先会打印一些配置信息:
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第6张图片
我的电脑装的是GPU版本。
训练几分钟后结束。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第7张图片
CPU版本会慢一些,可能10多分钟,根据配置不同速度也不一样。
4、到\examples\mnist目录下查看生成的caffemodel文件。
这里写图片描述
文件后的参数指迭代次数。
迭代到5000次时根据当前的参数生成一个caffemodel文件,就是snapshot指定的参数。
10000次时最大迭代次数,即输出结果。
所以测试时,调用的是lenet_iter_10000.caffemodel文件。

测试结果

1、测试之前,还需要产生以下所有图片的均值文件。计算时,会将每幅图片减去这个均值,使用差进行分类。可以有更好的分类效果。
产生均值mean文件需要调用compute_image_mean.exe。
一般会在\Build\x64\Release下生成,如果没有,可以打开caffe的工程,选中对应的工程进行编译,就会产生compute_image_mean.exe。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第8张图片
这里写图片描述

在根目录编写bat脚本,调用compute_image_mean.exe生成均值文件。

Build\x64\Release\compute_image_mean.exe examples\mnist\mnist_train_leveldb mean.binaryproto --backend=leveldb
pause

caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第9张图片
生成的mean文件。
这里写图片描述

2、生成了mean文件后,可以使用caffe.exe调用训练好的模型识别手写数字了。
由于之前生成了mean文件,所以还要在lenet_train_test.prototxt中加上它。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第10张图片

caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第11张图片

在根目录编写bat脚本,调用caffe.exe识别手写数字。

Build\x64\Release\caffe.exe test --model=examples\mnist\lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel -gpu=0
pause

--model=examples\mnist\lenet_train_test.prototxt:指定配置,之前添加了mean文件进去。
-weights=examples\mnist\lenet_iter_10000.caffemodel:指定训练好的模型。
-gpu=0:加上表示使用gpu,如果不是gpu版的去掉这个就可以了。

保存bat脚本,双击运行。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第12张图片
看accuracy知道,准确率不是很高。

3、自己手写数字来进行识别,可以使用画图工具绘制。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第13张图片
使用matlab编写简单程序将三通道的图像转换成二值图像。
相关步骤可以参考下面这个博客:
http://blog.csdn.net/zb1165048017/article/details/52217772
不做赘述。

我们得到的图片放到一个方便找到的目录吧,我就直接放到\examples\mnist目录下了。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第14张图片

编写bat脚本文件,调用classification.exe,没有的自己在编译caffe的visual studio项目里找到对应工程编译下就有了。

Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\0.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\1.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\2.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\3.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\4.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\5.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\6.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\7.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\8.bmp
Build\x64\Release\classification.exe examples\mnist\lenet.prototxt examples\mnist\lenet_iter_10000.caffemodel mean.binaryproto examples\mnist\synset_words.txt examples\mnist\9.bmp
pause

识别效果不是很好,可能训练的迭代次数还是少了,有待改进。
caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)_第15张图片

你可能感兴趣的:(caffe)