郭小燕,陳 鵬,,張 明,張綠云,馬楚奇
(1.甘肅農業大學 信息科學技術學院,甘肅 蘭州 730070;2.河池學院 大數據與計算機學院,廣西 宜州 546300;3.蘭州城市學院 信息工程學院,甘肅 蘭州 730070)
支付寶、微信等第三方快捷支付方式的快速發展對傳統銀行卡支付業務帶來極大挑戰,銀行卡號數字自動識別技術可提高銀行卡支付效率及便捷性,使其更好地參與市場競爭[1]。由于圖像的背景、光照、對比度等因素會對圖像的識別效率和準確率造成干擾,且Sigmoid 激活函數在神經網絡的梯度反向傳遞時易產生梯度爆炸或梯度消失問題。鑒于此,本文提出基于改進PCA_CNN 的銀行卡號識別模型,旨在提高抗干擾能力,緩解梯度消失問題。
卷積神經網絡憑借其優越的性能備受廣大學者關注,并成為當下研究熱點,其已在圖像識別領域取得系列研究成果。李尚林等[2]提出基于卷積神經網絡(CNN)的銀行卡數字識別框架,能顯著提高銀行卡數字識別準確率。黃睿等[3]利用Tensorflow 框架搭建CNN 網絡實現手寫數字識別,其準確率高于傳統Softmax 模型。Druki 等[4]提出七層卷積神經網絡模型以提高復雜背景下的圖像識別效率。Gao 等[5]提出DCNN 深度學習模型以增強圖像目標識別的自動特征提取能力。
以上研究均得較好效果,但由于卷積神經網絡的參數量極大,卷積核需依靠大量學習確定,將造成時間和算力浪費。本文使用改進PCA_CNN 的銀行卡識別模型,利用PCA算法選取CNN卷積核,與傳統CNN網絡通過反復迭代獲取卷積核相比,PCA_CNN 極大縮短了學習訓練時間,解決了傳統CNN 在特定時間內識別準確率不高和收斂速度不足的問題,從而提升網絡整體性能。為進一步提高識別效果,本文對傳統的Sigmoid 函數進行改進,防止網絡隨卷積層數增加而出現過擬合,從而導致權重無法更新。采用自然光下手機拍攝的2 000 張銀行卡照片對PCA_CNN 網絡模型進行測試,證明改進PCA_CNN 的模型能對銀行卡號進行有效自動識別,為銀行卡便捷支付提供技術保障。
在實際支付過程中,由于銀行卡可能存在破損、折痕、污點、字跡不清晰等情況,且拍攝時可能出現光線較暗、曝光過度、手機抖動等問題,因此銀行卡圖像常常含有噪聲,會對圖像識別造成干擾,故將數據送入識別程序之前,應進行預處理以保證識別質量。
對圖像進行灰度化操作可降低干擾因素,使銀行卡數字輪廓更清晰,減少網絡計算量,提高運算效率[6]。圖像灰度化處理可采用最大值法[7]、平均值法[8]、加權平均法[9]。由于加權平均法可最大程度降低干擾,對圖像進行灰度化處理的同時能夠實現圖像增強,且能夠清晰有效地提取銀行卡數字輪廓,故本文采用該方法進行圖像灰度化處理。以上3種方法圖像識別對比效果如圖1所示。

Fig.1 Graying effect of image圖1 圖像灰度化效果
銀行卡圖像中,除卡號區域外,還有其他圖案、銀行logo,銀聯標識等區域,因此在銀行卡圖像中有效提取卡號區域是后期對卡號識別的關鍵步驟。針對卡號區域提取,設計的區域鎖定法可對卡號區域精準提取分割,主要步驟如下:
(1)提取銀行卡輪廓。采用王文豪等[10]改進的Canny算法提取銀行卡輪廓,結果如圖2所示。

Fig.2 Image contour extraction圖2 圖像輪廓提取
(2)區域填充。在輪廓提取基礎上,使用日本學者大津展之在1979 年提出的最大類間方差法(OTSU)[11]進行二值化處理,用形態學閉操作消除輪廓中的黑色部分,并填充閉合區域,將銀行卡數字區域連接作為待選卡號區域,結果如圖3所示。
(3)卡號提取。利用水平和垂直投影獲取銀行卡四周邊界,采用區域鎖定法獲取數據區域,從而獲取銀行卡號,流程如圖4所示。

Fig.3 Using OTSU to select the bank card number area圖3 使用OTSU選取銀行卡號區域

Fig.4 Flow of bank card number area locking圖4 銀行卡號區域鎖定流程
依據銀行卡鎖定區域與已提取邊緣輪廓的銀行卡圖像進行重疊對比,裁剪出數字組區域圖像,如圖5所示。

Fig.5 Partial bank card digital area cutting characters圖5 部分銀行卡數字區域切割字符
在CNN 訓練過程中,初始權重隨機生成,因此在迭代次數有限時不能迅速找到誤差收斂方向,從而影響收斂速度與精度[12]。Chan 等[13]提出利用PCA 選取CNN 卷積核的網絡PCANet,可大幅度提高訓練速度。本文基于PCANet 設計用于銀行卡識別的PCA_CNN 模型,以獲得更優識別結果,如圖6所示。

Fig.6 Flow of improved PCA_CNN algorithm圖6 改進的PCA_CNN算法流程
(1)卷積核確定。假定輸入尺寸為m×n,對于其進行t=k×k塊采樣得到s=(n-k+1) × (m-k+1)個圖像塊,將每個圖像塊連接成一個t*s矩陣,利用PCA 獲得前l1個特征向量,作為后續卷積運算的卷積核,如圖7所示。

Fig.7 Selection of convolution kernel圖7 卷積核選取
(2)兩階段卷積。在PCA_CNN 模型中,共經歷兩階段卷積,卷積核個數分別為l1 和l2,因此,單個輸入圖像經過兩次卷積后,變成l1 ×l2個特征圖。
第一階段:通過塊采樣及PCA 選取的特征矩陣作為第一階段卷積核,如圖8所示。

Fig.8 The first stage convolution圖8 第一階段卷積
第二階段:對第一階段卷積獲得的l1個特征圖進行塊采樣,通過PCA 獲得l2 個特征矩陣,作為第二階段卷積核進行卷積運算,每個輸入圖像均得到l1 ×l2 個特征圖,如圖9所示。

Fig.9 The second stage convolution圖9 第二階段卷積
將卷積所得特征圖的每一個像素進行二值化處理,然后將l1 ×l2 個特征圖分成l1 個組,組內的l2 個圖像堆疊起來,每l2 個(0,1)像素組成一個0-2l2-1的十進制哈希編碼。
使每張哈希編碼后的特征圖分成B 個塊并統計其直方圖,然后將第i副輸入圖像中第j副特征圖對應的直方圖組成標記為Bhis(t)(1 ≤j≤l1)的向量,輸入圖像fi對應的圖像特征如式(1)所示。
其中,Bhist()表示將第i副輸入圖像中第l1 副特征圖所對應直方圖組成的向量,其標記為Bhis(t)(1 ≤j≤l1)。
分析識別階段主要對已提取特征的圖像進行數字識別,如圖10所示。

Fig.10 Improved convolutional neural network model圖10 改進的卷積神經網絡模型
(1)輸入層。為保障最終分類識別準確率及收斂時間,將預處理后的銀行卡號數字圖像作為輸入,并設置輸入層圖像大小為28*28。
(2)卷積層C1。對銀行卡號輸入矩陣進行卷積運算。利用卷積操作提取原始圖像特征,使用PCA 產生的16 個卷積核對每幅輸入圖像進行卷積運算生成16 個大小為28*28 的特征圖。為增強模型表達力及緩解神經網絡中梯度反向傳遞時存在的梯度爆炸和梯度消失問題[14],將Sigmoid 激活函數進行改進。如式(2)所示,采用分段單調遞增可緩解深度學習中的梯度消失問題。

Fig.11 Improvement of activation function圖11 激活函數改進
(3)池化層S1。對圖像進行降維處理并保留其有效信息,保證CNN 在旋轉、平移、伸縮時的穩健性。本文使用平均池化獲得16個大小為14*14的特征圖。
(4)卷積層C2。采用第二階段卷積產生的32 個卷積核對網絡上層輸出圖像進行特征提取,獲得32 個大小為14*14的特征圖,同時采用式(2)中的激活函數。
(5)池化層S2。獲得32個大小為7×7的特征圖。
(6)輸出層。采用全連接方式與S2 層特征圖連接。在S2 層32 個大小為7×7 的特征圖中,共包含192 個神經元。由于該研究需對共10 類銀行卡數字進行分類識別,故將輸出層神經元數設定為10,最終得出1 920 個連接參數。
使用PCA 將卷積層C1、C2 的卷積核參數初始化,初始化后的卷積特征可視化效果如圖12所示。

Fig.12 Example of convolution feature visualization圖12 卷積特征可視化圖示例
銀行卡訓練數據為手機拍攝的2 000 張銀行卡圖像,原始圖像大小為64*64,通道數為3。為防止訓練數據受不同光照強度、傾斜角度、遮擋程度等噪聲干擾,應對訓練數據進行預處理,訓練數據類別及數量如表1 所示。隨機采取70%的數據進行訓練,30%的數據進行測試。

Table 1 Training data categories and quantities表1 訓練數據類別及數量
將改進的PCA_CNN 模型、PCA_CNN 模型及CNN 模型在識別準確率和Loss 值方面進行20 次對比實驗,實驗結果如表2 所示。可以看出,改進的PCA_CNN 模型在識別準確率和Loss 值方面都優于PCA_CNN 模型和CNN 模型,改進的PCA_CNN 模型在平均準確率方面比PCA_CNN 模型高2.12%,比CNN 模型高2.97%,Loss 值比PCA_CNN 模型低1.01%,比CNN 模型低6.73%。如圖13 所示,在迭代起始階段,改進的PCA_CNN 算法準確率明顯高于PCA_CNN 模型和CNN 模型,當迭代次數達到125 次后,3種算法準確率均開始收斂,并且改進的PCA_CNN 模型準確率明顯高于其他兩種模型,表明改進的PCA_CNN 模型在迭代次數較少的情況下優勢明顯,準確率與性能均有一定優勢。綜合來看,改進的PCA_CNN 模型明顯優于PCA_CNN 模型和CNN 模型。

Table 2 Comparison of improved PCA_CNN with PCA_CNN and CNN 表2 改進的PCA_CNN與PCA_CNN、CNN比較

Fig.13 Accuracy comparison of improved PCA_CNN with PCA_CNN and CNN 圖13 改進的PCA_CNN、PCA_CNN、CNN準確率比較
為驗證模型有效性,將改進的PCA_CNN 模型與傳統機器學習進行比較,實驗結果如圖14所示。

Fig.14 Comparison of accuracy of the improved PCA_CNN with other methods圖14 改進后的PCA_CNN與其他方法準確率比較
使用Canny算子、大津法等進行銀行卡圖像預處理,對數字圖像區域進行分割與提取,使得模型對背景、光照、折損、污點等情況具有較強的抗干擾性。再將預處理結果分別應用于改進的PCA_CNN 模型、傳統BP 神經網絡[15],SVM 模型[16]、Bayes 決策理論[17]、暹羅網絡模型[18]進行識別對比,結果如表3 所示。可以看出,待測試模型除SVM算法外,準確率均在96%以上,其中BP 為96%、SVM 為90.65%、Bayes 為96%、暹羅網絡為97.91%、改進的PCA_CNN 為98.53%。從結果來看,PCA_CNN 較傳統神經網絡、機器學習算法具有一定優勢。

Table 3 Comparison of recognition performance of different methods表3 不同方法識別性能比較
使用手機等非專業設備在自然光下拍攝銀行卡可能存在背景不一、光照強弱不一等問題,并且銀行卡本身可能存在破舊、污點、折損、字跡不清等問題。因此,在銀行卡卡號識別問題上,本文首先對圖像進行圖像灰度化處理、形態學處理、數字區域分割提取等預處理操作,使其具有較強抗干擾性,對背景、光照具有一定容錯能力;然后將PCA 算法用于選取CNN 神經網絡卷積核,同時在卷積層使用新的激活函數,建立改進的PCA_CNN 模型,利用改進的模型進行銀行卡識別;最后與CNN、BP 神經網絡、SVM 模型,Bayes 算法,暹羅網絡模型進行對比。結果表明,改進的PCA_CNN 模型在準確率方面具有顯著優勢,可用于銀行卡識別。將該模型應用于車牌號識別、人臉識別等,則是未來研究重點探索的方向。