舒 軍,蔣明威,楊 莉,陳 宇
(1.湖北工業(yè)大學(xué)電氣與電子工程學(xué)院,武漢 430068;2.湖北工業(yè)大學(xué)太陽(yáng)能高效利用及儲(chǔ)能運(yùn)行控制湖北省重點(diǎn)實(shí)驗(yàn)室,武漢 430068;3.湖北第二師范學(xué)院計(jì)算機(jī)學(xué)院,武漢 430205)
卷積神經(jīng)網(wǎng)絡(luò)是一種模仿生物視覺(jué)神經(jīng)連接的多層級(jí)聯(lián)結(jié)構(gòu),在圖像、視頻處理領(lǐng)域有著非常廣泛的應(yīng)用.1998年,LeCun等提出降采樣和網(wǎng)絡(luò)權(quán)值共享兩種思路,確立了CNN的現(xiàn)代結(jié)構(gòu)—LeNet5[1].2012年,Krizhevsky等提出AlexNet[2],采用了新的非線性激活函數(shù)ReLU[3]和dropout[2]函數(shù),減輕了網(wǎng)絡(luò)的梯度消失和過(guò)擬合現(xiàn)象.2014年,VGG16、19[4]采用3×3卷積核和2×2池化核,驗(yàn)證了多個(gè)小卷積核的疊加效果優(yōu)于單個(gè)大卷積核.同年,GoogleNet[5]設(shè)計(jì)Inception模塊化結(jié)構(gòu),提出了Network In Network的思路.隨著VGGNet、GoogleNet等網(wǎng)絡(luò)的影響,后續(xù)網(wǎng)絡(luò)逐漸加深.但網(wǎng)絡(luò)加深導(dǎo)致的梯度消失問(wèn)題,改變激活函數(shù)的方法已經(jīng)無(wú)法有效改善.2015年,Highway Networks[6]、ResNet[7]提出躍層思路,躍層(Skip layer)整合前兩層的輸出信息作為當(dāng)前層的輸入.該方法使上層梯度信息可以通過(guò)躍層直接進(jìn)入后層網(wǎng)絡(luò),減少了連續(xù)求導(dǎo)運(yùn)算導(dǎo)致的梯度消失的問(wèn)題.2016年,隨機(jī)深度網(wǎng)絡(luò)[8]在ResNet基礎(chǔ)上采用隨機(jī)路徑訓(xùn)練,提升了深層網(wǎng)絡(luò)的訓(xùn)練速度和性能.2017年CVPR發(fā)表的DenseNet[9]結(jié)合了兩篇論文[7-8]的思路,提出密集連接結(jié)構(gòu)(Dense Block),即每層網(wǎng)絡(luò)的輸入都是之前所有層輸出的集合,每層網(wǎng)絡(luò)只學(xué)習(xí)少量特征圖,降低了網(wǎng)絡(luò)參數(shù)量.DenseNet繼承了ResNet抗過(guò)擬合和梯度消失的優(yōu)點(diǎn),而網(wǎng)絡(luò)的參數(shù)量和計(jì)算量只有ResNet的一半.
DenseNet的密集連接結(jié)構(gòu)可以使輸出層獲得之前所有網(wǎng)絡(luò)層的信息,增大了特征圖信息的利用率,但對(duì)于低強(qiáng)度圖像任務(wù),特征圖的反復(fù)疊加,會(huì)產(chǎn)生較多冗余數(shù)據(jù).原文作者設(shè)計(jì)了傳輸層和瓶頸層(TransitionLayer &Bottleneck)結(jié)構(gòu),對(duì)輸出特征圖進(jìn)行壓縮,但在小型數(shù)據(jù)集上DenseNet仍然出現(xiàn)了不同程度的過(guò)擬合問(wèn)題.本文針對(duì)此問(wèn)題展開(kāi)研究,提出一種輕量化改進(jìn)方法.
早期的卷積神經(jīng)網(wǎng)絡(luò)一般由多層不同尺寸卷積核的卷積層(Convolution Layer)[10]進(jìn)行特征提取和映射,交替加入激活函數(shù)、池化層[11]進(jìn)行非線性激活和降采樣,最后通過(guò)全連接層[1]和損失函數(shù)進(jìn)行預(yù)測(cè).隨著計(jì)算機(jī)硬件的發(fā)展,LeNet5、AlexNet、VGGNet到Inception深度逐漸加深,圖像處理任務(wù)不斷提升的效果也說(shuō)明了深層神經(jīng)網(wǎng)絡(luò)較淺層神經(jīng)網(wǎng)絡(luò)有更好的性能.但隨著深度增加,出現(xiàn)了梯度消失和梯度爆炸等問(wèn)題導(dǎo)致訓(xùn)練困難.新提出的激活函數(shù)ReLU和Batch Normalization(BN)[12]的方法一定程度上解決了問(wèn)題,但對(duì)于超深層網(wǎng)絡(luò)還是會(huì)出現(xiàn)無(wú)法訓(xùn)練或者準(zhǔn)確率下降的問(wèn)題.Highway Networks借鑒LSTM[13]門(mén)機(jī)制,提出了高速通道的思想,如式(1)所示.
y=H(x,WH)×T+x×C,
(1)
y=H(x,WH)為網(wǎng)絡(luò)原來(lái)的映射函數(shù),T和C為定義的兩個(gè)門(mén)函數(shù),x為隔層的特征圖信息,調(diào)整兩個(gè)函數(shù)即可控制變換和非變換信息流的比例.Residual Networks簡(jiǎn)化了Highway Networks的方法,采用直連方式,如式(2)所示.
y=F(x,Wi)+x,
(2)
F即ResNet的殘差函數(shù),Wi是殘差層中的權(quán)重參數(shù),x為隔層的特征圖信息.結(jié)構(gòu)如圖1所示.
簡(jiǎn)化后上層信息直接通過(guò)躍層(Skip Layer)[7]和當(dāng)前輸出合并.躍層在訓(xùn)練過(guò)程中可以直接傳遞上層網(wǎng)絡(luò)的梯度信息,提升了特征圖像的復(fù)用率,解決了深度網(wǎng)絡(luò)的訓(xùn)練問(wèn)題.
區(qū)別于ResNet的躍層連接結(jié)構(gòu),DenseNet并非單純的遞進(jìn)結(jié)構(gòu),模型結(jié)果不僅與當(dāng)前輸出的特征圖相關(guān),還與網(wǎng)絡(luò)淺層輸出有關(guān).基于此思想,DenseNet作者設(shè)計(jì)了密集型連接塊結(jié)構(gòu)(Dense Block)[9],如圖2所示.
圖2 密集連接塊Fig.2 Dense Block
密集連接塊中任意兩層網(wǎng)絡(luò)間均有直接的躍層連接,較ResNet的單層連接,密集型連接的結(jié)構(gòu)對(duì)特征圖的利用率更高.DenseNet包含多個(gè)密集連接塊,每個(gè)密集連接塊后加入傳輸層和瓶頸層結(jié)構(gòu)壓縮參數(shù),第L層網(wǎng)絡(luò)的輸入如式(3)所示.
xl=Hl([x0,x1,…,xl-1]),
(3)
xl表示第L層網(wǎng)絡(luò)的輸入,[x0,x1,…,xl-1]表示L層之前的網(wǎng)絡(luò)的輸出,Hl是表示拼接(Concatenation)的一個(gè)復(fù)合函數(shù),即傳輸層和瓶頸層結(jié)構(gòu),包括Batch Normalization(BN),ReLU,Convolution(Conv)和Pooling.基于以上幾點(diǎn),每一層網(wǎng)絡(luò)輸出的特征圖維數(shù)都比較低,有效降低了模型參數(shù)量,而計(jì)算量只有ResNet一半左右.
保留DenseNet密集型連接特性基礎(chǔ)上,本文提出一種改進(jìn)的輕量化模型,改進(jìn)前、后網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示.
圖3 改進(jìn)前后DenseNetFig.3 DenseNet and new DenseNet
首先,對(duì)密集連接塊進(jìn)行調(diào)整,總層數(shù)不變條件下增大密集連接塊數(shù)量,保留i層內(nèi)部網(wǎng)絡(luò);其次,對(duì)改進(jìn)網(wǎng)絡(luò)池化部分進(jìn)行重新設(shè)計(jì),使其適應(yīng)新網(wǎng)絡(luò)結(jié)構(gòu);最后,在密集連接塊間加入躍層模塊,增強(qiáng)信息流通.改進(jìn)后的網(wǎng)絡(luò)lth層的輸入如式(4)所示.
(4)
由于每個(gè)密集連接塊后接有傳輸層,數(shù)量增加后,其中池化層降采樣會(huì)使后續(xù)卷積層無(wú)效(特征圖尺寸≤卷積核).針對(duì)此問(wèn)題,對(duì)新的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)了一種根據(jù)圖像分辨率的自適應(yīng)調(diào)整方法.保留密集連接塊→傳輸層→瓶頸層的結(jié)構(gòu),在保證卷積有意義的條件下(特征圖尺寸≥卷積核),自適應(yīng)池化結(jié)構(gòu)如式(5)所示.
(5)
原網(wǎng)絡(luò)在小型數(shù)據(jù)集(CIFAR10、CIFAR100和SVHN)上密集連接塊的個(gè)數(shù)少,單個(gè)密集連接塊內(nèi)網(wǎng)絡(luò)層數(shù)高.由于密集連接的特性,特征圖復(fù)用率極高,而過(guò)于復(fù)雜的模型易導(dǎo)致過(guò)擬合問(wèn)題.
針對(duì)此問(wèn)題,設(shè)計(jì)了一組密集連接塊數(shù)量和其內(nèi)部網(wǎng)絡(luò)層數(shù)最優(yōu)化實(shí)驗(yàn).層數(shù)低于3的密集連接塊和殘差結(jié)構(gòu)基本相同,層數(shù)高于12則與DenseNet原網(wǎng)絡(luò)相同,且過(guò)高的層數(shù)需要更大的壓縮系數(shù)以節(jié)省計(jì)算資源.為避免實(shí)驗(yàn)結(jié)果差值太小,綜合考慮,選擇4/6/9/12層四種方案在CIFAR10數(shù)據(jù)集上進(jìn)行測(cè)試,實(shí)驗(yàn)結(jié)果如表1所示.表中深度L=40層,壓縮系數(shù)k=12,Blocks表示密集連接塊基礎(chǔ)單元個(gè)數(shù),Params即模型的參數(shù)量,C10是4種改進(jìn)模型在CIFAR10數(shù)據(jù)集測(cè)試的錯(cuò)誤率.
表1 密集連接塊基礎(chǔ)單元數(shù)實(shí)驗(yàn)Tab.1 Dense Block basic unit experiment
表1中,DenseNet[6](6.72%)和DenseNet[9](6.69%)效果最佳且較為相近.而密集連接塊內(nèi)層數(shù)越高其個(gè)數(shù)越少,躍層數(shù)目也隨之減少,考慮參數(shù)量和加入的躍層結(jié)構(gòu),選擇DenseNet[6]作為網(wǎng)絡(luò)的基本單元.在相同壓縮系數(shù)(k=12)條件下對(duì)四種深度(L=40/100/190/250)的DenseNet[6]進(jìn)行了測(cè)試,其余參數(shù)同表1,實(shí)驗(yàn)結(jié)果如表2所示.
表2 Dense Block[6]層數(shù)實(shí)驗(yàn)Tab.2 Dense Block[6] experiment on different layers
表2中,DenseNet[6]-250并沒(méi)有出現(xiàn)之前DenseNet BC-250的過(guò)擬合的現(xiàn)象,隨著網(wǎng)絡(luò)的加深,精度隨之提升.區(qū)別于DenseNet的三個(gè)或者四個(gè)密集連接塊,6層的密集連接塊將模型細(xì)化,解決了網(wǎng)絡(luò)深度和特征圖的維數(shù)不匹配問(wèn)題.
由于密集連接塊→傳輸層→瓶頸層結(jié)構(gòu)對(duì)輸出信息的壓縮,且密集連接塊間無(wú)其他信息通道,故可能存在信息損失,網(wǎng)絡(luò)的信息流通可以通過(guò)添加躍層的方式來(lái)進(jìn)行優(yōu)化.
針對(duì)此問(wèn)題,考慮參數(shù)量和測(cè)試精度,設(shè)計(jì)了四組躍層(Skip Layer)對(duì)比實(shí)驗(yàn),B1組為原躍層結(jié)構(gòu),使用兩層3×3卷積層,中間加入批標(biāo)準(zhǔn)化(BN)和ReLU激活函數(shù);B2組在B1組的基礎(chǔ)上首尾加入1×1卷積層對(duì)參數(shù)量進(jìn)行壓縮;B3、B4組在B2組的基礎(chǔ)上去掉1×1+3×3+BN層,分別加入dropout和dropout &BN.實(shí)驗(yàn)使用CIFAR10數(shù)據(jù)集進(jìn)行測(cè)試,采用DenseNet(L=40,k=12)作為基礎(chǔ)網(wǎng)絡(luò),加入Bi組躍層模塊,四組實(shí)驗(yàn)方案參數(shù)量(Params)和測(cè)試錯(cuò)誤率結(jié)果如表3所示,結(jié)構(gòu)如圖4(a)所示.
表3 躍層模塊實(shí)驗(yàn)Tab.3 Skip Layer unit experiment
表3中,B1組未做數(shù)據(jù)壓縮處理的躍層改進(jìn)網(wǎng)絡(luò)效果最好(6.32%),參數(shù)量也是最高的;B2組加入兩層1×1卷積后,參數(shù)量減少,但1×1卷積的壓縮作用導(dǎo)致模型精度下降;B3、B4去掉部分卷積層后,參數(shù)量最優(yōu)(1.18 M),且加入了dropout+BN的B4組效果更接近B1組.基于上節(jié)討論的基礎(chǔ),在每個(gè)密集連接塊間加入B4組的躍層模塊,最終網(wǎng)絡(luò)結(jié)構(gòu)示意如圖4(b)所示.
圖4 加入躍層的DenseNet和DenseNet[6]-SLFig.4 DenseNet with skip layer and DenseNet[6]-SL
為了測(cè)試DenseNet及其三種改進(jìn)方法的性能,在CIFAR10數(shù)據(jù)集上做了一組對(duì)比試驗(yàn).改進(jìn)網(wǎng)絡(luò)和DenseNet(L=40,k=12)的參數(shù)量(Params)、測(cè)試錯(cuò)誤率的結(jié)果如表4所示.
表4 DenseNet和改進(jìn)網(wǎng)絡(luò)Tab.4 DenseNet and new network
對(duì)比1、2和3、4組,加入了躍層結(jié)構(gòu)的DenseNet-SL(L=40,k=12)和DenseNet[6]-SL測(cè)試誤差降低(-0.63%、-0.65%),實(shí)驗(yàn)結(jié)果證明躍層連接可以增強(qiáng)密集連接塊間信息傳遞能力;對(duì)比2、4組,深度相同的情況下,擁有多個(gè)躍層的DenseNet[6]-SL測(cè)試誤差更小(-0.3%).故密集連接塊數(shù)量越少,躍層更趨向于全局殘差結(jié)構(gòu)[14-15]傳遞模塊間信息,而不是ResNet中作為深度網(wǎng)絡(luò)的一種輔助路徑.
3.1.1 CIFAR數(shù)據(jù)集 CIFAR10和CIFAR100數(shù)據(jù)集是由Hinton的學(xué)生Krizhevsky等收集的一個(gè)用于生活常見(jiàn)物體圖像的數(shù)據(jù)集,它包含60 000張32×32的RGB彩色圖片,分10和100個(gè)類別.其中,50 000張用于訓(xùn)練集,10 000張用于測(cè)試集.
3.1.2 SVHN數(shù)據(jù)集 SVHN數(shù)據(jù)集來(lái)自于Google街景圖片中的房屋號(hào)碼,是一個(gè)自然場(chǎng)景圖像中的數(shù)字識(shí)別問(wèn)題.圖像已經(jīng)過(guò)ROI提取和預(yù)裁剪,對(duì)數(shù)據(jù)預(yù)處理和格式化的需求最小.包含60萬(wàn)張32×32的RGB彩色圖片,分0~9十個(gè)數(shù)字類別.
3.3.1 數(shù)據(jù)集測(cè)試效果對(duì)比 表5中C10、C100和SVHN三列數(shù)據(jù)為兩種改進(jìn)方法DenseNet[6]和NewDenseNet[6]在三種數(shù)據(jù)集上測(cè)試結(jié)果.DenseNet[6]在淺層(L=40/100,結(jié)果取均值)網(wǎng)絡(luò)上測(cè)試誤差較DenseNet降低了3.3%;NewDenseNet[6]在淺層(L=40/100,結(jié)果取均值)網(wǎng)絡(luò)上測(cè)試誤差較DenseNet降低了9.3%.由于DenseNet(L=190)原文實(shí)驗(yàn)只有部分?jǐn)?shù)據(jù)增強(qiáng)(C10+、C100+)后的數(shù)據(jù),故只對(duì)比深層網(wǎng)絡(luò)(L=250).在深層網(wǎng)絡(luò)上,DenseNet[6]測(cè)試誤差和DenseNet基本持平;NewDenseNet[6]測(cè)試誤差較DenseNet降低了10.8%,網(wǎng)絡(luò)的訓(xùn)練和校驗(yàn)損失曲線如圖5所示.
表5 實(shí)驗(yàn)結(jié)果總表Tab.5 Summary of experimental results
圖5 CIFAR數(shù)據(jù)集訓(xùn)練和校驗(yàn)損失曲線Fig.5 CIFAR data set train loss and test loss curves
3.3.2 模型參數(shù)、計(jì)算量對(duì)比 表5中Params、Flops兩列數(shù)據(jù)為兩種改進(jìn)方法DenseNet[6]和NewDenseNet[6]的參數(shù)和計(jì)算量.DenseNet[6]的淺層(L=40/100,結(jié)果取均值)網(wǎng)絡(luò)參數(shù)量較DenseNet降低了36%,計(jì)算量降低了26%;NewDenseNet[6]的淺層(L=40/100,結(jié)果取均值)網(wǎng)絡(luò)參數(shù)量較DenseNet增加了28%,計(jì)算量降低了25%.DenseNet[6]的深層(L=190/250,結(jié)果取均值)網(wǎng)絡(luò)參數(shù)量較DenseNet降低了14%,計(jì)算量降低了50%;NewDenseNet[6]的深層(L=190/250,結(jié)果取均值)網(wǎng)絡(luò)參數(shù)量較DenseNet增加了9.6%,計(jì)算量降低了43.5%,網(wǎng)絡(luò)的參數(shù)和計(jì)算量對(duì)比如圖6所示.
3.3.3 綜合評(píng)估 DenseNet[6]與DenseNet相比,參數(shù)量和計(jì)算量更少,而測(cè)試誤差基本持平;NewDenseNet[6]較DenseNet參數(shù)量略有增加,但計(jì)算量降低且精度提升.其中NewDenseNet(L=190,k=40)效果最佳(C10 3.82%、C100 17.36%、SVHN 1.51%).綜上所述,由于改進(jìn)的方法對(duì)密集連接塊的輕量化調(diào)整,降低了疊加的產(chǎn)生的特征圖維數(shù),在過(guò)擬合方面,網(wǎng)絡(luò)在L=250、k=24時(shí)兩種改進(jìn)方法DenseNet[6]和NewDenseNet均未出現(xiàn)退化現(xiàn)象,網(wǎng)絡(luò)效果隨著深度增加而遞進(jìn),實(shí)驗(yàn)結(jié)果證明改進(jìn)方法有效.該輕量化網(wǎng)絡(luò)對(duì)小數(shù)據(jù)集有著更大的優(yōu)勢(shì),減少了過(guò)擬合的產(chǎn)生.
本文主要針對(duì)DenseNet網(wǎng)絡(luò)架構(gòu)展開(kāi)研究.DenseNet[6]的調(diào)整增大了網(wǎng)絡(luò)深度和特征圖維數(shù)的比例,與原網(wǎng)絡(luò)精度相近的情況下降低了參數(shù)量和計(jì)算量,證明多個(gè)小型密集連接塊可以降低模型復(fù)雜度.更進(jìn)一步,本文在DenseNet[6]的基礎(chǔ)上加入躍層作為輔助路徑(NewDenseNet).實(shí)驗(yàn)結(jié)果證明,加入輔助路徑的網(wǎng)絡(luò)在參數(shù)量和原網(wǎng)絡(luò)持平的情況下,計(jì)算量更少且精度更高.