盧用煌,黃山
1. 四川大學 電氣信息學院,四川 成都 610065 2. 四川大學 計算機學院,四川 成都 610065
隨著信息化的發展、實名制的大范圍應用,身份證的快速識別技術受到越來越多的關注。傳統的身份證識別方法主要有2種:一種是通過芯片掃描設備讀取身份證內嵌芯片信息,該方法需要專用的芯片識別裝置,成本較高,且便攜性不足;另一種方法是手動登記,效率低下且容易出錯。近幾年來,模式識別理論以及圖像處理技術的發展為利用光學圖像實現證件識別奠定了理論基礎,具備拍照功能的智能手機廣泛使用為證件識別提供了硬件平臺。基于光學攝像頭圖像處理及模式識別理論的光學字符識別(optical character recognition,OCR)在社會生活的各個行業得到了廣泛的使用,如車牌識別、掃碼支付等。OCR在文字識別方面具有高速、高效、低成本的優勢。
人工神經網絡是對動物神經網絡的簡單模仿,依靠系統的復雜程度,通過調整內部大量節點之間的相互連接關系,從而達到處理信息的目的,被廣泛應用于語音分析、圖像識別、數字水印、計算機視覺等很多領域,取得了許多突出的成果[1-2]。本文利用深度學習來實現身份證問題圖片識別。
在實際應用中,我們可以通過設定拍攝窗口的方式獲得身份證的整個版面信息,如圖1(a) 是自然拍攝得到的一個身份證圖片。為了減少數據的處理量和提取身份證號碼區域,將拍攝得到的RGB圖片做灰度化處理。Ostu是一種常用的二值化方法,通過統計整個圖像的直方圖特性來實現全局閾值的自動選取,圖像像素能夠根據閾值被分成背景和目標2部分。

(a) 拍攝原圖

(b) Ostu二值化效果圖圖1 二值化
圖1(a)是自然拍攝得到的身份證照片,對其進行ostu運算后得到二值化圖像如圖1(b)所示。觀察身份證可知號碼行與其他信息部分之間有明顯的間隔,可以通過對圖1(b)進行投影統計法來提取身份證號碼行內容。遍歷二值化圖片,將其黑色像素點往水平方向投影,統計每一行黑色像素點數目如圖2(a)所示。

(a) 水平方向投影直方圖

(b) 號碼行提取結果圖2 行切割
觀察圖2(a)可知,最右側的波柱對應著身份證號碼行,可以通過設置閾值來實現對號碼行的切割,最終切割效果如圖2(b)所示。
同理,將提取到的身份證號碼行進行垂直方向的投影,統計每一列黑色像素點的數目,選取合適閾值即可獲得每個數字的字符圖片。一般而言,投影得到的數字圖片高度是一致的,但是寬度并不一致。為了規范神經網絡的輸入,我們需要對其進行大小歸一化。數字圖片的寬高比例大概為3∶4,所以本文統一將圖片歸一化為寬15 pix,高20 pix(即15×20)大小。
圖片大小歸一化的常用方法有雙線性插值法、最近鄰法、面積插值法等。本文使用線性插值法來歸一化圖片大小,雙線性插值法工作如下:設原圖高寬為heightX×widthY,原圖像素坐標用(x,y)表示,要變換為高寬heightI×widthJ的目標圖,目標圖像素坐標用(i,j)表示,變換公式為
(1)
對于目標圖中的(i,j)點,通過式(1)可以找到在原圖中對應的一個點(x,y),取點(x,y)十字方向上的4個點(x-1,y)、(x+1,y)、(x,y-1)和(x,y+1)的像素值來確定目標圖中的(i,j)點的像素值。
gray(i,j)=gray(x-1,y)×s1+gray(x+1,y)×
s2+gray(x,y-1)×s3+gray(x,y+1)×s4
(2)
式中si(i=1,2,3,4)表示對應點的對角點與點(x,y)確定的正方形的面積。圖像歸一化效果如圖3所示。

圖3 字符切割部分結果
深度學習是機器學習的一個分支,它除了可以學習特征和任務之間的關聯之外,還能自動從簡單特征中提取更復雜的特征。多層神經網絡可以解決異或運算。文獻[3]已經證明神經網絡可以無限逼近任何連續函數。
搭建神經網絡一般采用分層結構,輸入層作為第一層神經網絡,該層的每一個輸入神經元對應特征向量中每一個特征的取值,同層節點彼此獨立沒有任何連接,按照傳遞方向每層節點只與后一層節點連接直至到輸出層。傳遞是有方向性進行的,傳遞路徑不可逆。在輸入層和輸出層之間的神經網絡叫做隱藏層。網絡中所有的神經元具有完全相同的結構。

圖4 神經網絡示意
圖片識別問題的本質是圖像分類[4-5],分類問題屬于監督學習模型,本文涉及的算法也是基于數據驅動型的,在有監督的機器學習中,訓練集的選取對網絡的性能有著至關重要的影響。神經網絡的所有參數都是通過訓練集的數據訓練得到的,訓練集的好壞直接影響了神經網絡的性能[6-7]。
本文通過自然拍攝687張身份證圖片(包含0~9個數字和英文字符X),并對其做如第1章的切割處理,得到的像素寬高為15 pix×20 pix的二值化圖片共12 366張,將其中8 280張圖片作為訓練集,其余4 086張圖片作為測試機,訓練集和測試集圖片相互獨立、沒有重疊。
結合BP算法和梯度下降法來優化網絡中參數的取值。參數調優是使用神經網絡時最為關鍵的步驟之一,優化策略的優劣直接影響了網絡最終的識別性能。梯度下降法能將單個參數更新迭代到局部最優值,反向傳播算法給出了一個高效的方式能在所有參數上使用梯度下降算法[8]。
用θ表示神經網絡中的參數,J(θ)表示在參數為θ時網絡模型在訓練集上損失函數,則優化過程就是尋找一個參數θ,使得J(θ)最小。
2.2.1 學習率的設置
學習率用來控制每次參數更新的幅度,參數更新公式為
(3)
式中η表示學習率。學習率是訓練神經網絡最重要的超參數,如果η過大,則有可能導致參數在極優值的兩側來回震蕩移動,更有甚者會不收斂;如果η過小,雖然保證網絡收斂,但犧牲了優化速度。因此η的選取不能過大也不能過小,本文使用指數衰減法來設置學習率:
η=η0αk/s
(4)
式中:η是每一輪優化時所使用的學習率;η0為事先根據經驗設置的初始學習率;α是衰減系數;k為全局訓練輪數;s是衰減速度(代表了完整的使用一遍訓練數據所需要的迭代輪數)。使用指數衰減法設置學習率,每完整地使過一遍訓練數據,學習率就減少一次。通過這種方法,既可以加快訓練初期的訓練速度,同時在訓練后期又不會出現損失函數在極小值周圍震蕩往返的情況。
2.2.2 過擬合處理
神經網絡的訓練并不是為了追求在訓練集上有很好的表現,而是為了在測試未知樣例時能有最好的表現。在訓練時網絡常會發生過擬合現象,通俗來講就是網絡“記住”了訓練集中每一個隨機噪聲而忽略了根據趨勢進行合理排除的能力[9-10]。
常用正則化(regularization)來解決網絡過擬合問題。正則化的思想是每一個網絡參數(權重和偏置)都能對預測產生一點影響,而不是其中幾個網絡參數起決定作用。具體操作就是在優化時不是直接對J(θ)進行優化,而是對J(θ)+λR(w)進行優化。λ為參數懲罰系數,R(w)表示對網絡參數的抑制懲罰。θ為神經網絡參數集合(所有權重w和偏置b)。常用的懲罰函數R(w)有2種方式:L1正則化和L2正則化,在本文中使用L2正則化,計算公式為
(5)
另一種減少過擬合的方式是dropout方法,dropout是一個同正則化完全不同的技術,與L2正則化不同,dropout并不會修改損失函數而是修改神經網絡本身。圖5為使用dropout與否的網絡訓練層間參數傳遞效果。

(a) 不采用dropout方法

(b) 采用dropout方法圖5 Dropout示意
通常對于同一批量訓練樣例,用不同神經元組合訓練之后求輸出的平均值可以減少過擬合,dropout利用這個原理在訓練過程中對網絡中的神經元按照一定的概率將其暫時從網絡中丟棄,這樣就相當于在不同的神經網絡上進行訓練,減少了層與層之間神經元的依賴性從而使得神經網絡更加健壯。
2.2.3 損失函數設計
神經網絡應用于分類時一般不直接輸出結果為哪類,而是輸出一個一維數組向量,向量的長度為類別個數。判斷每一個樣例分類網絡就輸出一個數組,數組中的每一個元素對應一個類別的得分。如果某個樣本屬于A類,那么此時網絡的輸出數組對應于A的元素應該為1,數組其余元素均為0。但是這樣的輸出在意義上很難直觀理解,可以用softmax來優化分類。
神經網絡輸出為y1,y2,...,yn,經過softmax函數映射后最終的網絡輸出為
(6)
經過式(6)運算后,神經網絡的輸出數組變成了一個概率分布。能直觀地看到一個樣例為各個類別的概率是多大。
采用交叉熵(cross entropy)評判輸出向量和期望向量之間的接近程度[11],交叉熵刻畫了2個概率分布的距離。給定2個概率分布p和q,通過q來表示p的交叉熵為

(7)
式(7)的意義是通過概率分布q來表達概率分布p的困難程度。因為希望得到正確的結果,所以選取交叉熵作為神經網絡的損失函數時,用p表示樣例正確的分類標注,用q表示網絡輸出的預測值。交叉熵表示p、q越接近(即預測得越準確)。結合式(6)、(7),可以得到神經網絡的損失函數為
(8)
通過式(8)可以判斷預測答案和真實答案之間的距離越小越好。
為了驗證本文算法識別性能,共設計3個實驗進行驗證。
根據我們切割算法及歸一化處理可知。切割所得到的字符在15×20大小區域中位置相對固定,可使用模版匹配法來結合kNN算法來進行識別。
kNN算法也叫最近鄰法,算法的思想是,每個字符類各取n個有代表性的不同相態字符作為標準模版。待識別圖片要進行識別時,將圖片與模版里的每一張圖片逐個像素點做灰度差值計算,求出2張圖片的像素差值絕對之和。在所有模版選取出前k張(本文選取k=5)與待識別圖片像素差值絕對值之和最小的圖片,統計這k張圖片屬于哪一個字符類最多的即判斷圖片為該類,若圖片所屬類別樣例數一樣,則選排序在前的類別作為判斷類別。如5張圖片分別為(1,6,2,3,6),則判斷圖片為6;若為(2,7,4,X,1),則判斷圖片為2。表1為kNN模板匹配法識別結果表。

表1 測試集kNN模版匹配法識別結果
kNN模版匹配法識別的正確性很大程度上依賴于標準模版的規模。標準模版規模越大,識別正確率越高,但是因為每一次識別時圖片都要與模版庫里面所有的圖片做比較,模版庫規模越大,識別所需時間越長。
待識別圖片大小為15×20=300個像素點,因此輸入層神經元為300個,輸出為11類,所以輸出層為11個神經元。
搭建一個3層全連接神經網絡(輸入層+掩藏層+輸出層),采用2.2節的優化策略,隱藏層數目與正確率的關系如表2所示。

表2 3層全連接神經網絡
搭建一個4層全連接神經網絡,輸入層和2個隱藏層神經元數目相同,每層都為300個,輸出層神經元為11個, 測試的正確率為99.40%。搭建一個5層的全連接神經網絡(每層隱藏層神經元數目與輸入層一致),測試集上測試正確率為99.38%,由此可判斷多層全連接神經網絡與3層全連接神經網絡識別性能相當。
卷積神經網絡是一種深度前饋人工神經網絡[12-14]。卷積神經網絡特有的卷積層能實現和上一層輸入的局部連接,并通過權值共享的方式大大地減少網絡的參數量。卷積神經網絡架構一般如下:
輸入層→(卷積層+→池化層?)+→全連接層+
“卷積層+”表示一層或多層卷積層;“池化層?”表示有或者沒有池化層。在經過多輪卷積層和池化層之后,卷積神經網絡在輸出前一般會經過1~2個全連接層。
實驗所用為7層卷積網絡(圖6所示,不含輸入層),使用了2個卷積層+池化層組合。第1層卷積層接收的輸入層大小為15×20×1的原始文字灰度圖片像素,第1個卷積層過濾器的尺寸為5×5,深度為32,使用全0填充,步長為1。 第2層池化層,采用最大池化降采樣,選擇尺寸為2×2的過濾器,使用全0填充且移動步長為2。第3層卷積層,選取邊長為5,深度為64的過濾器,移動的步長為1,使用全0填充。第4層池化層結構和第2層池化層結構一致。使用2.1節優化策略訓練如圖7。

圖6 卷積神經網絡結構

圖7 CNN訓練過程
經過1 200輪迭代訓練,CNN網絡在測試集上的識別正確率能達到99.96%。
實驗看到BP全連接神經網絡和卷積神經網絡的識別正確率相近,為了進一步比較2種網絡的識別性能,對他們分別初始化訓練5次,比較2個網絡在5次訓練中測試集上的識別正確率如表3。

表3 全連接網絡和CNN識別比較
不使用優化策略,CNN連續進行5次的識別平均正確率為98.926%;采用優化算法后的網絡識別性能提升了0.7%,健壯性更強。由圖6可以看出隨著訓練次數的增加,網絡的模型識別率也在穩步提高,沒發生強過擬合現象。
在識別用時上,識別4 086張圖片各模型用時如表4所示。

表4 模型識別用時比較
圖8是識別時錯誤識別的樣本,左圖實際為5,但網絡識別為3;右圖實際為6,被識別為0。觀察圖片可以發現,誤判很大的原因在于拍攝時曝光不適導致提取字符時噪聲過多,致使網絡識別錯誤。

圖8 部分誤識別樣例
本文構建了一種基于卷積神經網絡的身份證號碼分類器。
1)利用神經網絡自動學習的特性避免了傳統模式分類算法的復雜特征提取過程;
2)綜合比較了kNN模版匹配法和神經網絡識別算法,實驗證明使用神經網絡識別在識別正確率和識別速度上均優于模板匹配法;
3)本算法綜合采用3種優化神經網絡訓練的方式來訓練網絡,識別正確率比不采用優化算法訓練提升了0.7%。
下一步的研究方向是要考慮克服拍攝時光照不均勻情況下字符提取和識別問題,并實現身份證漢字部分的高準確率識別。