韓鵬承,胡西川
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
現(xiàn)如今在計(jì)算機(jī)視覺領(lǐng)域中已經(jīng)取得了很多的研究成果,例如像光學(xué)字符識(shí)別(OCR)[1]從掃描文檔中提取文本信息已經(jīng)取得了成功。但與此不同的是對(duì)于自然場(chǎng)景中的字符識(shí)別問題,由于像街景門牌號(hào)這樣的自然場(chǎng)景中的字符擁有復(fù)雜的圖像背景和各種各樣的噪聲,通過人工提取特征的方法無法達(dá)到很好的效果,這就導(dǎo)致對(duì)此類字符的識(shí)別存在著挑戰(zhàn)。直到以卷積神經(jīng)網(wǎng)絡(luò)(Convoluted Neural Network,CNN)[2]為代表的深度學(xué)習(xí)興起才給這個(gè)難題帶來了突破性的進(jìn)展。
20世紀(jì)90年代,由LeCun[3]等人發(fā)表了論文,確立了CNN的現(xiàn)代結(jié)構(gòu),并設(shè)計(jì)出了經(jīng)典的LeNet-5網(wǎng)絡(luò)結(jié)構(gòu)用來識(shí)別手寫數(shù)字,取得了很好的效果,這個(gè)成果也首次展示出卷積神經(jīng)網(wǎng)絡(luò)在實(shí)際應(yīng)用中的潛力和價(jià)值。由于當(dāng)時(shí)可用于研究的樣本數(shù)據(jù)很少以及計(jì)算機(jī)性能不足,使得CNN的發(fā)展進(jìn)程很緩慢。直到現(xiàn)在,大數(shù)據(jù)時(shí)代背景下,可用于研究的數(shù)據(jù)集得到了很大的擴(kuò)展;CNN網(wǎng)絡(luò)經(jīng)過多年的發(fā)展,它的結(jié)構(gòu)得到了不斷的改進(jìn)和完善網(wǎng)絡(luò)的性能進(jìn)一步提高;現(xiàn)代計(jì)算機(jī)性能與之前相比有了很大幅度的進(jìn)步,并提出利用GPU加速神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和識(shí)別[4],與CPU相比GPU在單位面積/單位功耗上擁有更高的計(jì)算能力和吞吐帶寬,因此通過GPU訓(xùn)練網(wǎng)絡(luò)可以大大提高效率并且GPU強(qiáng)大的計(jì)算能力可以使網(wǎng)絡(luò)在更大的數(shù)據(jù)集訓(xùn)練提高精度。多方面的原因使得卷積神經(jīng)網(wǎng)絡(luò)得到了發(fā)展。2012年Alex Krizhevsky等人發(fā)布了AlexNet網(wǎng)絡(luò)結(jié)構(gòu)[5],該網(wǎng)絡(luò)是具有八層結(jié)構(gòu)的深度卷積網(wǎng)絡(luò),并用它在當(dāng)年的ImageNet圖像分類競(jìng)賽中取得了第一名的成績。除此之外,近年來還推出了很多比較有名的CNN 結(jié) 構(gòu) 有 VGGNet[6]、GoogleNet[7]和 ResNet[8]。 將CNN應(yīng)用在文本識(shí)別、圖像分類、情感識(shí)別、目標(biāo)檢測(cè)等多個(gè)領(lǐng)域都取得了很多的研究成果。
傳統(tǒng)的圖像識(shí)別方法需要人工提取特征,由于人工提取特征的局限性,這種方法往往無法達(dá)到實(shí)際中對(duì)精度的要求。CNN是一種多層的網(wǎng)絡(luò)結(jié),它通過從大量的數(shù)據(jù)中逐層學(xué)習(xí)和提取特征,自主地完成對(duì)數(shù)據(jù)的抽象。相比人工提取的特征使用CNN自動(dòng)提取的特征進(jìn)行識(shí)別可以達(dá)到更好的效果,且特征提取的過程變得更加簡潔有效。因此,越來越多的研究人員將CNN運(yùn)用在字符識(shí)別上。如QIang Guo構(gòu)造出了CNN-HMM混合模型[9],對(duì)街景門牌號(hào)的(Street View House Number,SVHN)數(shù)據(jù)集的識(shí)別率為81.07%。王強(qiáng)等人將主成分分析法(Principal Componets Analysis,PCA)和 CNN相結(jié)合[10],利用快速 PCA和 CNN對(duì)SVHN數(shù)據(jù)集的識(shí)別率為95.10%,這在識(shí)別效果上得到了很大的提高,但是需要花費(fèi)很大的時(shí)間代價(jià),該方法需要的訓(xùn)練時(shí)間約為1周。Ma Miao[11]等人構(gòu)造的改進(jìn)LeNet-5在SVHN數(shù)據(jù)集上經(jīng)過7個(gè)小時(shí)的訓(xùn)練識(shí)別率達(dá)到90.35%,時(shí)間大大縮短但是識(shí)別率不高。
針對(duì)存在的不足,提出的基于深度卷積神經(jīng)網(wǎng)絡(luò)的識(shí)別方法在網(wǎng)絡(luò)的結(jié)構(gòu)上做出了改進(jìn),加深了網(wǎng)絡(luò)的深度增加了網(wǎng)絡(luò)的卷積層數(shù)和卷積核的數(shù)量并優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu);對(duì)圖像進(jìn)行預(yù)處理,將原始圖像灰度化來弱化圖像背景顏色、光照條件等無關(guān)的特征,突出重要的特征。改進(jìn)后該網(wǎng)絡(luò)在SVHN數(shù)據(jù)集上可以達(dá)到94.58%的識(shí)別率,訓(xùn)練時(shí)間約為13小時(shí)。
卷積神經(jīng)網(wǎng)絡(luò)是一種局部感知和權(quán)值共享的網(wǎng)絡(luò)結(jié)構(gòu),本質(zhì)上就是指它相比較其他網(wǎng)絡(luò)會(huì)產(chǎn)生更少的可調(diào)參數(shù),降低了學(xué)習(xí)復(fù)雜度;并且卷積神經(jīng)網(wǎng)絡(luò)對(duì)圖像的平移、傾斜、縮放或其他形式的形變具有高度不變性,說明了卷積神經(jīng)網(wǎng)絡(luò)具有優(yōu)良的特性。
卷積神經(jīng)網(wǎng)絡(luò)的典型結(jié)構(gòu)如圖1所示,該網(wǎng)絡(luò)由輸人層、卷積層、池化層、全連接層及輸出層組成。輸入層是整個(gè)網(wǎng)絡(luò)的起點(diǎn),網(wǎng)絡(luò)的輸入是二維的圖像;卷積層的作用是提取特征;池化層對(duì)輸入的特征圖尺寸進(jìn)行壓縮使特征圖變小,降低網(wǎng)絡(luò)計(jì)算復(fù)雜度,并且進(jìn)行特征壓縮提取主要特征;全連接層學(xué)習(xí)全局特征,將前面得到的局部特征整合到一起輸出給分類器;最后的輸出層是整個(gè)網(wǎng)絡(luò)的輸出。
圖1 典型卷積網(wǎng)絡(luò)結(jié)構(gòu)
網(wǎng)絡(luò)結(jié)構(gòu)基于AlexNet進(jìn)行改進(jìn),共有7個(gè)卷積層。網(wǎng)絡(luò)的輸入是32×32的圖片,輸出是每個(gè)門牌號(hào)字符對(duì)應(yīng)的分類。第一層卷積層的卷積核大小為5×5,卷積步長為2,卷積核數(shù)量為64個(gè),使用ReLU作為非線性激活函數(shù),然后使用 BN(Batch Normalization)[12]進(jìn)行歸一化處理,最后連接了一個(gè)Max pooling層,大小為2×2,步長為1。第二層卷積層卷積核的大小為3x3,卷積步長為1,該層共有128個(gè)卷積核,隨后采用和第一層同樣的策略。第三層使用大小為3×3的卷積核,步長為1,共有256個(gè)卷積核,隨后采用同上的策略。第四層卷積核大小為3×3,步長為1,共有384個(gè)卷積核,后面也是采用同上的策略。從第五個(gè)卷積層開始連續(xù)堆疊了三個(gè)卷積層,卷積核大小都是3×3,步長為1,前兩個(gè)各有256個(gè)卷積核,最后一層有192個(gè)卷積核,之后使用ReLU作為激活函數(shù),然后使用BN進(jìn)行歸一化處理,最后連接一個(gè)窗口大小為2×2,步長為1的Max pooling層。此后連接3個(gè)全連接層,前兩個(gè)全連接層神經(jīng)元的個(gè)數(shù)為1024,利用BN對(duì)結(jié)果進(jìn)行歸一化,并采用Dropout策略來忽略一定量的神經(jīng)元,可以明顯地減少過擬合現(xiàn)象,比例設(shè)置為0.2。最后一個(gè)全連接層神經(jīng)元個(gè)數(shù)設(shè)置為10,也就是字符識(shí)別后的分類,連接Softmax分類器進(jìn)行分類。
如果不使用激勵(lì)函數(shù),神經(jīng)網(wǎng)絡(luò)的每層都只是做線性變換,但是線性模型的表達(dá)能力不足無法處理復(fù)雜的非線性問題,所以通過激勵(lì)函數(shù)引入非線性因素可以提高模型的表達(dá)能力。經(jīng)常用到的激活函數(shù)有sigmoid、tanh、和ReLU,他們各自的公式如下。其中ReLU函數(shù)要比sigmoid和tanh等函數(shù)具有更快的收斂速度,能節(jié)省大量的訓(xùn)練時(shí)間。
sigmoid函數(shù):
tanh函數(shù):
ReLU函數(shù):
隨著深度學(xué)習(xí)的發(fā)展,隨機(jī)梯度下降成了訓(xùn)練深度網(wǎng)絡(luò)的主流方法。但是該方法存在不足,大量參數(shù)的設(shè)置需要人為的去完成,例如網(wǎng)絡(luò)的初始權(quán)重和bias、網(wǎng)絡(luò)的學(xué)習(xí)率、權(quán)重變化系數(shù)、Dropout比例等。這些參數(shù)對(duì)網(wǎng)絡(luò)的性能有很大的影響,而調(diào)節(jié)這些參數(shù)需要花費(fèi)很多的時(shí)間。BN的出現(xiàn)使得這些調(diào)參變得不再那么重要。BN可以將卷積層輸出的數(shù)據(jù)歸一化為0均值和單位方差,如下式:
其中k為一個(gè)訓(xùn)練批次中包含的樣本個(gè)數(shù),但是僅僅使用這樣的處理方式,對(duì)前一層網(wǎng)絡(luò)的輸出數(shù)據(jù)歸一化后再送入下一層網(wǎng)絡(luò),會(huì)使得前一層網(wǎng)絡(luò)所學(xué)習(xí)到的特征分布遭到破壞。于是提出了一個(gè)很好的方案:變換重構(gòu),引入了可學(xué)習(xí)參數(shù)γ、β如下式所示:
其中,每個(gè)神經(jīng)元xk都會(huì)有一對(duì)參數(shù)γ、β。當(dāng)時(shí)就可以恢復(fù)前一層網(wǎng)絡(luò)所學(xué)到的特征。所以引入可學(xué)習(xí)重構(gòu)參數(shù),可以讓原始網(wǎng)絡(luò)學(xué)習(xí)到的特征分布不被破壞。
此外,對(duì)于BN的位置也做了相應(yīng)的調(diào)整,此前很多的文獻(xiàn)都是將其放在了激活函數(shù)的前面,但在該方法中將BN放在了激活函數(shù)的后面。本文采用的是ReLU 激活函數(shù),即 ReLU=max(Wx+b,0),這么做的原因是因?yàn)槌跏嫉腤是從標(biāo)準(zhǔn)高斯分布中采樣得到的,而W中元素的數(shù)量遠(yuǎn)大于x,Wx+b每維的均值本身就接近0、方差接近1,所以在Wx+b后使用BN歸一化處理能得到更穩(wěn)定的結(jié)果。
SVHN數(shù)據(jù)集包含訓(xùn)練集,測(cè)試集,額外集3個(gè)子集。其中訓(xùn)練集包含了73257張數(shù)字圖像,測(cè)試集包含26032張數(shù)字圖像,額外集由531131張數(shù)字圖像組成。該數(shù)據(jù)集被分為10類,每一個(gè)類別代表一個(gè)數(shù)字,例如字符“1”類別標(biāo)簽是 1,以此類推字符“9”的類別標(biāo)簽是9,在這個(gè)數(shù)據(jù)集中字符“0”的類別標(biāo)簽是“10”。實(shí)驗(yàn)采用的是SVHN Formate2格式的數(shù)據(jù),將原始的圖像都?xì)w一化為大小為32x32的彩色圖像并將多個(gè)字符劃分為單個(gè)的字符進(jìn)行識(shí)別。實(shí)驗(yàn)中對(duì)數(shù)據(jù)的label進(jìn)行了調(diào)整,使得字符“0”的類別標(biāo)簽為“0”。部分?jǐn)?shù)據(jù)集如圖2所示。
對(duì)原始的彩色圖像進(jìn)行灰度化處理來舍去圖像背景顏色、光照條件等無用的特征,采用加權(quán)平均值法。根據(jù)人眼對(duì)RGB三個(gè)分量的敏感程度的不同,給這三個(gè)分量賦予不同的權(quán)值進(jìn)行加權(quán)平均。一般采用的公式如下:
式中的Gray代表處理后的圖像,RGB為三個(gè)不同的分量,前面的系數(shù)代表每個(gè)分量占有不同的比重。事實(shí)上這樣的處理方式,計(jì)算機(jī)在計(jì)算的時(shí)候已經(jīng)可以很快了,但是為了進(jìn)一步提高效率,本文采用的公式如下:
采用(7)方法要比(6)快近3/4。
圖2 SVHN部分?jǐn)?shù)據(jù)集
實(shí)驗(yàn)環(huán)境為:GPU為NVIDIA GTX 960M,顯存2G;64位Microsoft Windows 10操作系統(tǒng);使用TensorFlow開源庫,Python編程語言。實(shí)驗(yàn)過程分為訓(xùn)練和測(cè)試兩個(gè)階段。在進(jìn)行網(wǎng)絡(luò)訓(xùn)練之前,針對(duì)SVHN數(shù)據(jù)的特點(diǎn)進(jìn)行灰度化預(yù)處理舍去顏色、光照等無用信息,使網(wǎng)絡(luò)更容易提取到重要的特征,之后用預(yù)處理后的數(shù)據(jù)作為卷積網(wǎng)絡(luò)的輸入進(jìn)行訓(xùn)練,得出模型,最后將用于測(cè)試的數(shù)據(jù)進(jìn)行相同的預(yù)處理之后進(jìn)行測(cè)試進(jìn)行分類,統(tǒng)計(jì)正確識(shí)別率。具體過程如圖3所示:
圖3 實(shí)驗(yàn)流程圖
實(shí)驗(yàn)中 epoch設(shè)置為 100,學(xué)習(xí)率為0.01,每個(gè)batch的大小設(shè)置為50。得出平均的正確識(shí)別率為94.58%。在實(shí)驗(yàn)過程中epoch如果設(shè)置的太小,網(wǎng)絡(luò)得不到充分的訓(xùn)練導(dǎo)致最終模型的識(shí)別正確率不高;如果設(shè)置的太大這無疑會(huì)增加訓(xùn)練的時(shí)間且模型的識(shí)別率也不會(huì)有所提高。另一個(gè)重要的參數(shù)是網(wǎng)絡(luò)的學(xué)習(xí)率,如果學(xué)習(xí)率太大在訓(xùn)練過程中l(wèi)ost值會(huì)一直大幅度的震蕩,隨著迭代次數(shù)增加loss也不會(huì)減??;如果太小lost就找不到很好的下降方向,在整個(gè)訓(xùn)練過程中基本不變,網(wǎng)絡(luò)無法收斂。圖4是當(dāng)epoch為100、學(xué)習(xí)率為0.01、batch大小為50時(shí)損失函數(shù)變化情況,可以看出在經(jīng)過訓(xùn)練后得到了很好的收斂,收斂的速度也是很快的;圖5則是對(duì)應(yīng)的識(shí)別正確率變化情況。
圖4 網(wǎng)絡(luò)損失函數(shù)
圖5網(wǎng)絡(luò)的準(zhǔn)確率
圖6 給出了本文方法在驗(yàn)證集上的實(shí)驗(yàn)結(jié)果的歸一化混淆矩陣,以便于能夠更清楚地觀察到每類圖像被正確分類的比例和被錯(cuò)分到其他各個(gè)類別的比例。驗(yàn)證集來源于從測(cè)試集中隨機(jī)抽取的10000張圖片。其中混淆矩陣中的縱軸表示圖像的實(shí)際類別標(biāo)簽,橫軸則表示圖像經(jīng)過卷積網(wǎng)絡(luò)預(yù)測(cè)的類別標(biāo)簽,第i行j列的值表示第i類圖像被分為第j類圖像的比例,混淆矩陣對(duì)角線上的值代表每類圖像正確分類的個(gè)數(shù)所占的比例。表1則給出了基于不同方法的平均分類準(zhǔn)確率的比較。
由表1的結(jié)果可以看出,本文的方法的分類準(zhǔn)確率與除去PCA-CNN方法之外的其他方法相比有明顯的提高。PCA-CNN方法的分類準(zhǔn)確率略高,但是PCA過程計(jì)算量很大導(dǎo)致整個(gè)網(wǎng)絡(luò)訓(xùn)練時(shí)間大約為1周,本文提出的算法經(jīng)過13小時(shí)的訓(xùn)練就可以達(dá)到94.58%準(zhǔn)確率,所需要的時(shí)間代價(jià)要小得多。
圖6 模型分類結(jié)果的混淆矩陣
表1 不同方法的分類結(jié)果比較
針對(duì)自然背景下的門牌號(hào)的識(shí)別問題,提出了一種基于深度卷積網(wǎng)絡(luò)的自動(dòng)識(shí)別方法。對(duì)原始的圖像數(shù)據(jù)做了灰度化處理,舍去了顏色、光照等無用的特征,之后將數(shù)據(jù)輸入給卷積網(wǎng)絡(luò)讓它自己在不斷的學(xué)習(xí)過程中提取深層次的圖像特征。網(wǎng)絡(luò)在經(jīng)過近13小時(shí)的訓(xùn)練平均識(shí)別率可以達(dá)到94.58%,具有訓(xùn)練時(shí)間短識(shí)別率高的特點(diǎn)。