韓鵬承,胡西川
(上海海事大學信息工程學院,上海 201306)
現如今在計算機視覺領域中已經取得了很多的研究成果,例如像光學字符識別(OCR)[1]從掃描文檔中提取文本信息已經取得了成功。但與此不同的是對于自然場景中的字符識別問題,由于像街景門牌號這樣的自然場景中的字符擁有復雜的圖像背景和各種各樣的噪聲,通過人工提取特征的方法無法達到很好的效果,這就導致對此類字符的識別存在著挑戰。直到以卷積神經網絡(Convoluted Neural Network,CNN)[2]為代表的深度學習興起才給這個難題帶來了突破性的進展。
20世紀90年代,由LeCun[3]等人發表了論文,確立了CNN的現代結構,并設計出了經典的LeNet-5網絡結構用來識別手寫數字,取得了很好的效果,這個成果也首次展示出卷積神經網絡在實際應用中的潛力和價值。由于當時可用于研究的樣本數據很少以及計算機性能不足,使得CNN的發展進程很緩慢。直到現在,大數據時代背景下,可用于研究的數據集得到了很大的擴展;CNN網絡經過多年的發展,它的結構得到了不斷的改進和完善網絡的性能進一步提高;現代計算機性能與之前相比有了很大幅度的進步,并提出利用GPU加速神經網絡的訓練和識別[4],與CPU相比GPU在單位面積/單位功耗上擁有更高的計算能力和吞吐帶寬,因此通過GPU訓練網絡可以大大提高效率并且GPU強大的計算能力可以使網絡在更大的數據集訓練提高精度。多方面的原因使得卷積神經網絡得到了發展。2012年Alex Krizhevsky等人發布了AlexNet網絡結構[5],該網絡是具有八層結構的深度卷積網絡,并用它在當年的ImageNet圖像分類競賽中取得了第一名的成績。除此之外,近年來還推出了很多比較有名的CNN 結 構 有 VGGNet[6]、GoogleNet[7]和 ResNet[8]。 將CNN應用在文本識別、圖像分類、情感識別、目標檢測等多個領域都取得了很多的研究成果。
傳統的圖像識別方法需要人工提取特征,由于人工提取特征的局限性,這種方法往往無法達到實際中對精度的要求。CNN是一種多層的網絡結,它通過從大量的數據中逐層學習和提取特征,自主地完成對數據的抽象。相比人工提取的特征使用CNN自動提取的特征進行識別可以達到更好的效果,且特征提取的過程變得更加簡潔有效。因此,越來越多的研究人員將CNN運用在字符識別上。如QIang Guo構造出了CNN-HMM混合模型[9],對街景門牌號的(Street View House Number,SVHN)數據集的識別率為81.07%。王強等人將主成分分析法(Principal Componets Analysis,PCA)和 CNN相結合[10],利用快速 PCA和 CNN對SVHN數據集的識別率為95.10%,這在識別效果上得到了很大的提高,但是需要花費很大的時間代價,該方法需要的訓練時間約為1周。Ma Miao[11]等人構造的改進LeNet-5在SVHN數據集上經過7個小時的訓練識別率達到90.35%,時間大大縮短但是識別率不高。
針對存在的不足,提出的基于深度卷積神經網絡的識別方法在網絡的結構上做出了改進,加深了網絡的深度增加了網絡的卷積層數和卷積核的數量并優化網絡結構;對圖像進行預處理,將原始圖像灰度化來弱化圖像背景顏色、光照條件等無關的特征,突出重要的特征。改進后該網絡在SVHN數據集上可以達到94.58%的識別率,訓練時間約為13小時。
卷積神經網絡是一種局部感知和權值共享的網絡結構,本質上就是指它相比較其他網絡會產生更少的可調參數,降低了學習復雜度;并且卷積神經網絡對圖像的平移、傾斜、縮放或其他形式的形變具有高度不變性,說明了卷積神經網絡具有優良的特性。
卷積神經網絡的典型結構如圖1所示,該網絡由輸人層、卷積層、池化層、全連接層及輸出層組成。輸入層是整個網絡的起點,網絡的輸入是二維的圖像;卷積層的作用是提取特征;池化層對輸入的特征圖尺寸進行壓縮使特征圖變小,降低網絡計算復雜度,并且進行特征壓縮提取主要特征;全連接層學習全局特征,將前面得到的局部特征整合到一起輸出給分類器;最后的輸出層是整個網絡的輸出。

圖1 典型卷積網絡結構
網絡結構基于AlexNet進行改進,共有7個卷積層。網絡的輸入是32×32的圖片,輸出是每個門牌號字符對應的分類。第一層卷積層的卷積核大小為5×5,卷積步長為2,卷積核數量為64個,使用ReLU作為非線性激活函數,然后使用 BN(Batch Normalization)[12]進行歸一化處理,最后連接了一個Max pooling層,大小為2×2,步長為1。第二層卷積層卷積核的大小為3x3,卷積步長為1,該層共有128個卷積核,隨后采用和第一層同樣的策略。第三層使用大小為3×3的卷積核,步長為1,共有256個卷積核,隨后采用同上的策略。第四層卷積核大小為3×3,步長為1,共有384個卷積核,后面也是采用同上的策略。從第五個卷積層開始連續堆疊了三個卷積層,卷積核大小都是3×3,步長為1,前兩個各有256個卷積核,最后一層有192個卷積核,之后使用ReLU作為激活函數,然后使用BN進行歸一化處理,最后連接一個窗口大小為2×2,步長為1的Max pooling層。此后連接3個全連接層,前兩個全連接層神經元的個數為1024,利用BN對結果進行歸一化,并采用Dropout策略來忽略一定量的神經元,可以明顯地減少過擬合現象,比例設置為0.2。最后一個全連接層神經元個數設置為10,也就是字符識別后的分類,連接Softmax分類器進行分類。
如果不使用激勵函數,神經網絡的每層都只是做線性變換,但是線性模型的表達能力不足無法處理復雜的非線性問題,所以通過激勵函數引入非線性因素可以提高模型的表達能力。經常用到的激活函數有sigmoid、tanh、和ReLU,他們各自的公式如下。其中ReLU函數要比sigmoid和tanh等函數具有更快的收斂速度,能節省大量的訓練時間。
sigmoid函數:

tanh函數:

ReLU函數:

隨著深度學習的發展,隨機梯度下降成了訓練深度網絡的主流方法。但是該方法存在不足,大量參數的設置需要人為的去完成,例如網絡的初始權重和bias、網絡的學習率、權重變化系數、Dropout比例等。這些參數對網絡的性能有很大的影響,而調節這些參數需要花費很多的時間。BN的出現使得這些調參變得不再那么重要。BN可以將卷積層輸出的數據歸一化為0均值和單位方差,如下式:

其中k為一個訓練批次中包含的樣本個數,但是僅僅使用這樣的處理方式,對前一層網絡的輸出數據歸一化后再送入下一層網絡,會使得前一層網絡所學習到的特征分布遭到破壞。于是提出了一個很好的方案:變換重構,引入了可學習參數γ、β如下式所示:

其中,每個神經元xk都會有一對參數γ、β。當時就可以恢復前一層網絡所學到的特征。所以引入可學習重構參數,可以讓原始網絡學習到的特征分布不被破壞。
此外,對于BN的位置也做了相應的調整,此前很多的文獻都是將其放在了激活函數的前面,但在該方法中將BN放在了激活函數的后面。本文采用的是ReLU 激活函數,即 ReLU=max(Wx+b,0),這么做的原因是因為初始的W是從標準高斯分布中采樣得到的,而W中元素的數量遠大于x,Wx+b每維的均值本身就接近0、方差接近1,所以在Wx+b后使用BN歸一化處理能得到更穩定的結果。
SVHN數據集包含訓練集,測試集,額外集3個子集。其中訓練集包含了73257張數字圖像,測試集包含26032張數字圖像,額外集由531131張數字圖像組成。該數據集被分為10類,每一個類別代表一個數字,例如字符“1”類別標簽是 1,以此類推字符“9”的類別標簽是9,在這個數據集中字符“0”的類別標簽是“10”。實驗采用的是SVHN Formate2格式的數據,將原始的圖像都歸一化為大小為32x32的彩色圖像并將多個字符劃分為單個的字符進行識別。實驗中對數據的label進行了調整,使得字符“0”的類別標簽為“0”。部分數據集如圖2所示。
對原始的彩色圖像進行灰度化處理來舍去圖像背景顏色、光照條件等無用的特征,采用加權平均值法。根據人眼對RGB三個分量的敏感程度的不同,給這三個分量賦予不同的權值進行加權平均。一般采用的公式如下:

式中的Gray代表處理后的圖像,RGB為三個不同的分量,前面的系數代表每個分量占有不同的比重。事實上這樣的處理方式,計算機在計算的時候已經可以很快了,但是為了進一步提高效率,本文采用的公式如下:

采用(7)方法要比(6)快近3/4。

圖2 SVHN部分數據集
實驗環境為:GPU為NVIDIA GTX 960M,顯存2G;64位Microsoft Windows 10操作系統;使用TensorFlow開源庫,Python編程語言。實驗過程分為訓練和測試兩個階段。在進行網絡訓練之前,針對SVHN數據的特點進行灰度化預處理舍去顏色、光照等無用信息,使網絡更容易提取到重要的特征,之后用預處理后的數據作為卷積網絡的輸入進行訓練,得出模型,最后將用于測試的數據進行相同的預處理之后進行測試進行分類,統計正確識別率。具體過程如圖3所示:

圖3 實驗流程圖
實驗中 epoch設置為 100,學習率為0.01,每個batch的大小設置為50。得出平均的正確識別率為94.58%。在實驗過程中epoch如果設置的太小,網絡得不到充分的訓練導致最終模型的識別正確率不高;如果設置的太大這無疑會增加訓練的時間且模型的識別率也不會有所提高。另一個重要的參數是網絡的學習率,如果學習率太大在訓練過程中lost值會一直大幅度的震蕩,隨著迭代次數增加loss也不會減小;如果太小lost就找不到很好的下降方向,在整個訓練過程中基本不變,網絡無法收斂。圖4是當epoch為100、學習率為0.01、batch大小為50時損失函數變化情況,可以看出在經過訓練后得到了很好的收斂,收斂的速度也是很快的;圖5則是對應的識別正確率變化情況。

圖4 網絡損失函數

圖5網絡的準確率
圖6 給出了本文方法在驗證集上的實驗結果的歸一化混淆矩陣,以便于能夠更清楚地觀察到每類圖像被正確分類的比例和被錯分到其他各個類別的比例。驗證集來源于從測試集中隨機抽取的10000張圖片。其中混淆矩陣中的縱軸表示圖像的實際類別標簽,橫軸則表示圖像經過卷積網絡預測的類別標簽,第i行j列的值表示第i類圖像被分為第j類圖像的比例,混淆矩陣對角線上的值代表每類圖像正確分類的個數所占的比例。表1則給出了基于不同方法的平均分類準確率的比較。
由表1的結果可以看出,本文的方法的分類準確率與除去PCA-CNN方法之外的其他方法相比有明顯的提高。PCA-CNN方法的分類準確率略高,但是PCA過程計算量很大導致整個網絡訓練時間大約為1周,本文提出的算法經過13小時的訓練就可以達到94.58%準確率,所需要的時間代價要小得多。

圖6 模型分類結果的混淆矩陣

表1 不同方法的分類結果比較
針對自然背景下的門牌號的識別問題,提出了一種基于深度卷積網絡的自動識別方法。對原始的圖像數據做了灰度化處理,舍去了顏色、光照等無用的特征,之后將數據輸入給卷積網絡讓它自己在不斷的學習過程中提取深層次的圖像特征。網絡在經過近13小時的訓練平均識別率可以達到94.58%,具有訓練時間短識別率高的特點。