廣州番禺職業技術學院 戴錦霞 楊 鵬 劉 攀
數字識別在計算機視覺與圖像識別領域得到了廣泛的應用,深度學習算法是目前流行的圖像識別算法。基于Caffe的印刷體數字識別方法能準確識別印刷體數字。通過詳細介紹此方法的具體實驗過程及注意事項,供后續基于深度學習的字符識別等相關領域實現提供參考。
圖像識別是計算機視覺領域的一項基礎研究。隨著互聯網的快速發展,圖像識別技術在各個領域中發揮著日益重要的作用。數字識別是一種典型的圖像識別,在身份證號碼、發票、體檢單等識別領域均利用其進行數字信息精準提取,提高工作效率。
目前主流的深度學習方法其特征提取不需要人工參與,速度快,準確率高。卷積神經網絡是深度學習的算法之一,而Caffe是一個計算卷積神經網絡相關算法的深度學習框架,該框架清晰、可讀性高、快速,因此利用Caffe進行印刷體數字識別是目前提高數字識別準確率的一種行之有效的辦法。其實現過程主要包括數據預處理、Caffe網絡定義并訓練、識別測試這三大步驟。
Caffe是目前深度學習比較主流且優秀的一個開源卷積神經網絡算法框架。它采用純C++語言與CUDA實現,同時支持Python、命令行與MATLAB接口。可在CPU和GPU處理器之間實現流暢切換,易擴展,在圖像分類、字符識別、語音識別等多個領域得到廣泛的應用。
實驗測試的樣本集是選用印刷體數字0—9,每個數字的訓練樣本數量分別為240、測試樣本為40,圖像尺寸大小統一為64×64(圖1所示)。

圖1 印刷體數字圖像
把測試圖像、訓練圖像進行簡單的預處理,然后保存到數據庫中。因為實際任務中訓練數據的數量可能非常大,從圖像文件中讀取數據并進行初始化的效率是非常低的,所以很有必要把數據預先保存在數據庫中,來加快訓練的速度。
(1)生成train.txt、val.txt文件
利用MATLAB軟件或采用 bat 命令快速對訓練數據集圖片進行圖片序號編碼,并將訓練圖像數據的路徑、名稱、標簽一起寫入train.txt文件中(圖2所示)。利用同樣的方式將測試圖像數據的路徑、名稱、標簽一起寫入val.txt文件中 。

圖2 train.txt文件生成
(2)生成trainldb文件、valldb數據庫文件
然后將訓練的參數和路徑寫入bat 文件,調用convert_imageset.exe 生成對應的 leveldb 格式數據。執行bat 文件,生成trainldb文件。同樣的處理得到valldb文件。
(3)生成訓練、測試兩個均值文件
計算訓練、測試圖像數據的均值,編寫bat文件調用compute_image_mean.exe,生成兩個均值文件train_mean.binaryproto與val_mean.binaryproto。
當前電腦已安裝配置好的caffe前提下,找到caffe自帶的例子,即對mnist手寫體數字訓練使用的卷積神經網絡,打開examples/mnist文件夾下的兩個文件lenet_solver.prototxt、lenet_train_test.prototxt進行參數修改(圖3、圖4所示)。

圖3 lenet_train_test.prototxt參數修改

圖4 lenet_solver.prototxt參數修改
編寫bat文件,調用caffe.exe執行訓練。經過一段時間的訓練,命令行產生了大量日志,訓練過程也完成,生成了caffe模型如圖5所示。

圖5 caffe模型
利用windows自帶的畫板繪制64*64的印刷體數字圖像(圖6所示)。編寫python測試代碼,調用生成的Caffe模型,對印刷體數字進行識別測試。識別結果如圖7所示,能準確識別出正確數字結果。

圖6 待測試的數字圖像

圖7 識別結果
測試過程中如果出現“no module name _caffe”問題,解決方法:
在環境變量中添加路徑E:caffe caffe-masterBuildx64Releasepycaffe。
如果出現“import caffe no module named google.protobuf.internal”問題,解決方法:
(1)下載protobuf(地址:https:// github. com/google/protobuf/releases/tag/v3.0.0),下載兩個版本,一個protoc-3.0.0-win32.zip,一個源碼。
(2)將protoc-3.0.0-win32inprotoc.exe拷貝進入源代碼文件夾下src中,進入源代碼文件夾下Python文件夾,進入cmd環境執行python setup.py build。
(3)將protobuf-3.0.0python路徑下的文件google拷貝到自己原先安裝的Python路徑Libsite-packages下,這樣再次運行就不會報錯了。
針對傳統印刷體數字識別準確率低、速度慢等問題,提出基于Caffe的印刷體數字識別方法。詳細介紹了其相關實驗過程、實驗結果及注意事項。為后續基于深度學習的字符識別提供解決思路。