畢鵬程,羅健欣,陳衛(wèi)衛(wèi),鄧益儂,劉 禎
(中國人民解放軍陸軍工程大學(xué) 指揮控制工程學(xué)院,江蘇 南京 210007)
自AlexNet[1]贏得ILSVRC2012[2]挑戰(zhàn)賽以來,各種新型網(wǎng)絡(luò)結(jié)構(gòu)層出不窮,一次次刷新ImageNet分類的準(zhǔn)確率。這些結(jié)構(gòu)包括VGGNet[3]、GoogLeNet[4]、ResNet[5]、DenseNet[6]、SE-Net[7]和神經(jīng)網(wǎng)絡(luò)架構(gòu)自動搜索[8],以上卷積神經(jīng)網(wǎng)絡(luò)發(fā)展的總體趨勢是使用更深層更復(fù)雜的網(wǎng)絡(luò)來實現(xiàn)更高的準(zhǔn)確度。但是準(zhǔn)確度的提高并不一定會使網(wǎng)絡(luò)在模型尺寸和運行速度方面更有優(yōu)勢。就模型尺寸而言,深層復(fù)雜的卷積神經(jīng)網(wǎng)絡(luò)擁有大量參數(shù),保存這些參數(shù)對設(shè)備內(nèi)存要求很高。運行速度方面,大量實際應(yīng)用均要求實時性,往往是毫秒級別,這對設(shè)備的計算能力要求很高。當(dāng)前,移動和嵌入式設(shè)備大量普及,這些設(shè)備的計算資源和存儲資源往往十分有限。因此只有在準(zhǔn)確度、尺寸和速度方面取得很好的權(quán)衡,即在有限計算力之下實現(xiàn)最優(yōu)的精度,才能將卷積神經(jīng)網(wǎng)絡(luò)更好地應(yīng)用于移動端。
本文提出了一種輕量化的高效卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)S-MobileNet,其可以方便地部署在移動平臺上。該網(wǎng)絡(luò)結(jié)構(gòu)是基于神經(jīng)網(wǎng)絡(luò)輕量化領(lǐng)域的先進結(jié)構(gòu)MobileNetV2[9]改進而來的,旨在保證同等準(zhǔn)確度水平的前提下進一步減少模型參數(shù)量和降低計算復(fù)雜度。
近幾年,調(diào)整深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)以在準(zhǔn)確度、尺寸和速度之間實現(xiàn)最佳平衡已經(jīng)成為一個很受關(guān)注的研究領(lǐng)域。這一研究領(lǐng)域的目標(biāo)是確定一個模型,該模型參數(shù)量很少,預(yù)測速度很快,同時能保持準(zhǔn)確度。
為了解決這個問題,可行的做法是對現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)模型進行壓縮,使得網(wǎng)絡(luò)擁有更少的參數(shù),同時能降低模型的計算復(fù)雜度。這些壓縮算法大致可以分為四類[10]:參數(shù)修剪和共享、低秩分解、遷移/壓縮卷積濾波器和知識蒸餾?;趨?shù)修剪和共享的方法關(guān)注于探索模型參數(shù)中冗余的部分,并嘗試去除冗余和不重要的參數(shù)?;诘椭确纸饧夹g(shù)的方法使用矩陣/張量分解估計深層卷積神經(jīng)網(wǎng)絡(luò)中最具信息量的參數(shù)?;谶w移/壓縮卷積濾波器的方法設(shè)計了特殊結(jié)構(gòu)的卷積濾波器以減少存儲和計算復(fù)雜度。而知識蒸餾則學(xué)習(xí)了一個精煉模型,即訓(xùn)練一個更加緊湊的神經(jīng)網(wǎng)絡(luò)以再現(xiàn)大型網(wǎng)絡(luò)的輸出結(jié)果。
除了對現(xiàn)有的網(wǎng)絡(luò)模型進行壓縮,還可以重新設(shè)計新的網(wǎng)絡(luò)結(jié)構(gòu),使得參數(shù)量少、速度快的同時,依然保持較高的準(zhǔn)確度,即輕量化網(wǎng)絡(luò)模型設(shè)計。近年來,眾多輕量化網(wǎng)絡(luò)結(jié)構(gòu)紛紛被提出,如SqueezeNet[11]、MobileNetV1[12]、MobileNetV2、ShuffleNetV1[13]和ShuffleNetV2[14]等。在這些網(wǎng)絡(luò)結(jié)構(gòu)中,MobileNetV2和ShuffleNetV2實現(xiàn)了最先進的性能。MobileNetV2利用深度可分離卷積、線性瓶頸和反向殘差結(jié)構(gòu)在兼顧參數(shù)量和計算復(fù)雜度的同時實現(xiàn)了較高的準(zhǔn)確度。而ShuffleNetV2采用通道混洗的方法混合通道間的特征信息,與采用逐點卷積方法來混合通道之間特征信息的MobileNetV2相比,少了大量的參數(shù)數(shù)量和計算復(fù)雜度,因此在保證準(zhǔn)確度的同時在模型運行速度方面取得了不錯的效果。
總的來說,S-MobileNet是采用通道混洗方法改進MobileNetV2的基本構(gòu)建模塊后得到的網(wǎng)絡(luò)結(jié)構(gòu)。受益于這種方法,S-MobileNet可以在保證準(zhǔn)確度的同時獲得較小的模型尺寸和較低的計算復(fù)雜度。
MobileNetV2的基本構(gòu)建模塊使用了三個關(guān)鍵結(jié)構(gòu),即深度可分離卷積、反向殘差和線性瓶頸結(jié)構(gòu)。
深度可分離卷積對于許多高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來說都是非常關(guān)鍵的組件[12]?;舅悸肥菍⒁粋€標(biāo)準(zhǔn)卷積分解成兩步來實現(xiàn),第一步是深度卷積,即對每個輸入通道用單個卷積核進行卷積運算;第二步是一個1×1卷積,即逐點卷積,負責(zé)通過計算輸入通道間的線性組合來構(gòu)建新的特征。如圖1所示,(a)表示一組空間尺寸為K×K的標(biāo)準(zhǔn)卷積核,卷積核通道數(shù)為N,數(shù)量為M;(b)表示標(biāo)準(zhǔn)卷積分解成的一組深度可分離卷積,包含一組空間尺寸為K×K的深度卷積核和一組空間尺寸為1×1的逐點卷積核。
圖1 標(biāo)準(zhǔn)卷積結(jié)構(gòu)和深度可分離卷積結(jié)構(gòu)
此時,假設(shè)輸入特征為RH×W×N,輸出特征為RH×W×M,則標(biāo)準(zhǔn)卷積層的計算復(fù)雜度為HWNMK2,參數(shù)量為NMK2。深度可分離卷積包含一組RK×K×1×N深度卷積核和一組R1×1×N×M逐點卷積核,則深度可分離卷積的計算復(fù)雜度為HWNK2+HWNM,是標(biāo)準(zhǔn)卷積的1/M+1/K2,因為網(wǎng)絡(luò)結(jié)構(gòu)中M?K2,MobileNetV2使用K=3,即深度可分離卷積計算復(fù)雜度降低了標(biāo)準(zhǔn)卷積的8~9倍。同理,深度可分離卷積層的參數(shù)量減少了標(biāo)準(zhǔn)卷積層的8~9倍。
殘差網(wǎng)絡(luò)使信息更容易在各層之間流動,包括在前向傳播時提供特征重用,在反向傳播時緩解梯度消失,梯度更容易流動到淺層網(wǎng)絡(luò)中去,解決了網(wǎng)絡(luò)退化問題,即隨著層數(shù)的增加,訓(xùn)練集上的準(zhǔn)確度飽和甚至下降的問題。這樣能夠通過單純地增加網(wǎng)絡(luò)深度來提高網(wǎng)絡(luò)準(zhǔn)確度。傳統(tǒng)的殘差結(jié)構(gòu)特征通道維度先縮減后擴展,如圖2(a)所示,而MobileNetV2中的反向殘差結(jié)構(gòu)shortcut連接的是瓶頸層,特征通道維度先擴展后縮減[9],如圖2(b)所示。這樣做是因為傳統(tǒng)殘差結(jié)構(gòu)中間的3×3標(biāo)準(zhǔn)卷積計算量太大,先用一個1×1卷積來降低通道維度,目的是減小計算量,而MobileNetV2使用深度卷積替換了3×3標(biāo)準(zhǔn)卷積,雖然極大地減少了計算量和參數(shù)量,但提取的特征也會相對減少,如果再進行壓縮,能提取的特征將更少,影響模型的準(zhǔn)確度。因此為了在準(zhǔn)確度、參數(shù)量和計算量之間取得更好的平衡,采用反向殘差結(jié)構(gòu),先對通道進行擴展,深度卷積能提取更多特征,保證模型準(zhǔn)確度。
圖2 殘差結(jié)構(gòu)和反向殘差結(jié)構(gòu)
線性瓶頸就是去掉了低維度輸出層后面的非線性激活層,目的也是為了保證模型的準(zhǔn)確度[9]。圖3(a)、(b)為MobileNetV2基本構(gòu)建模塊,(a)為卷積步長為1的構(gòu)建模塊,(b)為空間下采樣構(gòu)建模塊。去除了低維度1×1卷積層后的非線性激活函數(shù)ReLU6變?yōu)榫€性輸出。這樣做主要是因為通過低維度輸出層之后,特征信息更集中在縮減后的通道中,此時加上一個非線性激活函數(shù),比如ReLU6,ReLU6會使負值輸入的輸出為0,這樣就會有較大的信息丟失,影響準(zhǔn)確度。為了減少信息丟失,在通道維度縮減的那一層,即瓶頸層的輸出不接非線性激活函數(shù),所以是線性瓶頸。
如上所述,MobileNetV2使用的這些方法對于其保證準(zhǔn)確度、減少參數(shù)量和降低計算復(fù)雜度至關(guān)重要,因此在S-MobileNet網(wǎng)絡(luò)結(jié)構(gòu)中依然沿用這三種方法。與此同時,采用深度可分離卷積雖然極大地降低了計算復(fù)雜度,減少了參數(shù)量,但因為MobileNetV2網(wǎng)絡(luò)結(jié)構(gòu)在每個構(gòu)建模塊中都引入了擴展因子,這樣1×1卷積所占的參數(shù)量和計算量依然較高,而1×1卷積的作用在于混合通道間的特征信息。
圖3 MobileNetV2和S-MobileNet的構(gòu)建模塊
此時想到,ShuffleNet[13]提出的通道混洗方法能很好地解決分組卷積之后分組間“信息流通不暢”的問題,即分組間的特征信息沒有得到混合的問題,此問題會影響模型的準(zhǔn)確度。圖4(a)表示分組卷積之后沒有進行通道混洗,(b)表示分組卷積之后進行了通道混洗,(c)操作同(b),混洗操作是均勻打亂而不是隨機打亂順序。而MobileNetV2構(gòu)建模塊中采用的深度卷積是分組卷積的特殊形式,即分組數(shù)與通道數(shù)相等的分組卷積。
圖4 通道混洗
因此,本文采用通道混洗替代一部分1×1卷積的方法來改進MobileNetV2的瓶頸模塊,形成S-MobileNet的基本模塊。如圖3(c)、(d)所示,改進包含shortcut連接的瓶頸塊,即卷積步長為1并且輸入輸出特征通道數(shù)相等的瓶頸塊。在此類瓶頸塊開始,c個特征通道的輸入被分為兩支,分別帶有c-c′和c′個通道。一個分支不進行任何操作,另一個分支與原瓶頸塊結(jié)構(gòu)一致,即先用1×1卷積提升通道數(shù),再用深度卷積提取特征,然后用1×1卷積降低通道數(shù),并去除低維度輸出層后的ReLU6函數(shù)。卷積之后,把兩個分支拼接起來,從而輸出通道數(shù)與輸入相等。然后進行與ShuffleNetV2相同的通道混洗操作來保證兩個分支間能進行信息交流。之后,下一個瓶頸塊開始運算。注意,MobileNetV2中的加法操作不再存在,這樣做的目的是為了減少元素級別操作,從而減少模型運算時間,提升速度[14]。采用這種通道分割的方法,每個瓶頸塊只有c′個通道特征需要進行卷積運算,相比于原網(wǎng)絡(luò)c個通道特征均進行卷積運算,極大地降低了計算復(fù)雜度,減少了參數(shù)量。
空間下采樣瓶頸塊沒有shortcut連接,因此不引入通道分割和通道混洗方法,與原網(wǎng)絡(luò)結(jié)構(gòu)保持不變。同樣地,卷積步長為1但輸入輸出通道數(shù)不相等的瓶頸塊也沒有shortcut連接,因此也保持不變。構(gòu)建模塊卷積部分的具體實現(xiàn)與MobileNetV2保持一致,如表1所示,對于一個分辨率為H×W的輸入特征,擴展因子為t,深度卷積核空間尺寸為3,卷積步長為s,卷積部分輸入通道數(shù)為N,輸出通道數(shù)為M,則計算復(fù)雜度是HWNt(N+9/s2+M/s2),參數(shù)量為Nt(N+9+M)。
表1 S-MobileNet構(gòu)建模塊卷積部分的實現(xiàn)
上述構(gòu)建模塊被重復(fù)堆疊以構(gòu)建整個網(wǎng)絡(luò),為簡單起見,本文采用與ShuffleNetV2一樣的做法,令c′=c/2,整體網(wǎng)絡(luò)結(jié)構(gòu)與MobileNetV2保持一致,如表2所示。表2每行描述了1個或多個相同層的序列,重復(fù)n次。所有序列相同的層有相同的輸出通道數(shù)c,序列第一層的步長為s,其他層步長為1。所有空間卷積核尺寸使用3×3的大小。擴展因子t總是應(yīng)用在表1描述的輸入中。
表2 S-MobileNet整體網(wǎng)絡(luò)結(jié)構(gòu)
S-MobileNet參數(shù)量減少、速度提升的同時還能保持準(zhǔn)確度的原因主要是采用了通道分割的方法。在每個塊中,一半的特征通道(當(dāng)c′=c/2時)直接通過塊并加入下一個瓶頸塊,這可以被視為一種特征重用,在ShuffleNetV2中已經(jīng)被證明這種重用模式與DenseNet[6]的特征重用模式是一致的,都有利于提高模型的準(zhǔn)確度[14]。
在CIFAR-10、CIFAR-100和ImageNet三種圖像分類數(shù)據(jù)集上對本文提出的S-MobileNet進行了實驗評測。實驗結(jié)果表明本文提出的卷積網(wǎng)絡(luò)結(jié)構(gòu)比MobileNetV2的網(wǎng)絡(luò)模型參數(shù)量減少了近1/3,計算復(fù)雜度降低了近40%,同時保持了同等水平的模型準(zhǔn)確度。除了實現(xiàn)S-MobileNet之外,本文還在這三種圖像分類數(shù)據(jù)集上實現(xiàn)了MobileNetV2作為實驗對比。在這三組實驗中,除了網(wǎng)絡(luò)結(jié)構(gòu)不同外,其他實驗設(shè)置如數(shù)據(jù)處理方法、初始化方法、批大小、訓(xùn)練輪次等均保持一致。
CIFAR-10[15]數(shù)據(jù)集是一個由50 000張訓(xùn)練圖像和10 000張測試圖像組成的彩色圖像分類數(shù)據(jù)集。圖像大小為32×32,包含10個不同的物體類別。在實驗中,通過隨機水平翻轉(zhuǎn)圖像來對訓(xùn)練數(shù)據(jù)進行擴增處理。本文提出的網(wǎng)絡(luò)結(jié)構(gòu)在CIFAR-10數(shù)據(jù)集上的實驗結(jié)果及對比如表3所示。在準(zhǔn)確度方面,S-MobileNet在TOP-1精度方面與MobileNetV2保持相當(dāng),在TOP-5精度上甚至要高于MobileNetV2。與此同時,參數(shù)量和計算復(fù)雜度較MobileNetV2降低了35%和38%。
表3 兩個網(wǎng)絡(luò)在CIFAR-10上的表現(xiàn)對比
CIFAR-100[15]數(shù)據(jù)集和CIFAR-10數(shù)據(jù)集的組成方式基本一致。區(qū)別在于CIFAR-100數(shù)據(jù)集中具有100類不同的圖像,每種類別的圖像數(shù)量少于CIFAR-10數(shù)據(jù)集,只有CIFAR-10數(shù)據(jù)集中的1/10,因此區(qū)分難度較大,測試準(zhǔn)確度比CIFAR-10數(shù)據(jù)集低。本文提出的網(wǎng)絡(luò)結(jié)構(gòu)在CIFAR-100數(shù)據(jù)集上的實驗結(jié)果及對比如表4所示。在準(zhǔn)確度方面,S-MobileNet與MobileNetV2保持相當(dāng)水平,與此同時,參數(shù)量和計算復(fù)雜度較MobileNetV2降低了34%和37%。
表4 兩個網(wǎng)絡(luò)在CIFAR-100上的表現(xiàn)對比
ImageNet數(shù)據(jù)集是一個由1 281 670張訓(xùn)練圖像和50 000張測試圖像組成的彩色圖像分類數(shù)據(jù)集。圖像大小為224×224,包含1 000個不同的物體類別。實驗結(jié)果及與MobileNetV2網(wǎng)絡(luò)模型的對比如表5所示。在準(zhǔn)確度方面,S-MobileNet與MobileNetV2保持相當(dāng)水平,但參數(shù)量和計算復(fù)雜度較MobileNetV2降低了23%和38%。
表5 兩個網(wǎng)絡(luò)在ImageNet上的表現(xiàn)對比
本文提出了一種輕量化的高效卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)S-MobileNet。與神經(jīng)網(wǎng)絡(luò)輕量化領(lǐng)域的先進結(jié)構(gòu)MobileNetV2相比,S-MobileNet在保持同等準(zhǔn)確度水平的前提下,模型參數(shù)量減少了近1/3,模型計算復(fù)雜度降低了近40%。本文提出的S-MobileNet是一種能夠方便地遷移到各移動平臺上的通用卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),可以應(yīng)用到多種任務(wù)中,如物體檢測、語義分割、人臉識別等。由于時間和實驗條件有限,本文只在圖像分類任務(wù)中對S-MobileNet的有效性進行了驗證。分類任務(wù)的實驗結(jié)果表明,S-MobileNet確實是一種高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。在以后的工作中,筆者會進一步研究S-MobileNet在計算機視覺其他方面的表現(xiàn),如物體檢測及語義分割等,以探究S-MobileNet的高效性和通用性。