邸亮,涂俊翔,禹杰
(福州大學 a.機械工程及自動化學院; b.機電工程實踐中心, 福建 福州 350108)
字符識別是自動抄表系統的核心技術之一。近年來,隨著深度學習的發展,研究人員已經提出了多種基于卷積神經網絡的字符識別算法,識別性能得到不斷改善。卷積神經網絡的優勢在于卷積層具有良好的自學習能力,并且識別的泛化能力優于傳統方法。
Lenet-5是由LECUN Y[1]提出的一個解決手寫體數字識別問題的卷積神經網絡,結構簡單且識別性能良好。此后研究人員對原網絡進行不斷地改進,提高識別的準確率和速度,并且還將改進的Lenet-5網絡應用于印刷體數字[2-3]、漢字[4]、單詞[5]以及植物[6]等識別問題中。
水表數字的識別屬于印刷體數字識別的一種,其特點是隨著字輪的轉動會在表盤數字區域出現半字符,而不完整數字的存在增加了識別的難度。目前,已有研究人員提出基于Lenet-5網絡的印刷體數字識別算法,例如街景門牌號[2]、車牌號碼[3]的識別,但未在水表數字識別中獲得有效的應用。相關學者對水表數字識別的研究主要是采用模板匹配[7]、特征匹配[8]以及神經網絡[9-10]等方法。高菊等[7]提出基于模板匹配與特征匹配相結合的水表數字識別算法,有效提高了識別精度,并且通過上下半字連續的待識別圖像與變字長模板進行匹配,實現半字符數字的識別。但文中算法過于繁瑣,降低了識別效率。尹遠等[8]利用方向梯度直方圖(histogram of oriented gradient,HOG)提取數字的特征信息,再用訓練好的支持向量機(support vector machine,SVM)進行分類識別。但文中未對表盤出現的半字符數字進行識別研究,難以獲得有效的應用。王長旭等[10]提出基于神經網絡的水表數字識別方法。通過兩個卷積神經網絡分別實現對數字完整字符和半字符的識別,識別準確率達到98%。但是對數字完整字符和半字符的識別需要用不同的神經網絡,過程較為冗雜。
本文在現有研究基礎上,為進一步改善水表半字符數字的識別問題,提高水表數字的識別精度,設計一種基于Lenet-5網絡組合特征融合的水表數字識別算法。
卷積神經網絡(convolutional neural network,CNN)是具有一定深度的前饋神經網絡,在訓練過程中通過監督學習調整網絡參數,實現對圖像分類或圖中目標的檢測。CNN的特點是通過卷積獲取圖像的局部特征,并在同一特征圖內共享卷積參數,因此可以有效地減少網絡參數,加速網絡的學習。CNN的基本結構主要包括輸入層、卷積層、池化層、全連接層及輸出層。
CNN的輸入通常為待識別的圖像,尺寸為h×w×d,其中h為圖像高度,w為圖像寬度,d為圖像的通道數,灰度圖像d為1,彩色圖像d為3。
卷積層由多個卷積核組成,通過卷積核在輸入圖像上的滑動,提取圖中的不同特征。其中卷積核的尺寸決定了輸出特征圖中每個像素點對應輸入圖像上映射區域的大小,該映射區域稱為感受野。卷積計算公式為
xij=f(Wij?xi-1+bij)
(1)
其中:xi-1表示上層特征圖;xij表示卷積核j對應的輸出特征圖;Wij表示第j個卷積核的權重參數;bij表示偏置值;?表示卷積運算;f表示激活函數。
池化層對特征圖進行信息過濾,實現縮減特征圖的尺寸[11],提高運算效率,增強特征的魯棒性。極大池化是常用的池化方法,以局部接受域內像素的最大值表示該區域。池化計算公式如下:
xi=Pooling(xi-1)
(2)
其中Pooling表示池化函數。
全連接層對提取到的特征進行非線性組合,整合所有的局部特征信息。對于圖像分類問題,通過歸一化指數函數進行分類,由輸出層輸出不同類別的概率值,概率值最大的即為圖像的分類標簽。
本文提出的基于Lenet-5網絡組合特征融合的水表數字識別算法主要包括原始圖像預處理、神經網絡的訓練和測試,算法流程如圖1所示。

圖1 算法流程圖
本文以水表機芯代替水表,便于獲取表中不同數字的圖像,機芯表盤如圖2所示。原始表盤圖像可能存在噪聲、污損等現象,而且數字區域周圍的陰影以及數字間高低位置的不同,造成數字分割和二值化過程較為復雜,處理不當會在圖中產生難以去除的噪聲或數字結構的缺失,影響后續識別的準確性。因此本文為了簡化表盤圖像預處理,采用原始彩色圖像作為數據集對卷積神經網絡進行訓練和測試。

圖2 表盤圖像
首先采用Hough圓檢測提取原始圖像中的表盤圓,將表盤與背景分割,然后通過Hough直線檢測提取數字區域邊框,根據邊框頂點的坐標從表盤圓分割出數字區域。由于數字滾輪寬度一致,采用等分策略分離數字,并對字符圖像進行仿射變換實現數據擴充,增加數據集的多樣性,提高網絡的魯棒性和泛化能力。半字符圖像表示流量示數介于二者之間,故以圖中較小數字命名圖像(9、0以9進行命名)。最后將字符圖像的尺寸統一調整為32×28,部分彩色字符圖像數據集如圖3所示。

圖3 彩色圖像集
改進的網絡模型如圖4所示。輸入層為字符圖像,圖像維度為32×28×3;卷積層有5個,分別采用尺寸為3×3、1×3、3×1的卷積核進行特征提取;池化層采用尺寸為2×2的窗口進行特征降維;全連接層輸入節點個數為660,輸出節點個數為10,分別對應數字0~9。池化層輸出經過線性整流激活函數(rectified linear unit,ReLU)去線性。

圖4 改進的網絡模型
根據文獻[12-13]所述,采用小尺寸的卷積核可以有效減少訓練參數,提高計算效率,因此本文以兩個卷積核為3×3的卷積層替換原網絡的第一卷積層。如圖5所示,替換后,特征圖中各點對應的感受野大小不變,而且前兩層卷積核均為6個,卷積1_2層的卷積核深度為6,獲取的特征圖中的組合特征信息更加豐富。

圖5 3×3卷積替換5×5卷積
此外,文獻[13]還指出當特征圖的尺寸在12~20之間時,用非對稱卷積核代替n×n的卷積核可以進一步減少訓練參數,同時保證網絡的識別性能。本文在第一次池化后采用1×3和3×1的卷積層替換原網絡第二卷積層,每層卷積核為16個。如圖6所示,替換后卷積生成的特征圖中每個像素點對應的感受野減小至3×3,像素點包含的全局信息減少而局部細節增多,有利于獲取更多的數字形狀特征,保證網絡準確地識別半字符數字。

圖6 非對稱卷積替換3×3卷積
本文在網絡結構的調整中發現,錯誤識別的圖像多數為半字符圖像,主要由于數字半字符的尺寸較小以及數字間部分結構的相似性所引起。在目標檢測網絡中常采用多尺度的特征圖融合方法提高對小目標檢測的準確性,本文對非對稱卷積前后的組合特征進行串接融合,并將融合特征圖再次通過3×3的卷積層提取特征,提升網絡對半字符的識別能力。
本文算法實驗環境為:Ubuntu操作系統、Python語言、Opencv等科學計算包,在TensorFlow深度學習框架下搭建神經網絡。通過預處理得到24 000張彩色字符圖像,其中完整字符和半字符圖像各12 000張,每個數字約2 400張圖像,并且按照5∶1的比例分成訓練集和測試集。訓練過程中,學習率為0.001 5,采用Adam算法優化訓練參數,迭代次數為10 000。
本文通過訓練過程交叉熵損失函數的收斂性和測試階段識別的準確性評估網絡的性能。在對原網絡的特征提取層進行優化后,訓練參數大大減少。從圖7中可以看出,改進網絡的損失函數收斂更快,迭代2 000次左右即可收斂至0值附近,并且隨著迭代次數的增加,損失函數穩定趨于0值。

圖7 損失函數
表1為原網絡與改進網絡的測試結果。原網絡對完整數字和半字符數字均產生錯誤識別,而改進后的網絡錯誤識別均為半字符圖像。圖8為改進網絡兩種典型的錯誤識別圖像,圖8(a)是將示數為9的圖像識別為3,此類錯讀產生的原因可能是網絡的迭代次數不足,本文將該類錯讀圖像用迭代次數為11 000的網絡重新進行識別,識別結果全部正確;圖8(b)是將示數為3的圖像識別為4,其中數字4處于圖像中間偏下位置,表明當前示數介于3~4之間,但圖中上半字符結構較小,難以區分,從而引起錯讀。

表1 Lenet-5與改進網絡的測試結果

圖8 錯誤識別的圖像
表2為本文算法與一些典型水表數字識別算法[7-9]在識別性能上的比較。改進網絡與原網絡對水表數字的識別時間基本相同,但網絡改進后識別準確率獲得明顯提高;模板匹配和特征匹配所設置的模板和特征個數少于CNN模型從數據集中提取的特征數目,BP神經網絡由于節點數和層數較少,無法獲取圖中較深層的特征,故識別準確率均低于本文算法。

表2 不同識別方法的準確率和識別時間
本文設計的基于Lenet-5網絡組合特征融合的水表數字識別算法,采用字符原圖進行訓練,對原網絡的卷積層進行優化,并且通過卷積特征圖的融合提高識別精度,保證有效地識別半字符。實驗表明,改進網絡的檢測效率高,迭代次數為10 000、學習率為0.001 5的改進網絡模型識別準確率達到99.025%,識別精度明顯高于其他水表數字識別算法,有效提高了自動抄表技術的可靠性。