1. 程式人生 > >如何使用深度學習破解驗證碼 keras 連續驗證碼

如何使用深度學習破解驗證碼 keras 連續驗證碼

在實現網路爬蟲的過程中,驗證碼的出現總是會阻礙爬蟲的工作。本期介紹一種利用深度神經網路來實現的端到端的驗證碼識別方法。通過本方法,可以在不切割圖片、不做模板匹配的情況下實現精度超過90%的識別結果。

本文分為兩個部分,第一個部分介紹如何利用深度神經網路實現驗證碼的訓練和識別,第二個部分介紹在實現過程中需要克服的工程問題。

一. 基於深度神經網路的驗證碼識別

驗證碼的識別是從圖片到文字的過程。傳統的演算法如OCR正是為了解決此類問題而設計的。然而,在真實情形中,驗證碼通常並不以規則的文字出現,即文字通常會有不同程度的變形,影象本身也通常會被新增或多或少的噪聲。這些干擾的出現,使得文字分割、模板匹配不再有效,進而OCR演算法也很難解析出結果。

近年來,深度神經網路(DNN)在影象識別領域已經被證明了強大的識別能力。單個文字的識別是典型的分類問題。通常的做法為訓練一個深度神經網路,網路的最後一層分為N種類別,代表字元的數目。比如對於英文字母,最後一層的分類器便是26個。比如經典的LeNet(http://yann.lecun.com/exdb/lenet/)即為解決單個文字識別的網路:

然而驗證碼通常包含多個字元,如何利用現有的網路實現這類分類問題呢?實際上這個問題再機器學習中被稱為多標籤訓練問題。和上述每個圖片輸入只對應一個標籤類別對比,這類分類的輸出是多個標籤。我們同樣可以對傳統的神經網路稍作改變以適應這種情況。

我們以最簡單的英文字母為例介紹這個過程。如圖一所示,此種驗證碼由5個字母組成;每個字母只取大寫,共有26種類別;圖片中有干擾線貫穿文字,使得文字分割比較困難。

圖一. 驗證碼例項

接下來,我們設計如圖二卷積神經網路:

圖二. 卷積神經網路

圖二中的網路和一般的CNN網路沒有什麼特殊之處,前部均是卷積、Pooling層,只有最後在分類時,將26個類別擴增到26*5=130個類別。對於每幅圖片的標籤而言,在這130維的向量中,每26個維度中有一個1,其餘為0,編碼了五個字母。接著依然使用交叉熵作為代價函式進而優化此網路。就這樣,只要對原先的分類網路做簡單的改變即可解決驗證碼的識別問題。

再如對於數學表示式型別的驗證碼,我們的網路也只是在編碼上把26分類問題變成了13分類問題。下例中(見圖三)最後一層的分類器便設計為3*13=39個類別。

 

圖三. 數學式型別驗證碼的識別

按照此種思路我們破解了很多風格的驗證碼,如圖四所示:

圖四. 不同風格驗證碼破解例項

二. 一些需要解決的實際工程問題

(1) 合成訓練資料

前文提到訓練的前提是已經擁有了大量的訓練資料,而實際在識別驗證碼時我們很難獲取足夠多的標註過的訓練資料。所以,我們不得不人工合成訓練資料。這一部分通常可以呼叫Java或者C#的文字渲染庫來完成。

訓練的資料並不是越多越好,主要的問題在於人工合成的資料未免和真實驗證碼在形態上有些差距,我們都很難合成出一模一樣的結果。字型、字號及變形程度都或多或少與真實資料不同,而這種不同可能直接導致訓練出的網路面對真實資料時無法發揮作用。

我們的經驗是,針對真實資料的特點,在無法很相似地合成出訓練資料的情況下,要增大樣本的多樣性,實際上也是遵循了深度學習中資料增強(Data Augmentation)的思想。如圖五所示,左邊為真實資料,我們在合成數據時特意增加了每個文字的旋轉、平移,加大了噪聲,使得訓練出的網路能應對資料足夠的變化,從而可以識別出左圖中真實的例子。否則即便在合成數據上達到了很高的精度,在真實資料上也依然可能精度極低(即在合成數據上過擬合)。

圖五. 合成數據實例

 (2) 網路大小的選擇

針對不同的任務,網路大小對結果的影響也是巨大的。並非所有的任務都得使用很深的網路來訓練。理論上說,越深的網路自由度越大,同時也非常容易過擬合。雖然有weight_decay這樣引數可以一定程度的對抗過擬合,但通常難度依然是很大的。所以一般來說,對於不太複雜的驗證碼應該選擇較小的網路,只有遇到比較複雜的驗證碼如中文的成語等,我們的經驗才是複雜的網路下效果才更好。

總之,驗證碼識別可以作為深度學習的一個練手專案來學習,在這個實際專案中可以更容易理解到深度學習理論中諸多概念。

轉載於:http://www.saluzi.com/t/topic/16027

相關推薦

如何使用深度學習破解驗證 keras 連續驗證

在實現網路爬蟲的過程中,驗證碼的出現總是會阻礙爬蟲的工作。本期介紹一種利用深度神經網路來實現的端到端的驗證碼識別方法。通過本方法,可以在不切割圖片、不做模板匹配的情況下實現精度超過90%的識別結果。 本文分為兩個部分,第一個部分介紹如何利用深度神經網路實現驗證碼的訓練和識別,第二個部分介紹在實現過程中需要克服

使用深度學習破解字元驗證(轉)

驗證碼是根據隨機字元生成一幅圖片,然後在圖片中加入干擾象素,使用者必須手動填入,防止有人利用機器人自動批量註冊、灌水、發垃圾廣告等等 。 驗證碼的作用是驗證使用者是真人還是機器人;設計理念是對人友好,對機器難。 上圖是常見的字元驗證碼,還有一些驗證碼使用提問的方式。

機器學習深度學習系列連載: 第二部分 深度學習(九)Keras- “hello world” of deep learning

Keras Kearas 是深度學習小白程式碼入門的最佳工具之一。 如果想提升、練習程式碼能力,還是建議演算法徒手python實現。 複雜的深度神經網路專案還是推薦TensorFlow或者Pytorch Keras是一個高層神經網路API,Keras由純Pyt

【火爐煉AI】深度學習006-移花接木-用Keras遷移學習提升效能

【火爐煉AI】深度學習006-移花接木-用Keras遷移學習提升效能 (本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, Keras 2.1.6, Tensorflow 1.9.0) 上一篇文章我們用

深度學習 (四)Keras利用CNN實現圖片識別(Mnist、Cifar10)

視覺集        視覺資料庫是用來提供給圖片識別領域用素材,目前各個教材常用的主要有手寫數字識別庫、10中小圖片分類庫,詳細介紹如下: Mnist       &

深度學習(六)keras常用函式學習

inputs = Input((n_ch, patch_height, patch_width)) conv1 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(inputs) conv1 = Dropout(0.

2_初學者快速掌握主流深度學習框架Tensorflow、Keras、Pytorch學習程式碼(20181211)

初學者快速掌握主流深度學習框架Tensorflow、Keras、Pytorch學習程式碼 一、TensorFlow 1、資源地址: 2、資源介紹: 3、配置環境: 4、資源目錄: 二、Keras

深度學習(十)keras學習筆記

作者:hjimce keras與torch7的使用非常相似,是最近才火起來的深度學習開源庫,底層是用了theano。keras可以說是python版的torch7,對於快速構建CNN模型非常方便。同時也包含了一些最新文獻的演算法,比如Batch Noramlize,文件

深度學習之安裝 TensorFlow Keras

前提需要安裝好: ①Anaconda3-4.2.0-Windows-x86_64 ②pycharm 因為我的顯示卡器的原因只能進行CPU安裝 安裝好了Anaconda就是安裝了python的環境,你在cmd那裡輸入python看看它有沒有顯示你的python版本資訊

帶你測試對比深度學習框架!TensorFlow,Keras,PyTorch...哪家強?(附資料集)

授權自AI科技大本營(ID: rgznai100) 本文長度為3556字,建議閱讀7分鐘 亞馬遜MXNet在CNN、RNN與NLP情感分析任務上效能強勁,而TensorFlow僅擅長於特徵提取。 深度學習框架哪家強:TensorFlow?Caffe?MXNet?Keras?PyTorch?對於這幾大

基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-01-FAQ

本文主要介紹一下Keras的問答部分,其實很簡單,後邊可能不會詳細說到,提前涼一下,便於翻看。 Keras介紹: Keras是一個極度簡化、高度模組化的神經網路第三方庫。基於Python+Th

基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-08-規則化(規格化)

通過前幾篇的介紹,網路已經選擇好了優化器、目標函式、模型以及啟用函式。並且給權值選擇了初始化方法。那麼接下來就是訓練。訓練過程後會出現什麼問題呢?過擬合!而有效解決過擬合的方法就是加入規則項。具體的

深度學習【3】keras:儲存keras學習好的深度神經網路模型引數為二進位制和txt檔案

http://blog.csdn.net/linmingan/article/details/50906141 由於工程需要,儲存為hdf5的keras權值在c/c++中的讀取比較不方便。因此將keras中的權值剝離出來,並儲存為二進位制檔案或者txt檔案。在進行程式碼的編

深度學習_4.2】Keras構建殘差神經網路

殘差神經網路可幫助避免多層神經網路的梯度消失(主要解決的問題)、梯度爆炸等現象 普通殘差塊 First component of main path: The first CONV2D has F1F1 filters of shape (1,1) and a st

基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-03-優化器

optimizers(優化器)。機器學習包括兩部分內容,一部分是如何構建模型,另一部分就是如何訓練模型。訓練模型就是通過挑選最佳的優化器去訓練出最優的模型。         Keras包含了很

深度學習模型stacking模型融合python代,看了你就會使

shuffle The max and ots shape onf 第一個 求平均值 話不多說,直接上代碼 1 def stacking_first(train, train_y, test): 2 savepath = ‘./stack_op{}_dt

使用深度學習的CNN神經網路破解Captcha驗證

樣本資料的生成與處理: 我們先來看看mnist(一個手寫體數字圖片的資料集,有55000張0-9的手寫體數字的圖片)中圖片和圖片標籤的資料形式: 已知mnist資料集中的每張圖片是28x28畫素的灰度影象。每張圖片上是一個單獨的手寫體數字。 程式碼如下: from tensorf

[TensorFlow深度學習深入]實戰二·使用CNN網路識別破解數字驗證

[TensorFlow深度學習深入]實戰二·使用CNN網路識別破解數字驗證碼 參考部落格。 在此基礎上做了小修改。 其中CNN網路部分仿照我們入門實戰六的內容,如果不太清楚CNN可以再去回顧一下。 本博文資料集。 程式碼部分 import os os.environ["KMP_D

深度學習驗證識別(-)keras環境搭建

5.如果不適用GPU進行運算,上面步驟就可以進行測試使用keras了,如果需要使用GPU,首先是用Nvidia的顯示卡。 gtx1060,gtx1080都比較不錯,再就是安裝cuda驅動。 進入cuda驅動下載網站:https://developer.nvidia.com/cuda-downloads下載相

深度學習下的驗證識別教程

www 2016年 復制 egit 關於 廣泛 效果 yun 概念 轉:https://bbs.125.la/thread-14031313-1-1.html 隨著大數據時代,人工智能時代的到來,深度學習的應用越來越廣,場景識別、目標檢測、人臉識別、圖像識別等等廣泛應用。在