何 鑫,祁 欣,馬海濤,趙宇海,于長永
(東北大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,沈陽 110819) E-mail:1216800155@qq.com
CNN(卷積神經(jīng)網(wǎng)絡(luò))模型[1]在計(jì)算機(jī)視覺領(lǐng)域中取得了不俗的成果,例如圖像分類[2]、目標(biāo)檢測[3]、風(fēng)格識(shí)別[4]、語義分割[5]等.就圖像分類來說,該技術(shù)在提取特征方面相較于傳統(tǒng)模型[6]需要手動(dòng)提取視覺特征來說具有顯著的優(yōu)勢.
CNN發(fā)展至今,出現(xiàn)了多種網(wǎng)絡(luò)結(jié)構(gòu),如圖1所示.這些結(jié)構(gòu)可以被分為三大類:傳統(tǒng)單鏈卷積神經(jīng)網(wǎng)絡(luò)[7-9]、多分支非對(duì)齊卷積神經(jīng)網(wǎng)絡(luò)[10,13,14,16]和使用跳躍連接的卷積神經(jīng)網(wǎng)絡(luò)[11,12,15].在CNN發(fā)展的早期階段,普遍使用的是傳統(tǒng)單鏈卷積神經(jīng)網(wǎng)絡(luò),其網(wǎng)絡(luò)模型深度普遍很淺且使用了大量的模型參數(shù),這類CNN模型包括如圖1中橢圓框所表示的CNN模型.圖1中矩形框所表示的多分支非對(duì)齊卷積神經(jīng)網(wǎng)絡(luò)在CNN模型結(jié)構(gòu)發(fā)展過程起著重要的作用,其網(wǎng)絡(luò)模型存在有長有短的多個(gè)分支且不同分支的卷積操作是不對(duì)齊的.跳躍連接卷積神經(jīng)網(wǎng)絡(luò)不同于以往線性增加網(wǎng)絡(luò)深度的網(wǎng)絡(luò)模型,如圖1中虛橢圓框所表示的模型,引入了跳躍連接,可以令前驅(qū)層與后繼層直接連接,解決了梯度消失問題,使得CNN可以達(dá)到很深的深度.對(duì)于圖1中的所有CNN模型,模型的深度與所使用的參數(shù)數(shù)量如表1所示.
圖1 CNN發(fā)展歷程Fig.1 Development history of CNN
表1 各CNN模型深度及參數(shù)
Table 1 Depth and parameters of each CNN model
模型名稱模型深度參數(shù)數(shù)量AlexNet860MVGG16138.36MGoogleNet226.8MResNet1101.7MDeeply-fused net503.9MFractalNet4022.9MDeseNet401.01MIGC-L32M263224.1M
對(duì)于這三種類別的CNN模型,通常使用CNN不同的層結(jié)構(gòu)作為單元來描述,但除去池化層的池化操作外,其余層結(jié)構(gòu)均是由神經(jīng)元組成的,每個(gè)神經(jīng)元是以權(quán)重W,偏置b,激活函數(shù)f(·)為單元,對(duì)神經(jīng)元輸入進(jìn)行操作的,輸入I輸出O關(guān)系為O=f(WI+b),記為最小計(jì)算單元.若以最小計(jì)算單元將其標(biāo)準(zhǔn)化表示,則傳統(tǒng)單鏈卷積神經(jīng)網(wǎng)絡(luò)可以視為單最小計(jì)算單元的全連接網(wǎng)絡(luò)模型;多分支非對(duì)齊卷積神經(jīng)網(wǎng)絡(luò)可以視為分組最小計(jì)算單元間的全連接并且多組對(duì)齊結(jié)構(gòu)的全連接網(wǎng)絡(luò)模型;跳躍連接的卷積神經(jīng)網(wǎng)絡(luò)模型可以視為最小計(jì)算單元的全連接不僅僅局限在一層中,層間也存在全連接的全連接網(wǎng)絡(luò)模型.
從卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展來看,網(wǎng)絡(luò)模型都是趨向于越來越深的模型架構(gòu).但是網(wǎng)絡(luò)的深度越深,所帶來的問題之一就是要訓(xùn)練的參數(shù)就越多,這就導(dǎo)致模型的表現(xiàn)會(huì)被計(jì)算資源所限制,因此削減卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)冗余是必要的.目前已經(jīng)有研究致力于減少卷積神經(jīng)網(wǎng)絡(luò)模型的參數(shù)冗余,如SENet[17]、ShuffleNet[18]、MobileNet[19]等.本文針對(duì)這一問題,提出了一種基于非對(duì)齊網(wǎng)絡(luò)的CNN模型輕量化的方法.該模型是以最小計(jì)算單元作為節(jié)點(diǎn),通過稀疏連接來確定數(shù)據(jù)流向,構(gòu)成非對(duì)齊網(wǎng)絡(luò)的CNN模型.本文的主要工作如下:
1)提出一種基于非對(duì)齊網(wǎng)絡(luò)的CNN模型輕量化的方法,該模型中作為網(wǎng)絡(luò)節(jié)點(diǎn)的最小計(jì)算單元可以進(jìn)行組合,且以某一棄連概率值來控制生成稀疏網(wǎng)絡(luò)的鄰接矩陣,使得模型輕量化.
2)應(yīng)用本文提出的基于非對(duì)齊網(wǎng)絡(luò)的CNN模型輕量化的方法,統(tǒng)一地闡述最新的CNN模型,如ResNet、DenseNet、Deeply-fused Net和Interleaved Group Convolution,并通過實(shí)驗(yàn)來證明所提出方法的通用性.
3)實(shí)現(xiàn)本文提出的基于非對(duì)齊網(wǎng)絡(luò)的CNN輕量化的方法以及DenseNet40模型,評(píng)估了模型的準(zhǔn)確率,并對(duì)不同模型的參數(shù)數(shù)量進(jìn)行了對(duì)比.實(shí)驗(yàn)結(jié)果表明,相較于DenseNet40,本文所提的方法以測試誤差下降≤1%為代價(jià),能夠削減掉≥50%模型參數(shù).
CNN模型通常以層為單位構(gòu)建網(wǎng)絡(luò),本文通過標(biāo)準(zhǔn)化將其表示為基于最小計(jì)算單元的模型結(jié)構(gòu),從而發(fā)現(xiàn)這種網(wǎng)絡(luò)結(jié)構(gòu)是以層為基礎(chǔ)進(jìn)行劃分對(duì)齊.本文提出的非對(duì)齊網(wǎng)絡(luò)結(jié)構(gòu)摒棄以層為基礎(chǔ)的模型結(jié)構(gòu),采取以最小計(jì)算單元為單位,采取以最小計(jì)算單元為網(wǎng)絡(luò)模型的節(jié)點(diǎn),每一個(gè)最小計(jì)算單元代表一個(gè)劃分基準(zhǔn),因此非對(duì)齊網(wǎng)絡(luò)中不存在以往CNN模型所表現(xiàn)出來的對(duì)齊形式.
在參數(shù)的冗余性大幅度降低的同時(shí),還要保證模型性能沒有很大的損耗,這就需要對(duì)網(wǎng)絡(luò)中傳播的有限特征進(jìn)行重復(fù)使用,即特征融合.特征融合技術(shù)在最新的網(wǎng)絡(luò)模型[12,14,15,16]中均有應(yīng)用,分為兩類,分別是元素層面的add操作和通道層面的concatenate操作.add的本質(zhì)是增多描述圖像的特征的信息量,而concatenate的本質(zhì)則是融合多個(gè)描述圖像的特征融合或者是融合多個(gè)輸出層的信息,即增加描述圖像本身的特征.本文采用concatenate操作,將不同的最小計(jì)算單元節(jié)點(diǎn)學(xué)到的特征進(jìn)行組合連接,充分利用了模型中隱含信息并且增加了節(jié)點(diǎn)輸入的多樣性,使模型獲得更多的表征能力.
非對(duì)齊卷積神經(jīng)網(wǎng)絡(luò)(Unaligned Convolutional Neural Network,uACNN)的網(wǎng)絡(luò)結(jié)構(gòu)由兩部分組成,分別是最小計(jì)算單元節(jié)點(diǎn)集合(記為V)以及連接兩節(jié)點(diǎn)的邊的集合(記為E),因此,uACNN可以表示為:
uACNN=(V,E)
對(duì)于最小計(jì)算單元節(jié)點(diǎn)集合V={Vi|i=1,…,n},構(gòu)成節(jié)點(diǎn)的Vi可以作為單獨(dú)的卷積操作,也可以組合為多個(gè)卷積操作,保證了最小計(jì)算單元節(jié)點(diǎn)集合V所能表達(dá)卷積操作的多樣性.對(duì)于連接兩節(jié)點(diǎn)的邊集合E={Eij|1
E={Eij|i∈{1·1,…,l·m};
j∈{i+1·1,…i+1·m}∪α*drop{i+2·1,…,l·m}}
生成uACNN的一般算法分為兩個(gè)部分,分別是非對(duì)齊結(jié)構(gòu)網(wǎng)絡(luò)中最小計(jì)算單元節(jié)點(diǎn)以給定棄連概率值的配置生成算法和根據(jù)配置生成uACNN拓?fù)浣Y(jié)構(gòu)的算法.
算法1所得到列表中元素代表的是對(duì)應(yīng)列表索引的uACNN結(jié)構(gòu)中最小計(jì)算單元節(jié)點(diǎn)在棄連概率值α下丟棄非同一集合中的節(jié)點(diǎn)數(shù)目,接下來要選擇uACNN結(jié)構(gòu)中最小計(jì)算單元節(jié)點(diǎn)不連接的節(jié)點(diǎn)編號(hào)并且要滿足所要求的約束條件.
算法1.uACNN的配置生成算法
輸入:uACNN節(jié)點(diǎn)總數(shù)N,相同最長路徑的節(jié)點(diǎn)個(gè)數(shù)M,棄連概率值α
輸出:uACNN連接最長路徑大于自身的節(jié)點(diǎn)數(shù)目及以棄連概率值α丟棄連接節(jié)點(diǎn)數(shù)目的列表P
1:i=0;p=[]
2:while i <= N-M
3: if i ==0
4: p<-(N-M)*α;i++#p中同時(shí)存入未乘α的
5: else #值,下同.
6: for j in M
7: if i%M ==0
8: p<-(N-M*int(i/M))*α+1;i++
9: else
10: p<-(N-M*(int(i/M)+1))*α)+1;i++
11:return p
算法2.uACNN拓?fù)浣Y(jié)構(gòu)生成算法
輸入:uACNN節(jié)點(diǎn)總數(shù)N,相同最長路徑節(jié)點(diǎn)個(gè)數(shù)M以及配置文件P
輸出:uACNN節(jié)點(diǎn)不連接的節(jié)點(diǎn)編號(hào)列表Q
1:q=[]
2:for k in N-M+1
3: if k ==0
4: q <-random([M,N+1),p[k])
5: else
6: if k%M==0
7: t1 = random([k+1,N+1),p[k])
8: if(k+M)in t1
9: t1 <-remove(k+M);q <-t1
10: else
11: t2 = random([k+M-k%M+1,N+1),p[k])
12: if k+M in t2
13: t2 <-remove(k+M);q <-t2
14:return q
對(duì)于上述兩種算法所生成uACNN模型的拓?fù)浣Y(jié)構(gòu),兩節(jié)點(diǎn)間路徑長度為1的最小計(jì)算單元的輸入輸出結(jié)果,執(zhí)行通道層面的concatenate操作.
若uACNN中存在多個(gè)非對(duì)齊網(wǎng)絡(luò)結(jié)構(gòu)模塊(unalignment block,記為uAblock),那么根據(jù)之前所述,每一個(gè)uAblock使用的棄連概率值不同,會(huì)直接影響uACNN模型的性能以及模型使用的參數(shù)數(shù)量.舉個(gè)例子,假設(shè)每一個(gè)uAblock中共144個(gè)節(jié)點(diǎn),分為有36組,每組有4個(gè)節(jié)點(diǎn),根據(jù)3.1所介紹的uACNN模型拓?fù)浣Y(jié)構(gòu)生成算法,當(dāng)使用三個(gè)uAblock的棄連概率值均為0的時(shí)候,使用的參數(shù)數(shù)量分別為{uAblock1:106272、uAblock2:292896、uAblock3:479520},由此可見,在性能損耗可接受的性能情況下,每個(gè)uAblock所使用的棄連概率值會(huì)直接影響uACNN模型的參數(shù)數(shù)量.對(duì)于uAblock在Cifar10數(shù)據(jù)集上分別使用概率值順序?yàn)?.8,0.5,0.4和0.4,0.5,0.8的實(shí)驗(yàn)結(jié)果如表2所示.
表2 非同序棄連概率值結(jié)果
Table 2 Non-sequential abandonment probability result
模型模型參數(shù)測試錯(cuò)誤率uACNN8546408020.0613uACNN4584985300.0647
由表2可以看出,在性能損耗是可接受的情況下,越是靠后使用大的概率,uACNN模型使用的參數(shù)數(shù)量就是越少.
在這一小節(jié)中,將使用uACNN模型分別表示如ResNet、Deeply-fused Net、Interleaved Group Convolution等卷積神經(jīng)網(wǎng)絡(luò)模型.
ResNet的網(wǎng)絡(luò)模型結(jié)構(gòu)是由殘差模塊構(gòu)成的,每一個(gè)模塊都是由多個(gè)卷積層和一個(gè)恒等映射組成.這個(gè)恒等映射將該模塊的輸入和輸出連接到一起,然后執(zhí)行add操作.因此,uACNN模型在生成最小計(jì)算單元節(jié)點(diǎn)集合的時(shí)候擁有與ResNet模型的殘差模塊中相同的過濾器個(gè)數(shù)(為了便于描述,假設(shè)殘差模塊的節(jié)點(diǎn)數(shù)為NR),即在算法1中使M等于NR,棄連概率值α設(shè)置為0,并約束節(jié)點(diǎn)組間的連接只存在于相鄰的兩組,即在算法2中所有隨機(jī)生成函數(shù)使用的區(qū)間設(shè)定為[x,x+2),其中x表示同路徑長度的節(jié)點(diǎn)數(shù)目,且執(zhí)行add操作來匯總卷積結(jié)果,那么uACNN就轉(zhuǎn)變?yōu)镽esNet.
Deeply-fused Net的網(wǎng)絡(luò)模型與uACNN模型很相似,DFN可以看做由兩個(gè)深度不同的BaseCNN組成,且兩個(gè)BaseCNN在中間某些層進(jìn)行融合.兩個(gè)融合層之間的網(wǎng)絡(luò)稱為模塊,每個(gè)模塊包含來自兩個(gè)BaseCNN的兩個(gè)部分.若DFN的每個(gè)模塊內(nèi)的兩個(gè)部分互換位置,可以看做兩個(gè)新的BaseCNN[20].基于此,當(dāng)uACNN模型在集合內(nèi)部的最小計(jì)算單元節(jié)點(diǎn)間連接是有序的,比如集合內(nèi)部存在兩個(gè)節(jié)點(diǎn),那么連接方式有{LL,RR,RL,LR},只需在算法1中設(shè)置棄連概率值α等于0.5;集合外部的連接是只有相鄰兩集合間存在,即在算法2中所有隨機(jī)生成函數(shù)使用的區(qū)間設(shè)定為[x,x+2),最后通過執(zhí)行add運(yùn)算來匯總卷積結(jié)果.若將上述僅有單過濾器的兩個(gè)不同深度BaseCNN組成的DFN模型推向更一般的DFN模型結(jié)構(gòu)(如DFN(m,n),其中m和n分別代表不同深度的BaseCNN中包含的過濾器數(shù)目),可以發(fā)現(xiàn)其是uACNN模型結(jié)構(gòu)的一種特例.
Interleaved Group Convolution包括幾組互補(bǔ)的結(jié)構(gòu)化的組卷積,并且組卷積的卷積矩陣是稀疏的.故IGC模塊表現(xiàn)出一種稀疏的形式.當(dāng)約定uACNN模型在生成最小計(jì)算單元節(jié)點(diǎn)間連接時(shí)滿足:只存在路徑長度為1的兩節(jié)點(diǎn)相連且為交叉連接,在算法1中得到的配置文件P,在傳遞給算法2前需要求其補(bǔ)集CNP,其中N為模型結(jié)構(gòu)中節(jié)點(diǎn)總數(shù).交替使用配置文件P和CNP來構(gòu)建uACNN模型,即可表現(xiàn)IGC模塊.
實(shí)驗(yàn)環(huán)境:本文所有實(shí)驗(yàn)的均在具有160GB RAM的Intel Xeon E5-2640服務(wù)器的單CPU核心(2.40GHz)實(shí)現(xiàn),操作系統(tǒng)為CentOS 7.4.1708.兩塊NVIDIA K40 GPU用于CNN計(jì)算.
Mnist數(shù)據(jù)集[21]:該數(shù)據(jù)集是包含70000張手寫數(shù)字灰度圖片的計(jì)算機(jī)視覺數(shù)據(jù)集,其10種數(shù)字的灰度圖片是由28×28個(gè)像素點(diǎn)構(gòu)成的.我們將數(shù)據(jù)集分為三部分:55000張圖片的訓(xùn)練集、5000張圖片的驗(yàn)證集和10000張圖片的訓(xùn)練集.我們使用中心化的技術(shù)對(duì)該數(shù)據(jù)集進(jìn)行預(yù)處理.
Cifar-10數(shù)據(jù)集[22]:該數(shù)據(jù)集是由包含10種類別的帶有32×32像素的彩色自然圖像組成,其訓(xùn)練集和測試集分別包含50000和10000張圖像.對(duì)于數(shù)據(jù)增強(qiáng),我們采用廣泛應(yīng)用在該數(shù)據(jù)集上的標(biāo)準(zhǔn)數(shù)據(jù)增強(qiáng)方案(鏡像/移位),對(duì)于預(yù)處理階段,我們使用圖像的均值和方差對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化.對(duì)于每一輪模型的訓(xùn)練,我們使用所有的50000張訓(xùn)練圖像,并在訓(xùn)練結(jié)束時(shí)報(bào)告測試錯(cuò)誤.
4.2.1 棄連概率值對(duì)參數(shù)數(shù)量與測試錯(cuò)誤率的影響
對(duì)為了觀察uACNN模型在使用不同的棄連概率值時(shí),網(wǎng)絡(luò)參數(shù)使用數(shù)量以及模型測試錯(cuò)誤率的變化,本實(shí)驗(yàn)設(shè)置網(wǎng)絡(luò)模型中棄連概率值以0.1為步長,從0.1增長到0.9,實(shí)驗(yàn)得到uACNN網(wǎng)絡(luò)模型對(duì)應(yīng)不同棄連概率值所使用的參數(shù)數(shù)量以及測試錯(cuò)誤率的實(shí)驗(yàn)結(jié)果如圖2和表3所示.
表3 不同棄連概率的測試錯(cuò)誤率(%)
Table 3 Test error rate for different abandonment probabilities
0.10.20.30.40.50.60.70.80.9Cifar106.095.856.066.066.056.516.476.647.12Mnist0.310.270.290.300.310.340.310.330.38
從圖2的實(shí)驗(yàn)結(jié)果中,我們發(fā)現(xiàn)棄連概率值選取得越大,uACNN網(wǎng)絡(luò)模型所使用的參數(shù)數(shù)量就越少,總體呈下降態(tài)勢;從表3的實(shí)驗(yàn)結(jié)果中我們發(fā)現(xiàn),uACNN網(wǎng)絡(luò)模型的測試錯(cuò)誤率于兩種數(shù)據(jù)集下均表現(xiàn)為在棄連概率值為0.2的時(shí)候達(dá)到最小值,在0.3,0.4,0.5和0.6,0.7時(shí)測試錯(cuò)誤率保持相對(duì)平穩(wěn),在棄連概率值為0.9時(shí)達(dá)到最大錯(cuò)誤率.
圖2 不同棄連概率的模型參數(shù)Fig.2 Model parameters for different abandonment probabilities
4.2.2 uACNN與最新的CNN模型的對(duì)比實(shí)驗(yàn)
根據(jù)上一個(gè)實(shí)驗(yàn)的結(jié)果,本實(shí)驗(yàn)設(shè)計(jì)了uACNN網(wǎng)絡(luò)模型:選取0.4,0.5,0.8的組合以對(duì)應(yīng)uACNN的三個(gè)block所使用的棄連概率值.本實(shí)驗(yàn)中的所有的神經(jīng)網(wǎng)絡(luò)模型均使用隨機(jī)梯度下降來進(jìn)行訓(xùn)練,設(shè)置batch size為64,max epoch為150且學(xué)習(xí)率的初始值為0.1,約定在100th epoch時(shí)降低為0.01,在125th epoch時(shí)降低為0.001.權(quán)重初始化方法采用[23]所介紹的方法,并且設(shè)置權(quán)重衰減值為0.0001,Nesterov動(dòng)量為0.9.實(shí)驗(yàn)結(jié)果如表4所示.
表4 uACNN與其他模型實(shí)驗(yàn)結(jié)果
Table 4 uACNN and other model experiment results
模型名稱模型深度/最長路徑模型參數(shù)測試錯(cuò)誤率(%)MnistCifar10ResNet11017279620.275.96IGC3824327640.265.70DenseNet4010197220.275.68uACNN(α1,2,3=0)4010522660.275.59uACNN(α1,2,3=0.4,0.5,0.8)404985300.306.47
根據(jù)表4的實(shí)驗(yàn)結(jié)果,可以發(fā)現(xiàn)uACNN的三個(gè)block在棄連概率值均設(shè)置為0的時(shí)候,與DenseNet40模型的使用參數(shù)數(shù)量以及測試錯(cuò)誤率相差無幾,這是因?yàn)楫?dāng)uACNN在棄連概率值設(shè)置為0的情況下,uACNN的非對(duì)齊結(jié)構(gòu)將會(huì)轉(zhuǎn)變?yōu)閷?duì)齊結(jié)構(gòu),而uACNN的連接會(huì)兩兩相連,即為DenseNet的密集連接;且uACNN的數(shù)據(jù)流入每一個(gè)卷積操作組前均會(huì)進(jìn)行Batch Normalization操作,故會(huì)與DenseNet40多出可忽略不計(jì)的參數(shù),由此可見,DenseNet模型是uACNN模型的一個(gè)特例.同時(shí)可以發(fā)現(xiàn),在uACNN模型所使用的參數(shù)數(shù)量相比其他CNN模型消減掉超過50%而測試錯(cuò)誤率僅下降不到1%.
圖3 Densenet40模型各層的統(tǒng)計(jì)值Fig.3 Statistics for each layer of the Densenet40 model
圖4 uACNN模型各單元的統(tǒng)計(jì)值Fig.4 Statistics for each unit of the Densenet40 model
我們統(tǒng)計(jì)了在Cifar10數(shù)據(jù)集下uACNN(α1,2,3=0.4,0.5,0.8)和Densenet40模型各單元(層)的平均值和標(biāo)準(zhǔn)差,如圖3和圖4所示,我們發(fā)現(xiàn)兩種模型在三個(gè)block中各單元(層)的參數(shù)取值走勢差別不大,我們認(rèn)為uACNN模型在用較少的參數(shù)即可達(dá)到接近Densenet40模型的特征表達(dá)能力,同時(shí)說明了uACNN模型有著更緊湊的特征融合.這會(huì)使得uACNN模型在使用較少的參數(shù)而準(zhǔn)確率無大幅度的影響.
CNN模型在圖像識(shí)別領(lǐng)域中表現(xiàn)出良好的性能.但在實(shí)際應(yīng)用中,往往會(huì)受到計(jì)算資源的限制,而減少CNN模型中卷積單元的參數(shù)冗余是解決該問題的有效手段之一.本文提出了一種基于非對(duì)齊網(wǎng)絡(luò)的CNN模型的輕量化探索方法,能有效的減少CNN模型所使用的參數(shù)數(shù)量.實(shí)驗(yàn)結(jié)果表明,相比于DenseNet40模型,以測試誤差下降≤1%為代價(jià)能夠削減掉≥50%模型參數(shù).如何進(jìn)一步準(zhǔn)確確定非對(duì)齊網(wǎng)絡(luò)的連接,在減少CNN模型使用參數(shù)數(shù)量的同時(shí)減少性能的下降,是論文未來工作方向之一.