?

基于卷積神經網絡的圖像驗證碼識別①

2018-11-14 11:36顧乃杰張孝慈林傳文
計算機系統應用 2018年11期
關鍵詞:詞組準確率分組

秦 波,顧乃杰,張孝慈,林傳文

(中國科學技術大學 計算機科學與技術學院 網絡計算與高效算法實驗室,合肥 230027)

(安徽省計算與通信軟件重點實驗室,合肥 230027)

(中國科學技術大學 先進技術研究院,合肥 230027)

1 引言

驗證碼(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA)是一種用于區分人類行為與機器行為的算法.作為互聯網行業通用的基礎安全策略,驗證碼擔負著保護網絡賬號安全體系的第一道防御,用以驗證和防范機器程序的惡意行為,如何提升驗證碼的安全性并防止自動破解程序,已經成為一個至關重要的問題.

作為深度神經網絡的一種,卷積神經網絡(Convolutionional Neural Networks,CNN)在圖像識別領域內表現出優異的性能[1],且大大優于傳統的機器學習方法.較傳統方法而言,CNN的主要優勢在于卷積層提取的圖像特征具有很強的表達能力,避免了傳統識別技術存在的數據預處理、人工設計特征等問題.在具備足夠的標注樣本的情況下,只需要定義一個合適的網絡模型,就能夠取得遠高于傳統方法所取得的識別效果.

本文設計了一種基于卷積神經網絡的圖像驗證碼識別方法,對傳統的卷積神經網絡訓練中存在的模型復雜、輸出層參數冗余等問題進行了改進.本文通過卷積層級聯、殘差學習、全局池化和分組卷積等技術手段,在保證網絡識別精度的前提下,壓縮了模型規模.

2 相關工作

鑒于驗證碼在互聯網的廣泛應用,國內外學者對驗證碼的設計和識別進行了廣泛的研究.Zhang和Wang[2]利用傳統圖像處理方法并結合KNN算法進行驗證碼識別研究.李興國等人[3]提出一種滴水算法分割驗證碼.Lu等人[4]分別提出了不同的字符分割算法并結合SVM分類算法及BP神經網絡進行字符識別.Yan等人[5]分析并研究了現有微軟驗證碼的缺陷,并設計了虛擬問答及基于情感方法對驗證碼進行識別.Mori和Malik[6]利用形狀上下文方法對驗證碼進行了識別研究.

深度神經網絡在科學研究中被廣泛使用,Yann LeCun等人[7]提出了基于CNN的文字識別系統LeNet-5.Hinton等人[8]提出的深度置信網絡(Deep Belief Network,DBN)可以更快地訓練深度網絡.在圖像應用中,CNN采用隨機梯度下降(Stochastic Gradient Decent,SGD)和GPU (Graphics Processing Unit)加快了深度網絡的訓練速率.IDSIA實驗室[9]針對手寫中文漢字識別提出一種多列CNN模型,通過訓練多個CNN網絡并對結果進行簡單的平均集成實現并行訓練.Zhong等人[10]提出一種HCCR-GoogLeNet模型,利用GoogLeNet的網絡結構并引入手寫漢字的多尺度多方向特征,完成脫機手寫中文漢字識別.范望等人[11]構造出卷積神經網絡用于漢字驗證碼識別.針對不分割的驗證碼識別,Google研究人員[12]采用概率模型和卷積神經網絡開發了一種無需字符分割的街道門牌識別系統,對門牌準確率高達90%.Yann LeCun等人[13]采用空間位移神經網絡(SDNN)和隱馬爾科夫模型(HMM)對帶有粘連的手寫字符進行識別.Shi等人[14]利用CNN和R N N結合思想,提出一種卷積循環神經網絡(CRNN)完成驗證碼的整體識別.

3 網絡模型設計

本文提出的卷積神經網絡模型主要由以下模塊組成: 級聯卷積層、殘差層以及分類池化層,如圖1所示,下面對這些結構進行具體介紹.

圖1 本文網絡結構

3.1 級聯卷積層

圖2 級聯卷積層

(1) 參數量

假設圖2中所有數據有C個通道,下面將比較3個 3 ×3卷積核和1個卷積核的參數量.

由公式(1)和(2)可知,兩者的參數量倍數為:

(2) 感受野

感受野(Receptive Field)計算方法如下:

3.2 殘差層

隨著網絡深度的增加,網絡出現無法收斂、性能退化等問題[16].主要原因在于經典卷積神經網絡參數梯度值等于所有前層參數梯度的乘積,當淺層的參數梯度值過小就容易產生梯度消失的問題,從而影響到網絡的表現性能.研究顯示,殘差結構[17]不僅能夠解決網絡深度深而性能退化的問題,而且也解決了梯度消失的問題.

下面將對殘差層進行分析.為了不失一般性,從第l層到第L層的前向過程可表示為:

可以看出,網絡參數學習過程實際上等價于對前面層的參數梯度的求和過程,即從是線性疊加的過程,因而允許網絡深度增加,而不會出現梯度消失的問題.

圖3 殘差模塊

圖4 卷積分組

假如輸入特征圖個數為N,該層的卷積核(kernel)個數為M,計算下一層特征圖是利用M個kernel和N個輸入特征圖.引入group后,計算下一層特征圖則利用M/group個kernel和N/group個輸入特征圖.

3.3 分類池化層

傳統的卷積神經網絡中,卷積層和池化層等用于特征提取,隨后利用一到多個全連接層將學習到的特征空間隱式地映射到樣本標記空間,最后在輸出層由softmax激活函數完成目標分類任務.全連接層的弊端在于參數過多,容易出現過擬合等情況.本文使用分類池化層來替代全連接層[18](圖5).這里分類池化層實際上是全局平均池化層(圖6),其沒有需要優化的參數,從而可以避免出現過擬合情況.同時其對空間信息求和,因而對空間變換更加健壯.

圖5 分類池化層

圖6 全局平均池化層

圖6顯示是全局平均池化層,輸出特征圖的計算方法如下:

3.4 網絡結構

本文結構的具體網絡參數見表1.其中Conv1_x和Pool1是級聯卷積層,Conv2_x至Conv5_x是殘差層,Pool2是分類池化層.

4 實驗與分析

4.1 平臺介紹

本文在深度學習框架Caffe的基礎上,實現了基于卷積神經網絡的圖像驗證碼識別方法.

實驗平臺使用Intel XeonE5-2620 v2 2.1 GHZ CPU,126 GB 內存,以及 NVIDIA Tesla K40m GPU.其中Tesla K40m GPU單精度峰值4.29 Tflops,顯存為12 GB GDDR5,顯存帶寬為288 Gbytes/sec.

4.2 數據集介紹

本文實驗數據以鐵路購票網站驗證碼和正方教務系統驗證碼為例.

(1) 購票網站驗證碼

購票網站驗證碼共收集109 900張,包含圖形302類,訓練圖片數112 599張; 包含中文詞組302類,訓練圖片數39 931張.對于驗證碼識別之前,首先需要對驗證碼進行預處理操作,分割成單獨子圖和中文漢字或詞組.具體購票網站驗證碼如圖7所示.

表1 網絡參數

圖7 購票網站驗證碼

(2) 正方教務系統驗證碼

正方教務系統驗證碼由字母和數字構成,共包含33類,訓練驗證碼數5950張.對于驗證碼識別之前,需要對驗證碼進行預處理,包含去噪以及分割等步驟.該驗證碼如圖8所示.

圖8 正方教務系統驗證碼

4.3 鐵路購票驗證碼實驗

鐵路購票網站驗證碼包含圖形驗證碼和中文驗證碼.

(1) 圖形驗證碼

對于圖形分割部分,由于驗證碼中八張子圖尺寸與位置均固定,故考慮直接設置分割點實現分割.同時,對于圖片數較少的類別,采取數據增強方式來擴充訓練數據集,主要包括圖像縮放、旋轉和顏色變換等.

對于圖形識別部分,圖形驗證碼共302類,訓練集圖片82 599張,測試集圖片30 000張.實驗參數如下:訓練mini-batch大小設置為32,訓練最大迭代為250 000次.訓練過程中前100 000次迭代的學習率為0.01,后面每隔40 000次學習率衰減1/10,梯度更新方法為Momentum,值設置為0.9.本文測試傳統卷積神經網絡模型,包含AlexNet[1],GoogLeNet[19]以及ResNet50[17],并與本文方法進行比較,實驗結果如表2.

表2 模型在圖形驗證碼上的準確率和模型大小

(2) 中文驗證碼

對于字符分割部分,本文利用垂直投影算法分割出單個詞組,而并非是中文字符.該方法好處是盡可能避免切分單字帶來的誤差.下面是中文詞組分割的算法.

算法1 基于中文詞組分割算法

1) 從驗證碼中截取出中文漢字部分ChiWords;

2) 對ChiWords進行灰度化、二值化處理,得到BChiWords;

3) 從BChiWords中依次統計出每列黑色像素點個數BNP;

4) 設置閾值T1,T2.如果BNP小于閾值T1,則說明此位置有可能是分割點,記連續分割點的起止位置s和t.如果時,保存s和t.

5) 根據結果切分中文詞組,并獲取下一張驗證碼,返回第1)步.

6) 直至終止條件滿足,結束.

對于字符識別部分,中文驗證碼包含中文詞組302類,訓練集圖片數27 982張,測試集圖片11 949張.基于字符分割識別實驗,本文利用開源Tesseract軟件實驗和基于AlexNet模型的中文識別實驗,實驗記為SplitAlexNet; 基于詞組分割識別實驗,主要考慮AlexNet,GoogLeNet,ResNet50和本文方法.實驗結果見表3.

表3 模型在中文驗證碼上的準確率和模型大小

(3) 整體驗證碼

實驗數據為購票網站驗證碼,測試驗證碼988張,與上述實驗使用的數據集不同.

整體驗證碼識別過程: 首先對驗證碼預處理,然后對中文詞組和子圖識別.中文詞組識別結果與詞組標注結果進行比對,如果詞組識別無誤,將符合詞組的子圖識別結果下標與標簽文件進行比較(圖9).實驗結果見表4.

圖9 整體識別過程

表4 模型在整體驗證碼上的準確率和模型大小

從表2可知,本文方法參數量最少,大小為24.96 MB.且在測試集的top1準確率最高,比AlexNet,GoogLeNet,ResNet50分別高1.24%,0.44%,0.06%.

表3的結果顯示,基于字符分割識別的方法,詞組識別準確率較低,其中較好的模型是SplitAlexNet,其top1準確率達到75.20%; 基于中文詞組識別的方法,本文方法準確率達到99.14%,高于傳統的AlexNet,GoogLeNet,ResNet50神經網絡模型準確率.與此同時本文方法參數量最少,分別比傳統神經網絡參數量降低9.40倍,23.25倍,1.26倍和3.32倍.

從表4可知,本文提出的整體驗證碼識別準確率要比其它網絡模型高,且模型更小.

4.4 正方教務系統驗證碼實驗

該驗證碼訓練集圖片4630張,測試集圖片1320張.本文測試傳統的卷積神經網絡模型,包含AlexNet,GoogLeNet,ResNet50,并與本文方法進行對比.

實驗參數如下: 訓練mini-batch大小設置為32,訓練最大迭代30 000次.訓練過程中前8 000次學習率為0.001,后面每隔6 000次學習率衰減1/10,梯度更新方法為Momentum,值設置為0.9.

通過表5和表6可知,準確率方面,本文方法的準確率不低于傳統神經網絡模型; 模型大小方面,本文方法參數量比AlexNet,GoogLeNet和ResNet50要少.

表5 模型在字符上的準確率及模型大小

表6 模型在正方驗證碼上的準確率及模型大小

4.5 實驗分析

本文重點考慮在不影響模型準確率的前提下,進一步減少模型的參數量,即模型規模.通過上述實驗可以看到,本文網絡結構是基準模型中參數量最少的,同時驗證碼的識別效果比其它網絡要好.接下來將具體分析原因.

一是模型參數量縮減方面.本文利用級聯卷積層減少了網絡參數,增加了網絡的非線性.同時在殘差層調整卷積分組個數,利用全連接層替換.這幾個方面的改進能夠很明顯地看出網絡規模變小.

本文調整卷積分組的個數,一方面使得卷積層計算加快,模型參數量減少,同時也影響識別的準確率,下面將實驗說明卷積分組對網絡結構準確率的影響.

(1) 卷積分組實驗

卷積分組不僅能夠降低網絡的規模,同時卷積分組個數也影響著網絡的識別率.本文將對分組個數進行實驗,考慮在不同的分組下,本文方法的準確率變化情況.

為了說明卷積分組對實驗準確率的影響,將在圖形驗證碼和中文驗證碼上進行實驗分析.通過表7和表8容易看出,對于不同數據集最優的group選擇也不同.

表7 卷積分組對圖形驗證碼準確率影響

表8 卷積分組對中文驗證碼準確率影響

(2) 特征圖可視化

通過特征圖可視化能夠更好地理解網絡的特征學習過程,下圖是利用本文方法識別的最后層可視化結果.

圖10顯示的是本文方法在最后層特征圖的激活程度.可以看出無論是中文詞組還是圖形驗證碼,相同類別的圖片在最后層的激活程度相似,而不同類別之間的激活程度卻迥然不同.

圖10 最后層特征圖可視化結果

5 總結

本文利用卷積層級聯、殘差學習、全局池化、卷積分組等方法,提出了一種基于卷積神經網絡的驗證碼識別方法.實驗表明該方法較傳統網絡模型具有參數量少的特點,而且有著更高的識別準確率.此外,本文還討論了卷積分組對準確率的影響,并通過實驗選出性能最優的卷積分組.接下來的工作將繼續優化網絡模型結構,同時也將根據本文的實驗結果分析如何提升驗證碼的安全性.

猜你喜歡
詞組準確率分組
乳腺超聲檢查診斷乳腺腫瘤的特異度及準確率分析
不同序列磁共振成像診斷脊柱損傷的臨床準確率比較探討
2015—2017 年寧夏各天氣預報參考產品質量檢驗分析
頸椎病患者使用X線平片和CT影像診斷的臨床準確率比照觀察
分組搭配
怎么分組
分組
副詞和副詞詞組
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合