盧用煌,黃山
1. 四川大學(xué) 電氣信息學(xué)院,四川 成都 610065 2. 四川大學(xué) 計算機(jī)學(xué)院,四川 成都 610065
隨著信息化的發(fā)展、實(shí)名制的大范圍應(yīng)用,身份證的快速識別技術(shù)受到越來越多的關(guān)注。傳統(tǒng)的身份證識別方法主要有2種:一種是通過芯片掃描設(shè)備讀取身份證內(nèi)嵌芯片信息,該方法需要專用的芯片識別裝置,成本較高,且便攜性不足;另一種方法是手動登記,效率低下且容易出錯。近幾年來,模式識別理論以及圖像處理技術(shù)的發(fā)展為利用光學(xué)圖像實(shí)現(xiàn)證件識別奠定了理論基礎(chǔ),具備拍照功能的智能手機(jī)廣泛使用為證件識別提供了硬件平臺。基于光學(xué)攝像頭圖像處理及模式識別理論的光學(xué)字符識別(optical character recognition,OCR)在社會生活的各個行業(yè)得到了廣泛的使用,如車牌識別、掃碼支付等。OCR在文字識別方面具有高速、高效、低成本的優(yōu)勢。
人工神經(jīng)網(wǎng)絡(luò)是對動物神經(jīng)網(wǎng)絡(luò)的簡單模仿,依靠系統(tǒng)的復(fù)雜程度,通過調(diào)整內(nèi)部大量節(jié)點(diǎn)之間的相互連接關(guān)系,從而達(dá)到處理信息的目的,被廣泛應(yīng)用于語音分析、圖像識別、數(shù)字水印、計算機(jī)視覺等很多領(lǐng)域,取得了許多突出的成果[1-2]。本文利用深度學(xué)習(xí)來實(shí)現(xiàn)身份證問題圖片識別。
在實(shí)際應(yīng)用中,我們可以通過設(shè)定拍攝窗口的方式獲得身份證的整個版面信息,如圖1(a) 是自然拍攝得到的一個身份證圖片。為了減少數(shù)據(jù)的處理量和提取身份證號碼區(qū)域,將拍攝得到的RGB圖片做灰度化處理。Ostu是一種常用的二值化方法,通過統(tǒng)計整個圖像的直方圖特性來實(shí)現(xiàn)全局閾值的自動選取,圖像像素能夠根據(jù)閾值被分成背景和目標(biāo)2部分。
(a) 拍攝原圖
(b) Ostu二值化效果圖圖1 二值化
圖1(a)是自然拍攝得到的身份證照片,對其進(jìn)行ostu運(yùn)算后得到二值化圖像如圖1(b)所示。觀察身份證可知號碼行與其他信息部分之間有明顯的間隔,可以通過對圖1(b)進(jìn)行投影統(tǒng)計法來提取身份證號碼行內(nèi)容。遍歷二值化圖片,將其黑色像素點(diǎn)往水平方向投影,統(tǒng)計每一行黑色像素點(diǎn)數(shù)目如圖2(a)所示。
(a) 水平方向投影直方圖
(b) 號碼行提取結(jié)果圖2 行切割
觀察圖2(a)可知,最右側(cè)的波柱對應(yīng)著身份證號碼行,可以通過設(shè)置閾值來實(shí)現(xiàn)對號碼行的切割,最終切割效果如圖2(b)所示。
同理,將提取到的身份證號碼行進(jìn)行垂直方向的投影,統(tǒng)計每一列黑色像素點(diǎn)的數(shù)目,選取合適閾值即可獲得每個數(shù)字的字符圖片。一般而言,投影得到的數(shù)字圖片高度是一致的,但是寬度并不一致。為了規(guī)范神經(jīng)網(wǎng)絡(luò)的輸入,我們需要對其進(jìn)行大小歸一化。數(shù)字圖片的寬高比例大概為3∶4,所以本文統(tǒng)一將圖片歸一化為寬15 pix,高20 pix(即15×20)大小。
圖片大小歸一化的常用方法有雙線性插值法、最近鄰法、面積插值法等。本文使用線性插值法來歸一化圖片大小,雙線性插值法工作如下:設(shè)原圖高寬為heightX×widthY,原圖像素坐標(biāo)用(x,y)表示,要變換為高寬heightI×widthJ的目標(biāo)圖,目標(biāo)圖像素坐標(biāo)用(i,j)表示,變換公式為
(1)
對于目標(biāo)圖中的(i,j)點(diǎn),通過式(1)可以找到在原圖中對應(yīng)的一個點(diǎn)(x,y),取點(diǎn)(x,y)十字方向上的4個點(diǎn)(x-1,y)、(x+1,y)、(x,y-1)和(x,y+1)的像素值來確定目標(biāo)圖中的(i,j)點(diǎn)的像素值。
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)表示對應(yīng)點(diǎn)的對角點(diǎn)與點(diǎn)(x,y)確定的正方形的面積。圖像歸一化效果如圖3所示。
圖3 字符切割部分結(jié)果
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個分支,它除了可以學(xué)習(xí)特征和任務(wù)之間的關(guān)聯(lián)之外,還能自動從簡單特征中提取更復(fù)雜的特征。多層神經(jīng)網(wǎng)絡(luò)可以解決異或運(yùn)算。文獻(xiàn)[3]已經(jīng)證明神經(jīng)網(wǎng)絡(luò)可以無限逼近任何連續(xù)函數(shù)。
搭建神經(jīng)網(wǎng)絡(luò)一般采用分層結(jié)構(gòu),輸入層作為第一層神經(jīng)網(wǎng)絡(luò),該層的每一個輸入神經(jīng)元對應(yīng)特征向量中每一個特征的取值,同層節(jié)點(diǎn)彼此獨(dú)立沒有任何連接,按照傳遞方向每層節(jié)點(diǎn)只與后一層節(jié)點(diǎn)連接直至到輸出層。傳遞是有方向性進(jìn)行的,傳遞路徑不可逆。在輸入層和輸出層之間的神經(jīng)網(wǎng)絡(luò)叫做隱藏層。網(wǎng)絡(luò)中所有的神經(jīng)元具有完全相同的結(jié)構(gòu)。
圖4 神經(jīng)網(wǎng)絡(luò)示意
圖片識別問題的本質(zhì)是圖像分類[4-5],分類問題屬于監(jiān)督學(xué)習(xí)模型,本文涉及的算法也是基于數(shù)據(jù)驅(qū)動型的,在有監(jiān)督的機(jī)器學(xué)習(xí)中,訓(xùn)練集的選取對網(wǎng)絡(luò)的性能有著至關(guān)重要的影響。神經(jīng)網(wǎng)絡(luò)的所有參數(shù)都是通過訓(xùn)練集的數(shù)據(jù)訓(xùn)練得到的,訓(xùn)練集的好壞直接影響了神經(jīng)網(wǎng)絡(luò)的性能[6-7]。
本文通過自然拍攝687張身份證圖片(包含0~9個數(shù)字和英文字符X),并對其做如第1章的切割處理,得到的像素寬高為15 pix×20 pix的二值化圖片共12 366張,將其中8 280張圖片作為訓(xùn)練集,其余4 086張圖片作為測試機(jī),訓(xùn)練集和測試集圖片相互獨(dú)立、沒有重疊。
結(jié)合BP算法和梯度下降法來優(yōu)化網(wǎng)絡(luò)中參數(shù)的取值。參數(shù)調(diào)優(yōu)是使用神經(jīng)網(wǎng)絡(luò)時最為關(guān)鍵的步驟之一,優(yōu)化策略的優(yōu)劣直接影響了網(wǎng)絡(luò)最終的識別性能。梯度下降法能將單個參數(shù)更新迭代到局部最優(yōu)值,反向傳播算法給出了一個高效的方式能在所有參數(shù)上使用梯度下降算法[8]。
用θ表示神經(jīng)網(wǎng)絡(luò)中的參數(shù),J(θ)表示在參數(shù)為θ時網(wǎng)絡(luò)模型在訓(xùn)練集上損失函數(shù),則優(yōu)化過程就是尋找一個參數(shù)θ,使得J(θ)最小。
2.2.1 學(xué)習(xí)率的設(shè)置
學(xué)習(xí)率用來控制每次參數(shù)更新的幅度,參數(shù)更新公式為
(3)
式中η表示學(xué)習(xí)率。學(xué)習(xí)率是訓(xùn)練神經(jīng)網(wǎng)絡(luò)最重要的超參數(shù),如果η過大,則有可能導(dǎo)致參數(shù)在極優(yōu)值的兩側(cè)來回震蕩移動,更有甚者會不收斂;如果η過小,雖然保證網(wǎng)絡(luò)收斂,但犧牲了優(yōu)化速度。因此η的選取不能過大也不能過小,本文使用指數(shù)衰減法來設(shè)置學(xué)習(xí)率:
η=η0αk/s
(4)
式中:η是每一輪優(yōu)化時所使用的學(xué)習(xí)率;η0為事先根據(jù)經(jīng)驗設(shè)置的初始學(xué)習(xí)率;α是衰減系數(shù);k為全局訓(xùn)練輪數(shù);s是衰減速度(代表了完整的使用一遍訓(xùn)練數(shù)據(jù)所需要的迭代輪數(shù))。使用指數(shù)衰減法設(shè)置學(xué)習(xí)率,每完整地使過一遍訓(xùn)練數(shù)據(jù),學(xué)習(xí)率就減少一次。通過這種方法,既可以加快訓(xùn)練初期的訓(xùn)練速度,同時在訓(xùn)練后期又不會出現(xiàn)損失函數(shù)在極小值周圍震蕩往返的情況。
2.2.2 過擬合處理
神經(jīng)網(wǎng)絡(luò)的訓(xùn)練并不是為了追求在訓(xùn)練集上有很好的表現(xiàn),而是為了在測試未知樣例時能有最好的表現(xiàn)。在訓(xùn)練時網(wǎng)絡(luò)常會發(fā)生過擬合現(xiàn)象,通俗來講就是網(wǎng)絡(luò)“記住”了訓(xùn)練集中每一個隨機(jī)噪聲而忽略了根據(jù)趨勢進(jìn)行合理排除的能力[9-10]。
常用正則化(regularization)來解決網(wǎng)絡(luò)過擬合問題。正則化的思想是每一個網(wǎng)絡(luò)參數(shù)(權(quán)重和偏置)都能對預(yù)測產(chǎn)生一點(diǎn)影響,而不是其中幾個網(wǎng)絡(luò)參數(shù)起決定作用。具體操作就是在優(yōu)化時不是直接對J(θ)進(jìn)行優(yōu)化,而是對J(θ)+λR(w)進(jìn)行優(yōu)化。λ為參數(shù)懲罰系數(shù),R(w)表示對網(wǎng)絡(luò)參數(shù)的抑制懲罰。θ為神經(jīng)網(wǎng)絡(luò)參數(shù)集合(所有權(quán)重w和偏置b)。常用的懲罰函數(shù)R(w)有2種方式:L1正則化和L2正則化,在本文中使用L2正則化,計算公式為
(5)
另一種減少過擬合的方式是dropout方法,dropout是一個同正則化完全不同的技術(shù),與L2正則化不同,dropout并不會修改損失函數(shù)而是修改神經(jīng)網(wǎng)絡(luò)本身。圖5為使用dropout與否的網(wǎng)絡(luò)訓(xùn)練層間參數(shù)傳遞效果。
(a) 不采用dropout方法
(b) 采用dropout方法圖5 Dropout示意
通常對于同一批量訓(xùn)練樣例,用不同神經(jīng)元組合訓(xùn)練之后求輸出的平均值可以減少過擬合,dropout利用這個原理在訓(xùn)練過程中對網(wǎng)絡(luò)中的神經(jīng)元按照一定的概率將其暫時從網(wǎng)絡(luò)中丟棄,這樣就相當(dāng)于在不同的神經(jīng)網(wǎng)絡(luò)上進(jìn)行訓(xùn)練,減少了層與層之間神經(jīng)元的依賴性從而使得神經(jīng)網(wǎng)絡(luò)更加健壯。
2.2.3 損失函數(shù)設(shè)計
神經(jīng)網(wǎng)絡(luò)應(yīng)用于分類時一般不直接輸出結(jié)果為哪類,而是輸出一個一維數(shù)組向量,向量的長度為類別個數(shù)。判斷每一個樣例分類網(wǎng)絡(luò)就輸出一個數(shù)組,數(shù)組中的每一個元素對應(yīng)一個類別的得分。如果某個樣本屬于A類,那么此時網(wǎng)絡(luò)的輸出數(shù)組對應(yīng)于A的元素應(yīng)該為1,數(shù)組其余元素均為0。但是這樣的輸出在意義上很難直觀理解,可以用softmax來優(yōu)化分類。
神經(jīng)網(wǎng)絡(luò)輸出為y1,y2,...,yn,經(jīng)過softmax函數(shù)映射后最終的網(wǎng)絡(luò)輸出為
(6)
經(jīng)過式(6)運(yùn)算后,神經(jīng)網(wǎng)絡(luò)的輸出數(shù)組變成了一個概率分布。能直觀地看到一個樣例為各個類別的概率是多大。
采用交叉熵(cross entropy)評判輸出向量和期望向量之間的接近程度[11],交叉熵刻畫了2個概率分布的距離。給定2個概率分布p和q,通過q來表示p的交叉熵為
(7)
式(7)的意義是通過概率分布q來表達(dá)概率分布p的困難程度。因為希望得到正確的結(jié)果,所以選取交叉熵作為神經(jīng)網(wǎng)絡(luò)的損失函數(shù)時,用p表示樣例正確的分類標(biāo)注,用q表示網(wǎng)絡(luò)輸出的預(yù)測值。交叉熵表示p、q越接近(即預(yù)測得越準(zhǔn)確)。結(jié)合式(6)、(7),可以得到神經(jīng)網(wǎng)絡(luò)的損失函數(shù)為
(8)
通過式(8)可以判斷預(yù)測答案和真實(shí)答案之間的距離越小越好。
為了驗證本文算法識別性能,共設(shè)計3個實(shí)驗進(jìn)行驗證。
根據(jù)我們切割算法及歸一化處理可知。切割所得到的字符在15×20大小區(qū)域中位置相對固定,可使用模版匹配法來結(jié)合kNN算法來進(jìn)行識別。
kNN算法也叫最近鄰法,算法的思想是,每個字符類各取n個有代表性的不同相態(tài)字符作為標(biāo)準(zhǔn)模版。待識別圖片要進(jìn)行識別時,將圖片與模版里的每一張圖片逐個像素點(diǎn)做灰度差值計算,求出2張圖片的像素差值絕對之和。在所有模版選取出前k張(本文選取k=5)與待識別圖片像素差值絕對值之和最小的圖片,統(tǒng)計這k張圖片屬于哪一個字符類最多的即判斷圖片為該類,若圖片所屬類別樣例數(shù)一樣,則選排序在前的類別作為判斷類別。如5張圖片分別為(1,6,2,3,6),則判斷圖片為6;若為(2,7,4,X,1),則判斷圖片為2。表1為kNN模板匹配法識別結(jié)果表。
表1 測試集kNN模版匹配法識別結(jié)果
kNN模版匹配法識別的正確性很大程度上依賴于標(biāo)準(zhǔn)模版的規(guī)模。標(biāo)準(zhǔn)模版規(guī)模越大,識別正確率越高,但是因為每一次識別時圖片都要與模版庫里面所有的圖片做比較,模版庫規(guī)模越大,識別所需時間越長。
待識別圖片大小為15×20=300個像素點(diǎn),因此輸入層神經(jīng)元為300個,輸出為11類,所以輸出層為11個神經(jīng)元。
搭建一個3層全連接神經(jīng)網(wǎng)絡(luò)(輸入層+掩藏層+輸出層),采用2.2節(jié)的優(yōu)化策略,隱藏層數(shù)目與正確率的關(guān)系如表2所示。
表2 3層全連接神經(jīng)網(wǎng)絡(luò)
搭建一個4層全連接神經(jīng)網(wǎng)絡(luò),輸入層和2個隱藏層神經(jīng)元數(shù)目相同,每層都為300個,輸出層神經(jīng)元為11個, 測試的正確率為99.40%。搭建一個5層的全連接神經(jīng)網(wǎng)絡(luò)(每層隱藏層神經(jīng)元數(shù)目與輸入層一致),測試集上測試正確率為99.38%,由此可判斷多層全連接神經(jīng)網(wǎng)絡(luò)與3層全連接神經(jīng)網(wǎng)絡(luò)識別性能相當(dāng)。
卷積神經(jīng)網(wǎng)絡(luò)是一種深度前饋人工神經(jīng)網(wǎng)絡(luò)[12-14]。卷積神經(jīng)網(wǎng)絡(luò)特有的卷積層能實(shí)現(xiàn)和上一層輸入的局部連接,并通過權(quán)值共享的方式大大地減少網(wǎng)絡(luò)的參數(shù)量。卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)一般如下:
輸入層→(卷積層+→池化層?)+→全連接層+
“卷積層+”表示一層或多層卷積層;“池化層?”表示有或者沒有池化層。在經(jīng)過多輪卷積層和池化層之后,卷積神經(jīng)網(wǎng)絡(luò)在輸出前一般會經(jīng)過1~2個全連接層。
實(shí)驗所用為7層卷積網(wǎng)絡(luò)(圖6所示,不含輸入層),使用了2個卷積層+池化層組合。第1層卷積層接收的輸入層大小為15×20×1的原始文字灰度圖片像素,第1個卷積層過濾器的尺寸為5×5,深度為32,使用全0填充,步長為1。 第2層池化層,采用最大池化降采樣,選擇尺寸為2×2的過濾器,使用全0填充且移動步長為2。第3層卷積層,選取邊長為5,深度為64的過濾器,移動的步長為1,使用全0填充。第4層池化層結(jié)構(gòu)和第2層池化層結(jié)構(gòu)一致。使用2.1節(jié)優(yōu)化策略訓(xùn)練如圖7。
圖6 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
圖7 CNN訓(xùn)練過程
經(jīng)過1 200輪迭代訓(xùn)練,CNN網(wǎng)絡(luò)在測試集上的識別正確率能達(dá)到99.96%。
實(shí)驗看到BP全連接神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的識別正確率相近,為了進(jìn)一步比較2種網(wǎng)絡(luò)的識別性能,對他們分別初始化訓(xùn)練5次,比較2個網(wǎng)絡(luò)在5次訓(xùn)練中測試集上的識別正確率如表3。
表3 全連接網(wǎng)絡(luò)和CNN識別比較
不使用優(yōu)化策略,CNN連續(xù)進(jìn)行5次的識別平均正確率為98.926%;采用優(yōu)化算法后的網(wǎng)絡(luò)識別性能提升了0.7%,健壯性更強(qiáng)。由圖6可以看出隨著訓(xùn)練次數(shù)的增加,網(wǎng)絡(luò)的模型識別率也在穩(wěn)步提高,沒發(fā)生強(qiáng)過擬合現(xiàn)象。
在識別用時上,識別4 086張圖片各模型用時如表4所示。
表4 模型識別用時比較
圖8是識別時錯誤識別的樣本,左圖實(shí)際為5,但網(wǎng)絡(luò)識別為3;右圖實(shí)際為6,被識別為0。觀察圖片可以發(fā)現(xiàn),誤判很大的原因在于拍攝時曝光不適導(dǎo)致提取字符時噪聲過多,致使網(wǎng)絡(luò)識別錯誤。
圖8 部分誤識別樣例
本文構(gòu)建了一種基于卷積神經(jīng)網(wǎng)絡(luò)的身份證號碼分類器。
1)利用神經(jīng)網(wǎng)絡(luò)自動學(xué)習(xí)的特性避免了傳統(tǒng)模式分類算法的復(fù)雜特征提取過程;
2)綜合比較了kNN模版匹配法和神經(jīng)網(wǎng)絡(luò)識別算法,實(shí)驗證明使用神經(jīng)網(wǎng)絡(luò)識別在識別正確率和識別速度上均優(yōu)于模板匹配法;
3)本算法綜合采用3種優(yōu)化神經(jīng)網(wǎng)絡(luò)訓(xùn)練的方式來訓(xùn)練網(wǎng)絡(luò),識別正確率比不采用優(yōu)化算法訓(xùn)練提升了0.7%。
下一步的研究方向是要考慮克服拍攝時光照不均勻情況下字符提取和識別問題,并實(shí)現(xiàn)身份證漢字部分的高準(zhǔn)確率識別。