廣州番禺職業(yè)技術(shù)學(xué)院 戴錦霞 楊 鵬 劉 攀
數(shù)字識別在計(jì)算機(jī)視覺與圖像識別領(lǐng)域得到了廣泛的應(yīng)用,深度學(xué)習(xí)算法是目前流行的圖像識別算法。基于Caffe的印刷體數(shù)字識別方法能準(zhǔn)確識別印刷體數(shù)字。通過詳細(xì)介紹此方法的具體實(shí)驗(yàn)過程及注意事項(xiàng),供后續(xù)基于深度學(xué)習(xí)的字符識別等相關(guān)領(lǐng)域?qū)崿F(xiàn)提供參考。
圖像識別是計(jì)算機(jī)視覺領(lǐng)域的一項(xiàng)基礎(chǔ)研究。隨著互聯(lián)網(wǎng)的快速發(fā)展,圖像識別技術(shù)在各個(gè)領(lǐng)域中發(fā)揮著日益重要的作用。數(shù)字識別是一種典型的圖像識別,在身份證號碼、發(fā)票、體檢單等識別領(lǐng)域均利用其進(jìn)行數(shù)字信息精準(zhǔn)提取,提高工作效率。
目前主流的深度學(xué)習(xí)方法其特征提取不需要人工參與,速度快,準(zhǔn)確率高。卷積神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)的算法之一,而Caffe是一個(gè)計(jì)算卷積神經(jīng)網(wǎng)絡(luò)相關(guān)算法的深度學(xué)習(xí)框架,該框架清晰、可讀性高、快速,因此利用Caffe進(jìn)行印刷體數(shù)字識別是目前提高數(shù)字識別準(zhǔn)確率的一種行之有效的辦法。其實(shí)現(xiàn)過程主要包括數(shù)據(jù)預(yù)處理、Caffe網(wǎng)絡(luò)定義并訓(xùn)練、識別測試這三大步驟。
Caffe是目前深度學(xué)習(xí)比較主流且優(yōu)秀的一個(gè)開源卷積神經(jīng)網(wǎng)絡(luò)算法框架。它采用純C++語言與CUDA實(shí)現(xiàn),同時(shí)支持Python、命令行與MATLAB接口。可在CPU和GPU處理器之間實(shí)現(xiàn)流暢切換,易擴(kuò)展,在圖像分類、字符識別、語音識別等多個(gè)領(lǐng)域得到廣泛的應(yīng)用。
實(shí)驗(yàn)測試的樣本集是選用印刷體數(shù)字0—9,每個(gè)數(shù)字的訓(xùn)練樣本數(shù)量分別為240、測試樣本為40,圖像尺寸大小統(tǒng)一為64×64(圖1所示)。
圖1 印刷體數(shù)字圖像
把測試圖像、訓(xùn)練圖像進(jìn)行簡單的預(yù)處理,然后保存到數(shù)據(jù)庫中。因?yàn)閷?shí)際任務(wù)中訓(xùn)練數(shù)據(jù)的數(shù)量可能非常大,從圖像文件中讀取數(shù)據(jù)并進(jìn)行初始化的效率是非常低的,所以很有必要把數(shù)據(jù)預(yù)先保存在數(shù)據(jù)庫中,來加快訓(xùn)練的速度。
(1)生成train.txt、val.txt文件
利用MATLAB軟件或采用 bat 命令快速對訓(xùn)練數(shù)據(jù)集圖片進(jìn)行圖片序號編碼,并將訓(xùn)練圖像數(shù)據(jù)的路徑、名稱、標(biāo)簽一起寫入train.txt文件中(圖2所示)。利用同樣的方式將測試圖像數(shù)據(jù)的路徑、名稱、標(biāo)簽一起寫入val.txt文件中 。
圖2 train.txt文件生成
(2)生成trainldb文件、valldb數(shù)據(jù)庫文件
然后將訓(xùn)練的參數(shù)和路徑寫入bat 文件,調(diào)用convert_imageset.exe 生成對應(yīng)的 leveldb 格式數(shù)據(jù)。執(zhí)行bat 文件,生成trainldb文件。同樣的處理得到valldb文件。
(3)生成訓(xùn)練、測試兩個(gè)均值文件
計(jì)算訓(xùn)練、測試圖像數(shù)據(jù)的均值,編寫bat文件調(diào)用compute_image_mean.exe,生成兩個(gè)均值文件train_mean.binaryproto與val_mean.binaryproto。
當(dāng)前電腦已安裝配置好的caffe前提下,找到caffe自帶的例子,即對mnist手寫體數(shù)字訓(xùn)練使用的卷積神經(jīng)網(wǎng)絡(luò),打開examples/mnist文件夾下的兩個(gè)文件lenet_solver.prototxt、lenet_train_test.prototxt進(jìn)行參數(shù)修改(圖3、圖4所示)。
圖3 lenet_train_test.prototxt參數(shù)修改
圖4 lenet_solver.prototxt參數(shù)修改
編寫bat文件,調(diào)用caffe.exe執(zhí)行訓(xùn)練。經(jīng)過一段時(shí)間的訓(xùn)練,命令行產(chǎn)生了大量日志,訓(xùn)練過程也完成,生成了caffe模型如圖5所示。
圖5 caffe模型
利用windows自帶的畫板繪制64*64的印刷體數(shù)字圖像(圖6所示)。編寫python測試代碼,調(diào)用生成的Caffe模型,對印刷體數(shù)字進(jìn)行識別測試。識別結(jié)果如圖7所示,能準(zhǔn)確識別出正確數(shù)字結(jié)果。
圖6 待測試的數(shù)字圖像
圖7 識別結(jié)果
測試過程中如果出現(xiàn)“no module name _caffe”問題,解決方法:
在環(huán)境變量中添加路徑E:caffe caffe-masterBuildx64Releasepycaffe。
如果出現(xiàn)“import caffe no module named google.protobuf.internal”問題,解決方法:
(1)下載protobuf(地址:https:// github. com/google/protobuf/releases/tag/v3.0.0),下載兩個(gè)版本,一個(gè)protoc-3.0.0-win32.zip,一個(gè)源碼。
(2)將protoc-3.0.0-win32inprotoc.exe拷貝進(jìn)入源代碼文件夾下src中,進(jìn)入源代碼文件夾下Python文件夾,進(jìn)入cmd環(huán)境執(zhí)行python setup.py build。
(3)將protobuf-3.0.0python路徑下的文件google拷貝到自己原先安裝的Python路徑Libsite-packages下,這樣再次運(yùn)行就不會(huì)報(bào)錯(cuò)了。
針對傳統(tǒng)印刷體數(shù)字識別準(zhǔn)確率低、速度慢等問題,提出基于Caffe的印刷體數(shù)字識別方法。詳細(xì)介紹了其相關(guān)實(shí)驗(yàn)過程、實(shí)驗(yàn)結(jié)果及注意事項(xiàng)。為后續(xù)基于深度學(xué)習(xí)的字符識別提供解決思路。