崔 新,白培瑞,張 策,劉慶一,傅穎霞2,劉嘉程,祝璐璐
(1.山東科技大學(xué) 電子信息工程學(xué)院,山東 青島 266590;2.山東科技大學(xué) 礦業(yè)與安全工程學(xué)院,山東 青島 266590)
互聯(lián)網(wǎng)技術(shù)的高速發(fā)展給人們帶來生活便利的同時(shí),隨之而來的網(wǎng)絡(luò)安全問題也日益突出。網(wǎng)絡(luò)資源濫用、網(wǎng)絡(luò)信息竊取等惡意行為已引起廣泛關(guān)注。驗(yàn)證碼識(shí)別是維護(hù)網(wǎng)絡(luò)安全和防止計(jì)算機(jī)程序惡意攻擊的一種有效機(jī)制和方法,在各大網(wǎng)站中已得到廣泛應(yīng)用[1]。搜狐、愛奇藝、Facebook等網(wǎng)站使用的是具有噪聲干擾和獨(dú)立字符的驗(yàn)證碼;百度、谷歌、新浪等網(wǎng)站使用的是具有扭曲和粘連字符的驗(yàn)證碼,該類驗(yàn)證碼主要由數(shù)字和字母隨機(jī)構(gòu)成。而且,為了提高防偽能力,開始采用相互連接且扭曲的字符驗(yàn)證碼。
傳統(tǒng)的驗(yàn)證碼識(shí)別方法主要分為三個(gè)步驟:圖像預(yù)處理、字符分割和字符識(shí)別[2]。其中,字符分割是直接影響識(shí)別效果的關(guān)鍵因素。對于只包含字符的驗(yàn)證碼圖像,一般采用先逐個(gè)分離字符,然后利用機(jī)器學(xué)習(xí)方法如k-最近鄰算法[3]或卷積神經(jīng)網(wǎng)絡(luò)對子圖像進(jìn)行正確分類。但是,傳統(tǒng)驗(yàn)證碼識(shí)別方法對不同類型的驗(yàn)證碼泛化能力和魯棒性較差。
針對復(fù)雜類型驗(yàn)證碼分割的困難性,國內(nèi)外學(xué)者已提出很多解決方案。李興國等[4]針對存在字符粘連的驗(yàn)證碼提出一種將滴水算法與積分投影相結(jié)合的分割方法,對于驗(yàn)證碼中存在部分粘連的字符具有較好的分割適應(yīng)能力。尹龍等[5]對于扭曲粘連類型字符驗(yàn)證碼的識(shí)別問題,提出基于DENSESIFT和RANSAC算法以及基于馬爾科夫隨機(jī)場算法,兩種算法均取得較好的效果。簡獻(xiàn)忠等[6]提出一種基于SOM聚類結(jié)合Voronoi骨架形態(tài)學(xué)分析的粘連字符分割算法,該方法對于傾斜扭曲的驗(yàn)證碼具有良好的分割效果。Lu 等[7]針對多種類型驗(yàn)證碼分別提出了不同的字符分割算法,并結(jié)合SVM 分類算法及BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行字符識(shí)別。Wang等[8]基于自適應(yīng)的算法來對驗(yàn)證碼進(jìn)行去噪和分割,并采用模板匹配的方法來對分割后的字符進(jìn)行識(shí)別,取得了較好的識(shí)別效果。Mori等[9]基于shape context算法識(shí)別了EZ-Gimpy驗(yàn)證碼,識(shí)別率為92%。但是,以上算法大多是解決特定類型的驗(yàn)證碼,一旦驗(yàn)證碼的樣式發(fā)生變化,識(shí)別效果往往并不理想,泛化能力不足。
近年來,在語音和圖像識(shí)別領(lǐng)域大獲成功的深度學(xué)習(xí)技術(shù)開始被引入驗(yàn)證碼識(shí)別領(lǐng)域[10-12]。其中,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)是最常見的一種深度學(xué)習(xí)技術(shù),可以直接從圖像中學(xué)習(xí)深度特征,避免傳統(tǒng)方法中字符分割損失有用信息的問題[13]。Qing等[14]提出一種多標(biāo)簽卷積神經(jīng)網(wǎng)絡(luò)識(shí)別文本驗(yàn)證碼且無需分割,對于字符失真和復(fù)雜驗(yàn)證碼取得較好的效果。MATAN等[15]采用空間位移神經(jīng)網(wǎng)絡(luò)(spatial displacement neural network,SDNN)和隱馬爾科夫模型(hidden Markov model,HMM)對帶有粘連的手寫字符進(jìn)行識(shí)別,識(shí)別率達(dá)到90%。Shi等[16]將CNN與循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)相結(jié)合,提出一種卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(CRNN)實(shí)現(xiàn)驗(yàn)證碼的整體識(shí)別。Du等[17]利用Faster R-CNN進(jìn)行整體識(shí)別,對于不定長度序列的驗(yàn)證碼有較好的識(shí)別效果。Lin等[18]利用卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)驗(yàn)證碼的筆畫和字符特征,極大提高了具有失真、旋轉(zhuǎn)和背景噪聲的驗(yàn)證碼識(shí)別準(zhǔn)確率。與傳統(tǒng)方法相比,深度神經(jīng)網(wǎng)絡(luò)具有更好的學(xué)習(xí)能力,能有效提升分類識(shí)別效率。然而,大多數(shù)端對端識(shí)別算法直接采用現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)層數(shù)較深,訓(xùn)練參數(shù)量大,在有效樣本數(shù)量有限的情況下容易出現(xiàn)過擬合和泛化能力不足的現(xiàn)象。
本研究提出一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的端對端驗(yàn)證碼識(shí)別方法。主要?jiǎng)?chuàng)新點(diǎn):①采用并行級聯(lián)卷積層構(gòu)建Inception模塊進(jìn)而搭建卷積神經(jīng)網(wǎng)絡(luò),既增加網(wǎng)絡(luò)的寬度又提高網(wǎng)絡(luò)對于不同尺度的適應(yīng)能力,避免產(chǎn)生過多的訓(xùn)練參數(shù)。同時(shí),采用全局平均池化層代替全連接層,可以防止過擬合,提高網(wǎng)絡(luò)的學(xué)習(xí)效率。②整個(gè)過程將驗(yàn)證碼字符圖片直接作為網(wǎng)絡(luò)輸入,不進(jìn)行圖像分割。在網(wǎng)絡(luò)訓(xùn)練過程中主動(dòng)學(xué)習(xí)調(diào)節(jié)參數(shù),可以避免傳統(tǒng)方法中因過多人工干預(yù)造成圖像信息被破壞導(dǎo)致的誤差累積問題。
端對端驗(yàn)證碼識(shí)別系統(tǒng)是將驗(yàn)證碼圖像直接輸入至搭建的網(wǎng)絡(luò)模型中,利用網(wǎng)絡(luò)的學(xué)習(xí)能力自動(dòng)提取驗(yàn)證碼字符的特征信息進(jìn)行訓(xùn)練,產(chǎn)生最優(yōu)模型參數(shù)進(jìn)行字符識(shí)別。與傳統(tǒng)方法流程相比,該流程去除了字符圖像分割環(huán)節(jié),可以避免學(xué)習(xí)過程中誤差累積問題。算法流程圖如圖1所示。
圖1 端對端識(shí)別算法的流程圖
1.2.1 驗(yàn)證碼圖像預(yù)處理
圖像預(yù)處理是為了去除不利于識(shí)別的干擾信息,突出顯示與字符相關(guān)的特征信息,從而提高識(shí)別正確率。預(yù)處理過程主要分為三個(gè)環(huán)節(jié):灰度化、二值化和圖像去噪。其中,灰度化采用加權(quán)平均法。
加權(quán)平均法通過對R、G、B三個(gè)分量分配不同大小的權(quán)值進(jìn)行加權(quán)計(jì)算,并將計(jì)算結(jié)果作為整幅圖像的灰度像素值,公式如下:
f(x,y)=0.3R(x,y)+0.59G(x,y)+0.11B(x,y)。
(1)
二值化過程中,由于驗(yàn)證碼圖像的目標(biāo)信息通常位于中間區(qū)域,為避免重復(fù)計(jì)算圖像周圍的空白區(qū)域,減少計(jì)算復(fù)雜度,采用局部最優(yōu)閾值法進(jìn)行二值化[19]。其中,局部最優(yōu)閾值采用Otsu算法計(jì)算:
(2)
式中,NA為目標(biāo)區(qū)域的像素點(diǎn)數(shù),N為灰度圖像的像素點(diǎn)總和,μ為整體灰度均值,μA為目標(biāo)區(qū)域的灰度均值。
圖像去噪為可選操作,根據(jù)樣本形式和噪聲決定是否采用中值濾波去噪。
1.2.2 網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)
本研究所提的深度網(wǎng)絡(luò)架構(gòu)是在Google-Net網(wǎng)絡(luò)模型的基礎(chǔ)上設(shè)計(jì)(圖2)[19],其中,實(shí)線連接部分為本研究設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),虛線連接部分為傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。網(wǎng)絡(luò)結(jié)構(gòu)上主要做了兩點(diǎn)改進(jìn):一是采用由并行級聯(lián)卷積組成的Inception模塊代替中間的卷積層和池化層;二是采用全局平均池化層(global average pooling layer,GAP)來替換全連接層。采用Inception模塊雖然加深了網(wǎng)絡(luò)深度,但是可以減少網(wǎng)絡(luò)訓(xùn)練參數(shù),提高網(wǎng)絡(luò)對多尺度目標(biāo)的適應(yīng)能力。全局平均池化層替代全連接層可以提高網(wǎng)絡(luò)學(xué)習(xí)效率。所有Inception模塊中卷積層的輸出引入批量標(biāo)準(zhǔn)化操作(batch normalization),以此歸正每層輸入樣本的分布,可以加快訓(xùn)練速度,提高泛化能力。各層的參數(shù)如表1所示。
Inception模塊的結(jié)構(gòu)由并行級聯(lián)的卷積層構(gòu)建(如圖3所示),該結(jié)構(gòu)便于利用不同大小的卷積核感知不同范圍和尺度的局部特征,然后加以組合,提高網(wǎng)絡(luò)的多尺度適應(yīng)性,在減少訓(xùn)練權(quán)系數(shù)數(shù)量的同時(shí),提高深度網(wǎng)絡(luò)的學(xué)習(xí)能力。本研究網(wǎng)絡(luò)用到4個(gè)Inception模塊,且4個(gè)Inception模塊的結(jié)構(gòu)都是一致的。
利用全局平均池化層替代全連接層(如圖4所示),可以正則化網(wǎng)絡(luò)輸出,防止訓(xùn)練過程中出現(xiàn)過擬合,提高分類準(zhǔn)確性。
圖2 本研究提出的深度網(wǎng)絡(luò)結(jié)構(gòu)與傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)對比
表1 本研究深度網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)配置
圖3 簡易Inception模塊示意圖
圖4 采用全局平均池化層替換全卷積層示意圖
1.2.3 訓(xùn)練過程
在訓(xùn)練過程中通過對每一個(gè)中間層的輸入數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化操作,將樣本的數(shù)據(jù)分布映射到均值為0、方差為1的正態(tài)分布范圍內(nèi),當(dāng)前層網(wǎng)絡(luò)參數(shù)發(fā)生變化時(shí),后層的均值方差不變,減少了層與層之間參數(shù)的耦合,通過引入批量標(biāo)準(zhǔn)化操作使得網(wǎng)絡(luò)可以設(shè)置更高的學(xué)習(xí)率,降低初始化值加快網(wǎng)絡(luò)訓(xùn)練速度,同時(shí)批量標(biāo)準(zhǔn)化對模型起到一定的正則化作用,減少了網(wǎng)絡(luò)對于Dropout的需求。
在批量標(biāo)準(zhǔn)化的過程中,首先需要對網(wǎng)絡(luò)的輸入數(shù)據(jù)進(jìn)行歸一化處理:
(3)
式中,E(x(k))是指訓(xùn)練數(shù)據(jù)神經(jīng)元x(k)的平均值,分母是指數(shù)據(jù)神經(jīng)元x(k)的一個(gè)標(biāo)準(zhǔn)差。為了防止歸一化改變數(shù)據(jù)的分布方式影響網(wǎng)絡(luò)學(xué)習(xí),通過引入兩個(gè)超參數(shù)γ(k)、β(k)將其轉(zhuǎn)換為:
(4)
選取3個(gè)不同類別的驗(yàn)證碼圖像作為樣本數(shù)據(jù)集進(jìn)行訓(xùn)練和識(shí)別(見表2)。
1)京東驗(yàn)證碼
京東驗(yàn)證碼包含了常見的驗(yàn)證碼干擾方式,比如字符尺度變化、線性噪聲、字符粘連等特征,比較適合用于測試驗(yàn)證碼的適用性。
2)正方教務(wù)系統(tǒng)驗(yàn)證碼
正方教務(wù)系統(tǒng)驗(yàn)證碼具有點(diǎn)噪聲和部分扭曲粘連的特性,可以用于評估粘連字符驗(yàn)證碼識(shí)別方法的性能。
3)谷歌驗(yàn)證碼
谷歌驗(yàn)證碼是目前網(wǎng)絡(luò)上難度最大的字符型驗(yàn)證碼,具有復(fù)雜的扭曲、粘連等特征,傳統(tǒng)驗(yàn)證碼識(shí)別方法無法識(shí)別此類驗(yàn)證碼。
表2 部分選用的驗(yàn)證碼訓(xùn)練集
樣本驗(yàn)證碼圖像的大小均為60×160像素(高度×寬度),初始學(xué)習(xí)率為0.01。實(shí)驗(yàn)過程首先對驗(yàn)證碼數(shù)據(jù)集進(jìn)行篩選,判斷是否進(jìn)行預(yù)處理或樣本擴(kuò)充操作,制作訓(xùn)練集和測試集,將訓(xùn)練集整體輸入至網(wǎng)絡(luò)結(jié)構(gòu)中進(jìn)行訓(xùn)練和調(diào)參,待其產(chǎn)生最優(yōu)訓(xùn)練模型。其次,輸入測試樣本進(jìn)行預(yù)測。統(tǒng)計(jì)正確預(yù)測個(gè)數(shù)(TP)和錯(cuò)誤預(yù)測個(gè)數(shù)(TN),最后根據(jù)統(tǒng)計(jì)結(jié)果計(jì)算準(zhǔn)確率(Accuracy,acc),acc=TP/(TP+TN)。為保證識(shí)別的魯棒性,對谷歌驗(yàn)證碼進(jìn)行了兩次訓(xùn)練,第一次選用256的批量樣本迭代25次,后改用128的批量樣本迭代45次完成訓(xùn)練。
對京東驗(yàn)證碼、正方教務(wù)系統(tǒng)驗(yàn)證碼和谷歌驗(yàn)證碼的識(shí)別效果進(jìn)行了對比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表3所示。三種驗(yàn)證碼的訓(xùn)練樣本/測試樣本/批量樣本(batch-size)/迭代次數(shù)參數(shù)值分別為14 266、6 000、6 500張/420、1 000、500張/128、64、128張/50、40、25次。表3列出了不同驗(yàn)證碼圖像的識(shí)別準(zhǔn)確率,同時(shí)也列出了四種傳統(tǒng)深度網(wǎng)絡(luò)得到的識(shí)別準(zhǔn)確率比較??梢钥闯觯痉椒▽〇|驗(yàn)證碼的識(shí)別準(zhǔn)確率比AlexNet、VGG-16、Googlenet-v2、ResNet34分別提高了1.14%、1.71%、0.5%和0.31%,對正方教務(wù)系統(tǒng)驗(yàn)證碼的識(shí)別準(zhǔn)確率分別提高了2.75%、3.08%、1.13%和1.46%,對谷歌驗(yàn)證碼的識(shí)別準(zhǔn)確率分別提高了3.14%、2.05%、0.43%和1.3%。本方法對于3種不同類型驗(yàn)證碼均有著較高的識(shí)別率、魯棒性和良好的泛化能力。
表3 不同驗(yàn)證碼圖像的識(shí)別準(zhǔn)確率比較
表4對不同網(wǎng)絡(luò)架構(gòu)的識(shí)別準(zhǔn)確率和計(jì)算時(shí)間進(jìn)行了對比。表1中的8層結(jié)構(gòu)網(wǎng)絡(luò)分別減少2層Inception模塊和增加2層Inception模塊,得到6層和10層結(jié)構(gòu)的深度學(xué)習(xí)網(wǎng)絡(luò)。根據(jù)統(tǒng)計(jì)結(jié)果,三種驗(yàn)證碼采用8層結(jié)構(gòu)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率比6層結(jié)構(gòu)網(wǎng)絡(luò)平均提高2.79%,訓(xùn)練時(shí)間平均增加274 s;10層結(jié)構(gòu)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率比8層結(jié)構(gòu)網(wǎng)絡(luò)平均提高了0.59%,訓(xùn)練時(shí)間平均增加1 054 s。所以,從識(shí)別準(zhǔn)確率和訓(xùn)練時(shí)間指標(biāo)折衷考慮,8層結(jié)構(gòu)網(wǎng)絡(luò)的性能最好。
表4 不同網(wǎng)絡(luò)結(jié)構(gòu)識(shí)別準(zhǔn)確率和時(shí)間比較
傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)的卷積層通常由許多卷積單元組成,用來從前一層的特征圖中提取更高級的特征。但是,如何優(yōu)化每一層各通道提取的特征,提高目標(biāo)表示效率是深度學(xué)習(xí)技術(shù)中需要考慮的問題。通過采用并行的級聯(lián)卷積層構(gòu)建簡易的Inception模塊,用于替代傳統(tǒng)網(wǎng)絡(luò)中的卷積層,并在其中運(yùn)用多個(gè)小卷積核代替原來的大卷積核,可以在減少參數(shù)量的同時(shí),增加網(wǎng)絡(luò)深度提高網(wǎng)絡(luò)學(xué)習(xí)能力。
1)Inception模塊中,通過使用兩個(gè)3×3卷積來替代5×5卷積,由于兩個(gè)3×3卷積核的參數(shù)量為:2KP3×3=2(32C2)=18C2,而一個(gè)5×5卷積核的參數(shù)量為:KP5×5=52C2=25C2,可以算出采用3×3卷積的堆積結(jié)構(gòu)參數(shù)量為原結(jié)構(gòu)的0.72倍。
2)每一個(gè)Inception模塊內(nèi)由三個(gè)并行級聯(lián)卷積層組合而成,不同大小的卷積核與圖像卷積后產(chǎn)生不同的感受野提取不同區(qū)域的特征,1×1的卷積將輸入的圖像降維后保留了原來的全局特征,1×1卷積和2個(gè)3×3卷積的串聯(lián)組合可以提取輸入圖像的局部特征,池化層與1×1卷積串聯(lián)后提取原輸入圖像一半大小的區(qū)域特征,最后將這三層并聯(lián)卷積層提取的不同尺度特征進(jìn)行合并,有效提升了網(wǎng)絡(luò)對不同尺度的適應(yīng)性。
對于含有復(fù)雜干擾信息或粘連的驗(yàn)證碼,基于圖像分割的傳統(tǒng)方法很難識(shí)別,而且分割會(huì)破壞字符信息,導(dǎo)致誤差累積。端對端的深度學(xué)習(xí)技術(shù),從輸入端到輸出端會(huì)有一個(gè)對結(jié)果的預(yù)測,預(yù)測誤差在網(wǎng)絡(luò)的每一層反向傳遞與調(diào)整,直至得到預(yù)期的結(jié)果。通過將這種自主學(xué)習(xí)網(wǎng)絡(luò)架構(gòu)引入驗(yàn)證碼識(shí)別,可以去掉字符分割步驟,并根據(jù)訓(xùn)練樣本中干擾復(fù)雜程度來選擇是否進(jìn)行預(yù)處理操作,以此更好凸顯和保留字符間的特征信息[20]。以京東驗(yàn)證碼為例,與傳統(tǒng)分類器算法(SVM)、基于BP神經(jīng)網(wǎng)絡(luò)的分割算法以及基于CNN的分割算法相比,本算法識(shí)別準(zhǔn)確率分別提高了5.68%、9.67%和0.56%,識(shí)別準(zhǔn)確率和速度均有較大提升。以上實(shí)驗(yàn)結(jié)果也表明采用端對端驗(yàn)證碼識(shí)別方法可以達(dá)到更好的識(shí)別性能。
本研究提出一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的端對端驗(yàn)證碼識(shí)別方法。利用Inception模塊代替卷積層構(gòu)建深層卷積神經(jīng)網(wǎng)絡(luò),整個(gè)過程將驗(yàn)證碼圖像直接作為網(wǎng)絡(luò)輸入,無須字符分割等過多人工干預(yù),避免字符信息破壞造成錯(cuò)誤累積的問題,利用網(wǎng)絡(luò)學(xué)習(xí)能力自動(dòng)提取字符特征進(jìn)行訓(xùn)練,從而實(shí)現(xiàn)了端對端的訓(xùn)練和識(shí)別。實(shí)驗(yàn)結(jié)果表明,端對端的驗(yàn)證碼識(shí)別方法對于不同類型的復(fù)雜驗(yàn)證碼均有著較高的識(shí)別準(zhǔn)確率和魯棒性。