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