本發(fā)明涉及一種字符識別方法,更具體的,涉及一種字符驗證碼識別的深度學(xué)習(xí)方法及裝置。
背景技術(shù):
驗證碼(captcha)是一種反向圖靈測試技術(shù),常在網(wǎng)站中用于區(qū)分人類用戶和計算機程序,防止破解密碼,刷票,或者是論壇灌水等惡意行為,可以有效保障網(wǎng)站的安全和正常運行。驗證碼的設(shè)計,是利用了人類對于物體、字符的識別極其容易但是對計算機卻非常困難的特點。驗證碼的識別,是人工智能領(lǐng)域一個重要的研究課題。研究驗證碼的破解方法,可以用來檢測驗證碼安全性,也可以對網(wǎng)站驗證碼設(shè)計者有很大的借鑒作用。
驗證碼有很多形式,但是最常見的是字符型驗證碼,即一些隨機產(chǎn)生的中英文字符,在旋轉(zhuǎn)和扭曲后,加上一些隨機線和噪聲點背景的擾動,生成驗證碼圖片。因為驗證碼的圖片和正常的文字圖片相比,已經(jīng)發(fā)生了嚴重的扭曲,所以一般的光學(xué)字符識別軟件很難正常識別出來其中的文字。
一般的驗證碼識別流程,如文獻[shujunli,rolandschmitz.breakinge-bankingcaptchas.proceedingsof26thannualcomputersecurityapplicationsconferenceacsac2010]中提到的方法,可以大致分為預(yù)處理,定位,切分和識別四個步驟。用二值化,背景去噪,去干擾線算法等一系列預(yù)處理工作,是為了得到更清晰的圖片,便于后續(xù)的流程。定位操作是把字符從圖片中找出來,切分則是把連續(xù)的序列字符,切分成單一的字符,識別則是針對每個單一的字符識別,可以轉(zhuǎn)換成機器學(xué)習(xí)中的分類任務(wù)。如果是傳統(tǒng)的分類器,如支持向量機,則還要多一個對圖片的特征提取工作。
上述論文中的方法,造成識別率的瓶頸主要是單字切分這一步。由于人工智能技術(shù)的發(fā)展,簡單的驗證碼很容易被破解,因此驗證碼的設(shè)計也越來越復(fù)雜,其中最常見的就是字符之間存在著嚴重的筆畫粘連。如果用簡單的垂直投影切分算法,則無法很好地切分出粘連的兩個單字符,其他基于切分點的方法又復(fù)雜而效果難以盡如人意。此外,把驗證碼的識別分成獨立的單字符來識別,在如中文成語這種帶有語義的驗證碼識別中,就會丟失上下文信息。這些缺點都會很大程度上影響最終的識別效果。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的,就是為了構(gòu)建一種把定位、切分和識別結(jié)合起來的端到端(end-to-end)的深度學(xué)習(xí)方法,即直接輸入圖片,系統(tǒng)會預(yù)測整個圖片中的序列字符結(jié)果。通過有監(jiān)督訓(xùn)練的方法,訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)(convolutionalneuralnetwork)來做特征提取,用多個聯(lián)合的softmax分類器做識別。較之以前傳統(tǒng)的方法,該方法模型搭建簡單,準(zhǔn)確率也大大提升,且因為是端到端的訓(xùn)練方法,不同的驗證碼識別思路基本相同,而不需要像原來那樣針對性地重新尋找破解思路。
為實現(xiàn)上述目的,本發(fā)明提供了一種字符驗證碼識別的深度學(xué)習(xí)方法,該方法包括如下步驟:
步驟1,利用有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集來訓(xùn)練模型;
步驟2,用訓(xùn)練好的模型來預(yù)測新的驗證碼圖片中的文字;
其中,步驟1還包括訓(xùn)練集的收集、模型訓(xùn)練的粒度和交叉驗證過程。
更具體的,所述步驟1中所述訓(xùn)練集的收集具體包括:
若深度學(xué)習(xí)需要大量的有標(biāo)注數(shù)據(jù),則利用爬蟲程序,在網(wǎng)站獲取若干驗證碼樣本,用打碼平臺的眾包服務(wù)標(biāo)注數(shù)據(jù);
若需要的樣本數(shù)不多,則手動標(biāo)注數(shù)據(jù)。
更具體的,所述模型訓(xùn)練的粒度具體包括:粗粒度式地從頭訓(xùn)練模型或者在訓(xùn)練好的模型基礎(chǔ)上進行精細調(diào)參。
更具體的,所述交叉驗證具體包括:
通過交叉驗證的方法選出最優(yōu)的一個超參組合,所述超參是指深度學(xué)習(xí)的超參,包括學(xué)習(xí)率,權(quán)重衰減指數(shù),dropout概率等。
更具體的,所述步驟1中利用有標(biāo)注的數(shù)據(jù)來訓(xùn)練模型具體包括:
將所述有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集圖片輸入到卷積神經(jīng)網(wǎng)絡(luò)(cnn)中;
對所述圖片進行特征提??;
將提取出的所述特征輸入到輸出變量模型中進行訓(xùn)練,得出最優(yōu)的超參組合。
根據(jù)本發(fā)明的另一方面,還提供了一種字符驗證碼識別的深度學(xué)習(xí)裝置,該裝置包括:
模型訓(xùn)練模塊,利用有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集來訓(xùn)練模型;
預(yù)測模塊,用訓(xùn)練好的模型來預(yù)測新的驗證碼圖片中的文字;
其中,模型訓(xùn)練模塊還包括訓(xùn)練集收集模塊、模型訓(xùn)練的粒度模塊和交叉驗證模塊。
更具體的,所述訓(xùn)練集收集模塊具體用于:
若深度學(xué)習(xí)需要大量的有標(biāo)注數(shù)據(jù),則利用爬蟲程序,在網(wǎng)站獲取若干驗證碼樣本,用打碼平臺的眾包服務(wù)標(biāo)注數(shù)據(jù);
若需要的樣本數(shù)不多,則手動標(biāo)注數(shù)據(jù)。
更具體的,所述模型訓(xùn)練的粒度模塊具體包括:粗粒度式地從頭訓(xùn)練模型或者在訓(xùn)練好的模型基礎(chǔ)上進行精細調(diào)參。
更具體的,所述交叉驗證模塊具體用于:
通過交叉驗證的方法選出最優(yōu)的一個超參組合,所述超參是指深度學(xué)習(xí)的超參,包括學(xué)習(xí)率,權(quán)重衰減指數(shù),dropout概率等。
更具體的,所述模型訓(xùn)練模塊利用有標(biāo)注的數(shù)據(jù)來訓(xùn)練模型具體包括:
將所述有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集圖片輸入到卷積神經(jīng)網(wǎng)絡(luò)(cnn)中;
對所述圖片進行特征提?。?/p>
將提取出的所述特征多個聯(lián)合的softmax分類器中進行訓(xùn)練,得出最優(yōu)的超參組合。
本發(fā)明模型搭建簡單,大大提高了驗證碼識別的準(zhǔn)確率,且因為是端到端的訓(xùn)練方法,不同的驗證碼識別思路基本相同,而不需要像原來那樣針對性地重新尋找破解思路。
模型的設(shè)計和實現(xiàn)都是端到端的結(jié)構(gòu),設(shè)計和實現(xiàn)都較為清晰簡單,優(yōu)于傳統(tǒng)的定位、切分和識別的單獨流程組合設(shè)計,提高了模型識別的準(zhǔn)確率。面對新類型的驗證碼識別任務(wù),不需要額外重新設(shè)計系統(tǒng)算法。此外,cnn模型可以提供強大的特征提取功能,分類器性能大大提高,基本可以達到人類水平的識別率。如果需要實時的大量的驗證碼識別,可以很方便地嵌入網(wǎng)絡(luò)服務(wù)器系統(tǒng)中。利用gpu的高效并行計算性能,可以極大提高識別的速度。
本發(fā)明的附加方面和優(yōu)點將在下面的描述部分中給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
附圖說明
本發(fā)明的上述和/或附加的方面和優(yōu)點從結(jié)合下面附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1示出了根據(jù)本發(fā)明一種字符驗證碼識別的深度學(xué)習(xí)方法的流程圖;
圖2示出了本發(fā)明一實施例模型訓(xùn)練的流程圖;
圖3示出了本發(fā)明一實施例的全卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)示意圖;
圖4所示為本發(fā)明一實施例簡化的模型訓(xùn)練過程示意圖;
圖5示出了本發(fā)明一種字符驗證碼識別的深度學(xué)習(xí)裝置框架圖。
具體實施方式
為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結(jié)合附圖和具體實施方式對本發(fā)明進行進一步的詳細描述。需要說明的是,在不沖突的情況下,本申請的實施例及實施例中的特征可以相互組合。
在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的方式來實施,因此,本發(fā)明的保護范圍并不受下面公開的具體實施例的限制。
圖1示出了根據(jù)本發(fā)明一種字符驗證碼識別的深度學(xué)習(xí)方法的流程圖。
如圖1所示,根據(jù)本發(fā)明的一種字符驗證碼識別的深度學(xué)習(xí)方法,包括:
步驟1,利用有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集來訓(xùn)練模型;
步驟2,用訓(xùn)練好的模型來預(yù)測新的驗證碼圖片中的文字;
其中,步驟1還包括訓(xùn)練集的收集、模型訓(xùn)練的粒度和交叉驗證過程。
如圖2所示,為本發(fā)明一實施例模型訓(xùn)練的流程圖,主要有下面幾個步驟需要詳細闡述:
(1)訓(xùn)練集的收集
由于深度學(xué)習(xí)需要大量的有標(biāo)注標(biāo)簽的數(shù)據(jù),因而需要收集訓(xùn)練集??梢岳门老x程序,去網(wǎng)站定點下載驗證碼樣本,用打碼平臺的眾包服務(wù)標(biāo)注數(shù)據(jù)。而如果是只需要精調(diào)參,需要的樣本數(shù)不多的話,也可以自己手動標(biāo)注。
(2)模型訓(xùn)練的粒度
模型的訓(xùn)練有兩種粒度,一種是粗粒度式地從頭訓(xùn)練模型;另一種則是在訓(xùn)練好的模型基礎(chǔ)上進行精細調(diào)參(fine-turn)。
精調(diào)參在這里有兩個用途,一個是用于提高驗證碼識別的準(zhǔn)確率。因為打碼的花費和時間考慮,開始時拿到的標(biāo)簽數(shù)量有限,即使用了數(shù)據(jù)增強(data-argument)之類的方法,也無法得到較高準(zhǔn)確率的模型。因而,我們采用去網(wǎng)站不斷爬取新的驗證碼,同時利用目前的模型進行驗證碼識別,如果識別的結(jié)果通過了驗證,那么就保存該樣本,更大的訓(xùn)練集可以此增量積累更大的訓(xùn)練集。然后在該訓(xùn)練集上做精調(diào)參,就可以得到更高準(zhǔn)確率的模型。
另一種用途是可以做遷移學(xué)習(xí)(transferlearning)。即如果要識別的驗證碼類型和之前已經(jīng)訓(xùn)練完成的驗證碼類型相似,可以直接用少量數(shù)據(jù)(如100-1000張)在原來的模型上作進一步訓(xùn)練就可以得到很好的效果,這大大減少了標(biāo)注標(biāo)簽的成本。
(3)交叉驗證
深度學(xué)習(xí)的超參(hyperparameter)很多,如學(xué)習(xí)率,權(quán)重衰減指數(shù),dropout概率等,可以通過交叉驗證的方法選出最優(yōu)的一個超參組合。即在訓(xùn)練的過程中,分離出一個較小的驗證集,用驗證集的準(zhǔn)確率來衡量模型的泛化能力好壞。
圖3示出了本發(fā)明一實施例的卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)示意圖。
如圖3所示,該模型的原理非常簡單易懂,但是效果卻非常強大。該模型將圖片通過一系列的卷積、非線性修正、池化層(采樣)、全連接層,然后得到一個輸出層??梢孕问交x如下:給定輸入圖片x,輸出為變長序列s,模型的目標(biāo)是學(xué)習(xí)一個模型,在訓(xùn)練集上最大化條件概率logp(s|x)。輸出s為一些變量的集合,包括預(yù)測輸出序列長度的變量l,和大小為n的序列
例如n=5時,表示模型最多可以預(yù)測5位數(shù)字。l的取值范圍是0,1,2,3,4,5,5+,共7個取值。
圖4所示為本發(fā)明一實施例簡化的模型訓(xùn)練過程,首先,將圖片x輸入到cnn中,得到特征h后,輸入到l和
圖5示出了本發(fā)明一種字符驗證碼識別的深度學(xué)習(xí)裝置框架圖。
如圖5所示,該裝置包括:
模型訓(xùn)練模塊,利用有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集來訓(xùn)練模型;
預(yù)測模塊,用訓(xùn)練好的模型來預(yù)測新的驗證碼圖片中的文字;
其中,模型訓(xùn)練模塊還包括訓(xùn)練集收集模塊、模型訓(xùn)練的粒度模塊和交叉驗證模塊。
更具體的,所述訓(xùn)練集收集模塊具體用于:
若深度學(xué)習(xí)需要大量的有標(biāo)注數(shù)據(jù),則利用爬蟲程序,在網(wǎng)站獲取若干驗證碼樣本,用打碼平臺的眾包服務(wù)標(biāo)注數(shù)據(jù);
若需要的樣本數(shù)不多,則手動標(biāo)注數(shù)據(jù)。
更具體的,所述模型訓(xùn)練的粒度模塊具體包括:粗粒度式地從頭訓(xùn)練模型或者在訓(xùn)練好的模型基礎(chǔ)上進行精細調(diào)參。
更具體的,所述交叉驗證模塊具體用于:
通過交叉驗證的方法選出最優(yōu)的一個超參組合,所述超參是指深度學(xué)習(xí)的超參,包括學(xué)習(xí)率,權(quán)重衰減指數(shù),dropout概率等。
更具體的,所述模型訓(xùn)練模塊利用有標(biāo)注的數(shù)據(jù)來訓(xùn)練模型具體包括:
將所述有標(biāo)注標(biāo)簽的數(shù)據(jù)訓(xùn)練集圖片輸入到卷積神經(jīng)網(wǎng)絡(luò)(cnn)中;
對所述圖片進行特征提?。?/p>
將提取出的所述特征多個聯(lián)合的softmax分類器中進行訓(xùn)練,得出最優(yōu)的超參組合。
本發(fā)明實現(xiàn)了一個通用的驗證碼識別系統(tǒng)方法,在遇到一個新的網(wǎng)站驗證碼之后,可以通過訓(xùn)練該模型,或者對已經(jīng)訓(xùn)練好的模型精細調(diào)參,得到一個高準(zhǔn)確率的識別器,從而破解網(wǎng)站的驗證碼阻礙,可以為爬蟲程序之類的軟件提供服務(wù)。
在本說明書的描述中,術(shù)語“一個實施例”的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)或特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或?qū)嵗6?,描述的具體特征、結(jié)構(gòu)或特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。