caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)
準備數據集
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。
最大迭代次數為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:指定到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
生成的mean文件。
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識別效果不是很好,可能訓練的迭代次數還是少了,有待改進。
總結
以上是生活随笔為你收集整理的caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caffe学习(一):开发环境搭建,编译
- 下一篇: caffe学习(三):caffe开发环境