李世成,東野長(zhǎng)磊
(山東科技大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,山東 青島 266590)
驗(yàn)證碼(CAPTCHA)是一種區(qū)分用戶(hù)是計(jì)算機(jī)還是人的公共全自動(dòng)程序。驗(yàn)證碼通常由字母和數(shù)字組成,為防止被機(jī)器自動(dòng)識(shí)別,其分辨率通常較低,圖片噪聲較大。字符被一定程度的扭曲或傾斜,字符間往往存在粘連,“用戶(hù)”需要識(shí)別并鍵入正確的字符。人眼隊(duì)驗(yàn)證碼的識(shí)別率可以達(dá)到80%以上,但自動(dòng)化程序識(shí)別準(zhǔn)確率往往低于 0.01%。這對(duì)于防止金融欺詐、電商刷單、惡意注冊(cè)等批量化行為具有較好的效果[1-2]。
鑒于驗(yàn)證碼在互聯(lián)網(wǎng)中的廣泛應(yīng)用,國(guó)內(nèi)外對(duì)驗(yàn)證碼的識(shí)別進(jìn)行了相關(guān)研究,出現(xiàn)了很多破解驗(yàn)證碼的技術(shù)。目前,驗(yàn)證碼識(shí)別主要有支持向量機(jī)(SVM)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)等方法[3]。對(duì)于噪聲較少并且字符位數(shù)固定的驗(yàn)證碼圖片,使用深度神經(jīng)網(wǎng)絡(luò)對(duì)整張驗(yàn)證碼圖片進(jìn)行多標(biāo)簽學(xué)習(xí)來(lái)完成分類(lèi)任務(wù)也可以達(dá)到很好的效果。也可以使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)與循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)結(jié)合的方式實(shí)現(xiàn)驗(yàn)證碼圖像端到端的識(shí)別[4]。
本文的驗(yàn)證碼數(shù)據(jù)來(lái)源于 2019年全國(guó)高校計(jì)算機(jī)能力挑戰(zhàn)賽,字符之間大多數(shù)存在粘連問(wèn)題,使用端到端的識(shí)別模型很容易遺漏掉字符。所以本文先進(jìn)行單個(gè)字符切割,對(duì)卷積神經(jīng)網(wǎng)絡(luò)添加注意力模塊,并使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)單個(gè)字符進(jìn)行識(shí)別。
如圖1所示,原始驗(yàn)證碼圖片中有很多椒鹽噪聲,這些噪聲對(duì)圖片識(shí)別效果有著很大的干擾作用。椒鹽噪聲也稱(chēng)為脈沖噪聲,是圖像中經(jīng)常見(jiàn)到的一種噪聲,它是一種隨機(jī)出現(xiàn)的白點(diǎn)或者黑點(diǎn),可能是亮的區(qū)域有黑色像素或是在暗的區(qū)域有白色像素(或是兩者皆有)。中值濾波是一種典型的非線(xiàn)性濾波,是基于排序統(tǒng)計(jì)理論的一種能夠有效抑制噪聲的非線(xiàn)性信號(hào)處理技術(shù),基本思想是用像素點(diǎn)鄰域灰度值的中值來(lái)代替該像素點(diǎn)的灰度值,讓周?chē)南袼刂到咏鎸?shí)的值從而消除孤立的噪聲點(diǎn)。如圖2所示,使用數(shù)字圖像處理中的中值濾波方法可以有效去除圖像中的噪點(diǎn)。
二維中值濾波的輸出公式為:
其中, (,)f x y, (,)g x y分別為原始圖像和處理后的圖像。W為二維模板,通常為3*3,5*5區(qū)域。也可以是不同的的形狀,如線(xiàn)狀,圓形,十字形,圓環(huán)形等。
圖1 原始圖像Fig.1 The original image
圖2 去噪處理后的圖像Fig.2 The denoised image
如圖3所示,在原始圖像中有字符之間相互重疊的部分,直接使用多分類(lèi)的圖像處理方法很難識(shí)別出正確的字符。如圖4所示,本文將原始圖片切割成4份只有單個(gè)字符的圖像,使用單分類(lèi)的模型進(jìn)行識(shí)別,可以大幅度提高識(shí)別精度。
圖3 原始圖像Fig.3 The original image
圖4 切割之后的圖像Fig.4 The image after cutting
驗(yàn)證碼識(shí)別可以看作是圖像分類(lèi)問(wèn)題,也可以看作是對(duì)圖像的序列識(shí)別問(wèn)題。近幾年,深度卷積神經(jīng)網(wǎng)絡(luò)在圖像分類(lèi)問(wèn)題上不斷創(chuàng)新,突破極限。從比較簡(jiǎn)單的 LeNet5[5]到更加深層網(wǎng)絡(luò)結(jié)構(gòu)的VGGNet[6],說(shuō)明了隨著網(wǎng)絡(luò)深度的增加,模型可以學(xué)習(xí)到更高級(jí)的圖像特征,使得圖像分類(lèi)的效果更加準(zhǔn)確。后來(lái),研究者發(fā)現(xiàn)不斷的堆疊網(wǎng)絡(luò)結(jié)構(gòu)并不能更進(jìn)一步的提升模型識(shí)別的效果。疊加過(guò)多的神經(jīng)網(wǎng)絡(luò)層會(huì)出現(xiàn)梯度消失或爆炸問(wèn)題,難以收斂。隨著殘差網(wǎng)絡(luò)的提出,深層網(wǎng)絡(luò)結(jié)構(gòu)的梯度消失問(wèn)題得以解決,ResNet[7]是經(jīng)典的深度殘差網(wǎng)絡(luò)模型。對(duì)于基于圖像序列的識(shí)別問(wèn)題,有研究者提出了一種新穎的卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(CRNN)[8],因?yàn)樗荄CNN和 RNN的組合。對(duì)于類(lèi)序列對(duì)象,CRNN與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型相比具有一些獨(dú)特的優(yōu)點(diǎn):(1)可以直接從序列標(biāo)簽(例如單詞)學(xué)習(xí),不需要詳細(xì)的標(biāo)注(例如字符);(2)直接從圖像數(shù)據(jù)學(xué)習(xí)信息表示時(shí)具有與DCNN相同的性質(zhì),既不需要手工特征也不需要預(yù)處理步驟,包括二值化/分割,組件定位等;(3)具有與RNN相同的性質(zhì),能夠產(chǎn)生一系列標(biāo)簽;(4)對(duì)類(lèi)序列對(duì)象的長(zhǎng)度無(wú)約束,只需要在訓(xùn)練階段和測(cè)試階段對(duì)高度進(jìn)行歸一化;(5)與現(xiàn)有技術(shù)相比,它在場(chǎng)景文本(字識(shí)別)上獲得更好或更具競(jìng)爭(zhēng)力的表現(xiàn);(6)它比標(biāo)準(zhǔn)DCNN模型包含的參數(shù)要少得多,占用更少的存儲(chǔ)空間。
2.2.1 圖像及標(biāo)簽處理
驗(yàn)證碼數(shù)據(jù)來(lái)源于 2019年全國(guó)高校計(jì)算機(jī)能力挑戰(zhàn)賽提供的5000張訓(xùn)練圖片和5000張測(cè)試圖片。原始圖像為40*120的RGB圖像,按照預(yù)處理階段進(jìn)行去噪和分割,每張?jiān)紙D像分割成 4張40*30的圖像。標(biāo)簽總共62類(lèi),分別是數(shù)字10類(lèi)、小寫(xiě)英文字母26類(lèi)和大寫(xiě)英文字母26類(lèi)。
2.2.2 網(wǎng)絡(luò)結(jié)構(gòu)
深度卷積神經(jīng)網(wǎng)絡(luò)中常用的圖像分類(lèi)模型有很多,例如:LeNet、VGG、ResNet和DenseNet[9]等。因?yàn)樵紙D像為3通道圖像,大多數(shù)圖像中字符與背景之間的對(duì)比度很小,并且更深層次的網(wǎng)絡(luò)過(guò)于龐大,對(duì)于網(wǎng)絡(luò)訓(xùn)練的硬件環(huán)境要求更高。所以本文選擇ResNet50作為基礎(chǔ)網(wǎng)絡(luò),并且在每個(gè)殘差塊中添加注意力模塊(CBAM)[10]。
如圖5所示,殘差學(xué)習(xí)單元將輸入端與輸出端短路連接,復(fù)制一個(gè)淺層網(wǎng)絡(luò)的輸出加給深層的輸出。殘差學(xué)習(xí)單元的輸出如下:
x為淺層的輸出, ()H x為深層的輸出, ()F x為夾在二者之間的變換。當(dāng)淺層的x代表的特征已經(jīng)足夠成熟,如果任何對(duì)于特征x的改變都會(huì)讓 loss變大的話(huà), ()F x會(huì)自動(dòng)趨向于學(xué)習(xí)成為0。在前向過(guò)程中,當(dāng)淺層的輸出已經(jīng)足夠成熟的時(shí)候,讓更深層能夠?qū)崿F(xiàn)恒等映射的作用[7]。
圖5 殘差學(xué)習(xí)的基本單元Fig.5 Residual learning:a building block
Convolutional Block Attention Module(CBAM),這是一種為卷積神將網(wǎng)絡(luò)設(shè)計(jì)的,簡(jiǎn)單有效的注意力模塊(Attention Module)。如圖 6所示,對(duì)于卷積神經(jīng)網(wǎng)絡(luò)的特征圖(feature map),CBAM從通道和空間兩個(gè)維度計(jì)算特征圖的注意力圖(attention map),然后將注意力圖與輸入的特征圖相乘來(lái)進(jìn)行特征的自適應(yīng)學(xué)習(xí)。對(duì)于中間層的特征圖F∈將會(huì)順序推理出一維的通道注意力圖和二維的空間注意力圖過(guò)程如下:
其中?為逐個(gè)元素之間相乘,首先將通道注意力模塊的輸出(channel attention map)與輸入(feature map)相乘得到F′,之后計(jì)算F′的空間注意力模塊的輸出(spatial attention map),并將兩者相乘得到最終的輸出F′。
圖6 卷積注意力模塊Fig.6 Convolutional block attention module
特征圖的每個(gè)通道都被視為一個(gè)特征檢測(cè)器,通道注意力模塊主要關(guān)注于輸入圖片中什么是有意義的。如圖7所示,通道注意力模塊使用最大池化和平均池化對(duì)特征圖在空間維度上進(jìn)行壓縮,使用由 MLP組成的共享網(wǎng)絡(luò)對(duì)這兩個(gè)不同的空間背景描述進(jìn)行計(jì)算得到通道注意力模塊的輸出。計(jì)算過(guò)程如下:
圖7 通道注意力模塊Fig.7 Channel attention module
空間注意力模塊主要關(guān)注于位置信息。如圖 8所示,空間注意力模塊在通道的維度上使用了最大池化和平均池化得到兩個(gè)不同的特征描述,然后將兩個(gè)特征合并,并使用卷積操作生成空間注意力的輸出。計(jì)算過(guò)程如下:
圖8 空間注意力模塊Fig.8 spatial attention module
在每個(gè)殘差學(xué)習(xí)單元的第三層卷積之后添加CBAM模塊。如圖9所示。
圖9 添加CBAM的殘差學(xué)習(xí)單元Fig.9 Residual learning with CBAM
添加了注意力模塊的 ResNet50模型的核心框架如表1所示,輸入為224*224*3的圖像,卷積層采用傳統(tǒng)的 5層架構(gòu),第一層卷積使用 7*7的卷積核,步長(zhǎng)為 2,padding為 3,接下來(lái)使用大小為3*3,步長(zhǎng)為2的卷積核進(jìn)行最大池化操作。輸出為 112*112*64。第二層到第五層使用添加了注意力模塊的殘差塊,每一層包含的殘差塊個(gè)數(shù)為[3,4,6,3]。最后經(jīng)過(guò)自適應(yīng)平均池化和全連接層輸出結(jié)果。
表1 模型架構(gòu)Tab.1 Model architecture
2.2.3 訓(xùn)練樣本集
首先,將切割的圖片數(shù)據(jù)按照每一類(lèi)樣本數(shù)據(jù)均等拆分成訓(xùn)練集和驗(yàn)證集,這樣可以使訓(xùn)練樣本更加均衡。使用Scikit-learn中的stratifiedKFold函數(shù)可以做到這一點(diǎn)。使用雙線(xiàn)性插值法放大到224*224大小,并且在訓(xùn)練集中隨機(jī)變換圖片的亮度、對(duì)比度、飽和度和色度,用來(lái)增強(qiáng)模型的泛化能力。使用交叉熵?fù)p失函數(shù)計(jì)算訓(xùn)練損失,并使用AdaBound[11]優(yōu)化函數(shù)進(jìn)行優(yōu)化。訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率隨著迭代次數(shù)的變化如圖10所示。
圖10 訓(xùn)練集和驗(yàn)證集準(zhǔn)確率變化圖Fig.10 Plot of accuracy for training set and validation
模型訓(xùn)練結(jié)束后,選取在驗(yàn)證集中準(zhǔn)確率最高的模型最為最終的模型,并且在5000張測(cè)試集中測(cè)試模型的準(zhǔn)確度。測(cè)試過(guò)程如圖11所示,首先讀取原始圖片,將原始圖片去噪并切割成4個(gè)單字符圖片,每張單字符圖片改變大小為 224*224,將 4個(gè)三維 224*224*3的單字符圖片按順序組合成四維4*224*224*3的數(shù)據(jù),將組合成的四維數(shù)據(jù)輸入模型進(jìn)行測(cè)試,將輸出的4個(gè)結(jié)果連接成字符串與正確的標(biāo)簽進(jìn)行比較計(jì)算準(zhǔn)確率。準(zhǔn)確率的計(jì)算公式如下:
模型在5000張測(cè)試集中的準(zhǔn)確率達(dá)到97.9%,部分識(shí)別結(jié)果如表2所示。
圖11 測(cè)試流程圖Fig.11 Test flow chart
表2 識(shí)別結(jié)果Tab.2 Recognition result
本文通過(guò)卷積神經(jīng)網(wǎng)絡(luò)對(duì)驗(yàn)證碼圖片進(jìn)行特征提取訓(xùn)練,在有線(xiàn)條干擾并且訓(xùn)練數(shù)據(jù)較少的情況下,模型依然能夠達(dá)到接近98%的準(zhǔn)確率。若能夠去除干擾線(xiàn)、增加訓(xùn)練數(shù)據(jù),或者使用多模型融合的方式,測(cè)試集的準(zhǔn)確率將會(huì)進(jìn)一步提高。從表 2可以看出,人眼能夠識(shí)別的驗(yàn)證碼圖片,模型也都可以正確的識(shí)別,模型識(shí)別錯(cuò)誤的圖片,人眼也很難正確分辨。隨著圖像識(shí)別技術(shù)的不斷發(fā)展,驗(yàn)證碼的生成規(guī)則也將發(fā)生改變。