http://yann.lecun.com/exdb/mnist/提供了训练集与测试集数据的下载。
但是caffe并不是直接处理这些数据,而是要转换成lmdb或leveldb格式进行读取。如何转换可以再去查阅相关资料,为简化步骤,直接给出下载地址:
链接:http://pan.baidu.com/s/1nv3a5LJ 密码:jvlt
数据集格式是leveldb。
在正式开始训练之前,要先配置一些参数。
进入到配置caffe环境时编译caffe工程的目录。
1、打开目录下的 \examples\mnist 下的lenet_solver.prototxt。
更改最后的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。
source指定到训练集存放的目录;
backend选择LEVELDB;
source指定到测试集存放的目录;
backend选择LEVELDB;
mnist的数据集存放目录在:\examples\mnist
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开始训练,首先会打印一些配置信息:
我的电脑装的是GPU版本。
训练几分钟后结束。
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。
在根目录编写bat脚本,调用compute_image_mean.exe生成均值文件。
Build\x64\Release\compute_image_mean.exe examples\mnist\mnist_train_leveldb mean.binaryproto --backend=leveldb
pause
2、生成了mean文件后,可以使用caffe.exe调用训练好的模型识别手写数字了。
由于之前生成了mean文件,所以还要在lenet_train_test.prototxt中加上它。
在根目录编写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脚本,双击运行。
看accuracy知道,准确率不是很高。
3、自己手写数字来进行识别,可以使用画图工具绘制。
使用matlab编写简单程序将三通道的图像转换成二值图像。
相关步骤可以参考下面这个博客:
http://blog.csdn.net/zb1165048017/article/details/52217772
不做赘述。
我们得到的图片放到一个方便找到的目录吧,我就直接放到\examples\mnist目录下了。
编写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