馬金林,張 裕,馬自萍,毛凱績(jī)
1.北方民族大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,銀川750021
2.圖像圖形智能處理國(guó)家民委重點(diǎn)實(shí)驗(yàn)室,銀川750021
3.北方民族大學(xué) 數(shù)學(xué)與信息科學(xué)學(xué)院,銀川750021
在近幾年中,輕量化神經(jīng)網(wǎng)絡(luò)成為一個(gè)非常重要且十分活躍的研究領(lǐng)域,許多學(xué)者在網(wǎng)絡(luò)結(jié)構(gòu)和卷積方面對(duì)輕量化方法進(jìn)行了研究,并取得了大量成果,誕生了很多貼合實(shí)際應(yīng)用需求的優(yōu)秀輕量化神經(jīng)網(wǎng)絡(luò)模型。2012 年AlexNet的驚艷亮相為神經(jīng)網(wǎng)絡(luò)發(fā)展提供了改進(jìn)思路,使得ZF-Net、VGG-Nets、GoogleNet、ResNet以及DenseNet等眾多網(wǎng)絡(luò)模型可以采用加深網(wǎng)絡(luò)和增強(qiáng)卷積功能的方式來(lái)提升網(wǎng)絡(luò)識(shí)別準(zhǔn)確率。該方式使得模型性能有了顯著提升,但網(wǎng)絡(luò)結(jié)構(gòu)較之前更為復(fù)雜,使得所需計(jì)算量和內(nèi)存大大增加。
上述模型以提升準(zhǔn)確率為主要目的,與其不同的是,2016 年最早公開的輕量化網(wǎng)絡(luò)SqueezeNet在ImageNet 數(shù)據(jù)集上可達(dá)到近似AlexNet 的效果,但參數(shù)量?jī)H為AlexNet 的2%,若同時(shí)結(jié)合模型壓縮(deep compression)技術(shù),SqueezeNet 的參數(shù)量則會(huì)進(jìn)一步降低為AlexNet參數(shù)量的約0.2%。
輕量化神經(jīng)網(wǎng)絡(luò)模型(lightweight neural network model)是基于原有卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)的發(fā)展進(jìn)行改進(jìn)的,目的是為了能更好地將神經(jīng)網(wǎng)絡(luò)進(jìn)行移動(dòng)普及應(yīng)用,可以說(shuō)是專為嵌入式移動(dòng)設(shè)備視覺終端設(shè)計(jì)的模型。與原有網(wǎng)絡(luò)模型相比,輕量化模型具有結(jié)構(gòu)輕便、計(jì)算簡(jiǎn)單、可移植性強(qiáng)的優(yōu)點(diǎn)。目前,輕量化模型應(yīng)用已涉及自然語(yǔ)言處理、數(shù)據(jù)挖掘、醫(yī)學(xué)圖像處理等領(lǐng)域,在確保模型精度不降低的前提下,最大程度地提高運(yùn)算速度。
在輕量化神經(jīng)網(wǎng)絡(luò)中,大多使用人工設(shè)計(jì)的卷積進(jìn)行網(wǎng)絡(luò)構(gòu)建。由于設(shè)計(jì)思路的局限性,模型中可能存在大量卷積冗余。若想進(jìn)一步提升網(wǎng)絡(luò)運(yùn)行速度,則可以選擇對(duì)網(wǎng)絡(luò)中的基礎(chǔ)構(gòu)建功能塊之一“卷積”進(jìn)行輕量化設(shè)計(jì)。通過(guò)對(duì)卷積的空間維度和通道維度進(jìn)行調(diào)整,可有效降低卷積冗余度,提升卷積計(jì)算速度,達(dá)到輕量化目的。卷積的輕量化主要分為卷積結(jié)構(gòu)輕量化、卷積模塊輕量化以及卷積運(yùn)算輕量化三方面。卷積結(jié)構(gòu)輕量化主要調(diào)整單一卷積核的數(shù)量、大小及其計(jì)算方式。卷積模塊輕量化主要調(diào)整各卷積間的結(jié)構(gòu)組成。卷積運(yùn)算輕量化主要調(diào)整網(wǎng)絡(luò)中的卷積運(yùn)算方式。
卷積是輕量化神經(jīng)網(wǎng)絡(luò)中的核心組成部分,用于提取圖像特征。對(duì)卷積進(jìn)行調(diào)整以達(dá)到輕量化目的,是大多數(shù)神經(jīng)網(wǎng)絡(luò)進(jìn)行修改操作的優(yōu)先選擇。單一卷積結(jié)構(gòu)的輕量化可通過(guò)調(diào)整所使用的卷積核大小,改變使用的卷積核總數(shù),同時(shí)改變卷積核的數(shù)量并結(jié)合網(wǎng)絡(luò)寬度的方式進(jìn)行實(shí)現(xiàn)。
卷積核尺寸的選取決定了網(wǎng)絡(luò)中感受野(receptive field)的范圍大小。卷積核的尺寸越大,感受野也越大。感受野是指在卷積操作過(guò)程中所看到的圖片信息,因此看到得越多,特征的提取效果越好。AlexNet 的網(wǎng)絡(luò)設(shè)計(jì)中使用11×11 的卷積核,并在2012 年的ImageNet 分類競(jìng)賽中獲得了冠軍,證明了其網(wǎng)絡(luò)設(shè)計(jì)的優(yōu)越性。因此,當(dāng)時(shí)的人們普遍認(rèn)為模型設(shè)計(jì)時(shí),卷積核的尺寸越大越好。于是,在早期的神經(jīng)網(wǎng)絡(luò)模型中為保證提取效果,網(wǎng)絡(luò)中大多使用尺寸較大的卷積核進(jìn)行特征提取。
但是后續(xù)大量模型的實(shí)驗(yàn)效果證明了使用大尺寸卷積核在特征提取效果優(yōu)越的同時(shí)也存在著隱患。大卷積核會(huì)使得模型出現(xiàn)計(jì)算量驟增、無(wú)法自如調(diào)整深度、性能受限等問(wèn)題,因此近年的神經(jīng)網(wǎng)絡(luò)構(gòu)建中已經(jīng)很少直接使用如11×11 等較大尺寸的卷積核。
神經(jīng)網(wǎng)絡(luò)中常用的卷積核尺寸有11×11、7×7、5×5、3×3、1×1 這五種類型。卷積核尺寸的調(diào)整可分為使用小卷積替換大卷積和使用特殊卷積“1×1 卷積”調(diào)整網(wǎng)絡(luò)兩個(gè)方向。
卷積替換的思路源于InceptionV3,通過(guò)對(duì)不同尺寸卷積核所需計(jì)算量進(jìn)行分析比較后,InceptionV3 提出可對(duì)大尺寸卷積核進(jìn)行拆分操作。在InceptionV3 的卷積結(jié)構(gòu)中,原有卷積層中的5×5 卷積被兩個(gè)3×3 卷積進(jìn)行替換。與原始的5×5 卷積的模型參數(shù)量相比,使用兩個(gè)3×3 卷積替換后,參數(shù)量降低了27.8%,且卷積分解前后,感受野較之前未發(fā)生變化。
如圖1 所示,5×5 的輸入特征圖經(jīng)由一個(gè)5×5 卷積和兩個(gè)3×3 卷積后,所得的輸出特征圖尺寸均為1×1,且所得感受野大小均為5。
圖1 卷積感受野對(duì)比Fig.1 Convolution receptive field comparison
PVANet也如同Inception 一樣對(duì)圖像中的目標(biāo)進(jìn)行捕獲,甚至為了提升網(wǎng)絡(luò)性能還搭配了跳躍連接(skip connrection)進(jìn)行基礎(chǔ)網(wǎng)絡(luò)的特征提取,最終在圖形處理器(graphics processing unit,GPU)上達(dá)到21.7 FPS(frames per second)的運(yùn)行速度。PeleeNet的2-way Dense(原Dense 結(jié)構(gòu)的改進(jìn))結(jié)構(gòu)受Inception 多尺度思想的影響,將5×5 的卷積核拆分為兩個(gè)3×3的卷積核后,與一個(gè)3×3卷積核并行,如圖2所示。PeleeNet 的計(jì)算成本較經(jīng)典輕量化模型MobileNets減少11%,準(zhǔn)確率較MobileNets提升0.6%。
圖2 PeleeNet中2-way Dense LayerFig.2 2-way Dense Layer in PeleeNet
在八鄰域像素內(nèi),3×3 卷積是能夠捕捉信息的最小奇數(shù)卷積核尺寸,因此各類輕量化模型常使用3×3 卷積進(jìn)行卷積替換操作,以此來(lái)降低模型計(jì)算量。3×3 卷積核單獨(dú)使用可提取目標(biāo)圖片中小尺度的目標(biāo)信息,大卷積核的拆分可以在保留與大卷積相同的特征學(xué)習(xí)能力的同時(shí)降低模型計(jì)算量。因此PeleeNet 的2-way Dense 結(jié)構(gòu)進(jìn)行并行處理可在降低計(jì)算量的同時(shí)獲得準(zhǔn)確率的提升。5×5 卷積使用3×3卷積替換的實(shí)質(zhì)是將一次5×5 操作拆解為兩個(gè)3×3的結(jié)果之和,使用簡(jiǎn)單的加法運(yùn)算對(duì)復(fù)雜的乘法運(yùn)算進(jìn)行替換,降低了計(jì)算量,維持了感受野,提升了運(yùn)行速度。
除使用3×3 的常規(guī)卷積降低網(wǎng)絡(luò)參數(shù)量外,也可以使用1×1 的卷積達(dá)到相同目的。1×1 卷積由于尺寸原因,無(wú)需考慮與周圍其他像素的關(guān)系。1×1 卷積操作僅可以對(duì)特征圖的通道個(gè)數(shù)進(jìn)行調(diào)整,升維或降維的功效取決于所采用1×1 卷積的個(gè)數(shù)。如圖3所示,若采用兩個(gè)1×1 卷積,特征圖的深度將由3 變?yōu)?;若采用四個(gè)1×1 卷積,特征圖的深度將由3 變?yōu)?。當(dāng)1×1 卷積進(jìn)行降維時(shí),產(chǎn)生的特征圖減少,參數(shù)量下降,因而達(dá)到了輕量化的目的。
圖3 1×1 卷積的作用Fig.3 Role of 1×1 convolution
MobileNets 里由深度卷積(depthwise convolution,DW)和逐點(diǎn)卷積(pointwise convolution,PW)兩部分構(gòu)成的深度可分離卷積(depthwise separable convolution,DSC)中,逐點(diǎn)卷積便是通過(guò)1×1 卷積計(jì)算調(diào)整深度卷積輸出的線性組合,從而得到新的特征。與標(biāo)準(zhǔn)的3×3 卷積相比,3×3 的深度可分離卷積在精度略有下降的情況下,將計(jì)算量在原有基礎(chǔ)上降低了11.1%至12.5%。CornerNet-Lite中CornerNet-Squeeze結(jié)構(gòu)借鑒了MobileNets 的思想,將3×3 的普通卷積替換為MobileNets 的3×3 深度可分離卷積,將部分3×3常規(guī)卷積替換為1×1 卷積,并且削減3×3 卷積的輸入通道數(shù),盡可能加速推理過(guò)程,提高網(wǎng)絡(luò)效率。
兩種卷積核尺寸的縮減雖在設(shè)計(jì)結(jié)構(gòu)中存在差異,但其本質(zhì)都是通過(guò)降低乘法過(guò)程中的操作數(shù)大小來(lái)實(shí)現(xiàn),在數(shù)學(xué)意義上將標(biāo)準(zhǔn)單次乘法操作進(jìn)行拆解,使用底層機(jī)器更為青睞的加法運(yùn)算替代部分乘法操作,以達(dá)到提升模型運(yùn)行速度的效果。
不同于調(diào)整卷積核大小策略中通過(guò)采用小型卷積來(lái)降低運(yùn)算量的方式,改變卷積核數(shù)量選擇將常規(guī)卷積在空間維度與通道維度上進(jìn)行拆解,并分步驟進(jìn)行,使得所用卷積數(shù)量較原始卷積數(shù)量有所變化。常規(guī)卷積操作涉及空間結(jié)構(gòu)與通道兩方面,可認(rèn)為標(biāo)準(zhǔn)卷積操作是同時(shí)對(duì)空間卷積與線性通道進(jìn)行了操作。并且眾所周知,卷積操作是乘法運(yùn)算。對(duì)于底層設(shè)備而言,乘法運(yùn)算的計(jì)算難度遠(yuǎn)高于加法運(yùn)算。綜上所述,為降低卷積計(jì)算量,卷積核數(shù)量的改變可分為兩種方法,一種是將標(biāo)準(zhǔn)卷積在空間結(jié)構(gòu)與通道方面進(jìn)行解耦,另一種是對(duì)卷積的乘積運(yùn)算在空間結(jié)構(gòu)上進(jìn)行因式分解,通過(guò)拆解完整乘積運(yùn)算為分段式運(yùn)算的總和來(lái)達(dá)到目的。兩種方式在運(yùn)算上均采用分段運(yùn)算,因卷積步驟拆解,所以會(huì)導(dǎo)致所使用的卷積核數(shù)量較原始卷積發(fā)生變化,通常拆解卷積會(huì)較之前使用更多的小尺寸卷積,卷積數(shù)量增多,卷積結(jié)構(gòu)更為復(fù)雜。
MobileNets 提出的深度可分離卷積便是解耦操作。深度可分離卷積將常規(guī)三維卷積分解為二維空間的深度卷積和修改通道個(gè)數(shù)的逐點(diǎn)卷積,將三維輸入特征變成獨(dú)立的二維平面特征和通道維度。卷積過(guò)程中為每個(gè)通道分配一個(gè)卷積核,并將卷積后的特征圖維度作為輸入通道數(shù),利用單個(gè)卷積濾波器實(shí)施;然后將特征圖串聯(lián)(Concat)起來(lái)進(jìn)行逐點(diǎn)卷積,通過(guò)逐點(diǎn)卷積計(jì)算輸入通道的線性組合來(lái)構(gòu)建新特征。在模型參數(shù)量占比中除完全連接層(fully connected layer,F(xiàn)C)占據(jù)的24.33%外,逐點(diǎn)卷積占據(jù)模型總參數(shù)量的74.59%。解耦操作產(chǎn)生的分段計(jì)算大大降低了網(wǎng)絡(luò)計(jì)算量,達(dá)到了輕量化的目的。Xception中的extreme Inception 模塊效果與深度可分離卷積類似,區(qū)別僅在于DW 和PW 的運(yùn)行順序,但模塊在整體網(wǎng)絡(luò)結(jié)構(gòu)中都是相連的,順序其實(shí)并沒有太大影響。
藍(lán)圖可分離卷積(blueprint separable convolutions,BSConv),簡(jiǎn)稱藍(lán)圖卷積,存在無(wú)限制藍(lán)圖卷積(unconstrained BSConv,BSConv-U)和子空間藍(lán)圖卷積(subspace BSConv,BSConv-S)兩類,如圖4 所示。藍(lán)圖卷積結(jié)構(gòu)設(shè)計(jì)類似MobileNets 提出的深度可分離卷積,同為解耦操作,準(zhǔn)確率較同期產(chǎn)品提升9.5%。
圖4 BSConv-U、BSConv-S 及基礎(chǔ)卷積Fig.4 BSConv-U,BSConv-S and basic convolution
“藍(lán)圖”提出可由一個(gè)藍(lán)圖卷積通過(guò)各種線性變換進(jìn)行常規(guī)卷積替換操作,通過(guò)附加變換的微小代價(jià)進(jìn)行模型中卷積數(shù)量的縮減,以達(dá)到輕量化效果。BSConv-U 將常規(guī)卷積分解為一個(gè)1×1 卷積和二維通道卷積,與深度可分離卷積操作相反,交換了DW 和PW 的順序,先在深度方向上加權(quán)組合再卷積。BSConv-S 基于卷積核矩陣的行與行之間存在高度關(guān)聯(lián)關(guān)系,將該卷積核進(jìn)行矩陣分解來(lái)實(shí)現(xiàn)權(quán)重矩陣的低秩近似,并通過(guò)添加正交約束來(lái)減少參數(shù)之間的相互關(guān)聯(lián),結(jié)果是將一個(gè)1×1 卷積分解成兩個(gè)1×1 卷積。
SqueezeNet 提出的Fire 模塊同樣也是解耦操作,如圖5 所示,設(shè)計(jì)思想接近Inception系列。Fire模塊將常規(guī)卷積解耦為由Squeeze 層和Expand 層兩部分組成的分步卷積操作。Squeeze 部分采用少于上一層特征圖數(shù)量的1×1 卷積,以減少特征圖的維數(shù),降低計(jì)算量。使用1×1 小尺寸卷積是1.1 節(jié)中的卷積核大小的調(diào)整,在此不過(guò)多贅述。在Expand 部分使用Concat 操作并聯(lián)3×3 卷積和同樣的1×1 卷積。SqueezeNet 通過(guò)Squeeze 層進(jìn)行降維,在Expand 層中將單一卷積結(jié)構(gòu)拆分為并行分支計(jì)算,降低了模型的計(jì)算量,且在占據(jù)模型的運(yùn)算總量一定限額的卷積運(yùn)算中,1×1 卷積在卷積運(yùn)算中占比頗大。因?yàn)?×3 卷積的參數(shù)量是1×1 卷積的9 倍,可降低模型運(yùn)算量。最終SqueezeNet 的模型參數(shù)量?jī)H占等性能AlexNet的2.14%。
圖5 Fire模塊Fig.5 Fire module
藍(lán)圖卷積的解耦依據(jù)卷積內(nèi)核的內(nèi)部相關(guān)性,通過(guò)定量分析得出深度方面相關(guān)性更加優(yōu)秀的信息,從而決定解耦后分段卷積的執(zhí)行順序。SqueezeNet的卷積解耦設(shè)計(jì)則是借鑒了MobileNets 的深度可分離卷積和Inception 的多尺度思想。借鑒深度可分離卷積,使得卷積操作在空間與通道上進(jìn)行分離,導(dǎo)致Fire 模塊拆解為Squeeze 和Expand 兩部分。借鑒由大小不同卷積構(gòu)成的Inception 初始模塊的思想,在Expand 部分選取模型設(shè)計(jì)常用的1×1 卷積和3×3 卷積進(jìn)行組合。
與標(biāo)準(zhǔn)三維卷積的區(qū)別在于,藍(lán)圖卷積將卷積拆解為由二維卷積與權(quán)重向量構(gòu)成的組合卷積結(jié)構(gòu),使用分段計(jì)算后合并的方式,改善了卷積單純的乘積運(yùn)算,達(dá)到了輕量化的目的。SqueezeNet則是提出了可通過(guò)超參數(shù)微調(diào),人為決定模型中每層卷積核的使用情況,通過(guò)大量使用計(jì)算量較少的1×1 卷積,從而達(dá)到輕量化的目的。解耦后的卷積結(jié)構(gòu)通常較為復(fù)雜,網(wǎng)絡(luò)模型越深,解耦后輕量化效果越明顯。
第二種改變卷積核數(shù)量是通過(guò)卷積因式分解進(jìn)行的,因式分解通過(guò)將普通正方形二維卷積拆解為非對(duì)稱卷積(asymmetric convolution),在數(shù)學(xué)角度上可看作是為使模型加速而采取的逼近操作。該操作出現(xiàn)于InceptionV3 中。InceptionV3 嘗試在空間結(jié)構(gòu)上將7×7 卷積進(jìn)行因式分解,拆解為1×7 和7×1 的連續(xù)卷積操作。
SqueezeNext使用Fire 的改進(jìn)模塊,它將Fire 模塊的3×3 卷積替換為3×1+1×3 卷積,這樣可以去掉冗余實(shí)現(xiàn)低秩濾波器,降低權(quán)值參數(shù)。SqueezeNext可達(dá)到在ImageNet 數(shù)據(jù)集上與AlexNet 相同精度,但參數(shù)量約為其0.9%的效果。而EffNet中則是對(duì)MobileNets 的深度層面分離的3×3 深度卷積進(jìn)一步改進(jìn)得到基礎(chǔ)模塊,如圖6 所示。為降低模型參數(shù)量,使用在空間上分解為1×3 和3×1 的一維卷積核組合替換原有的3×3 卷積操作,參數(shù)由3×3=9 降低到1×3+3×1=6。
圖6 EffNet基本模塊Fig.6 EffNet basic module
改變卷積核數(shù)量的本質(zhì)其實(shí)是通過(guò)數(shù)學(xué)方式修改運(yùn)算層級(jí)。將卷積進(jìn)行分步運(yùn)算和因式分解雖會(huì)導(dǎo)致卷積核總數(shù)變化,但在數(shù)學(xué)層面上,解耦操作將加法引入原本僅有乘法存在的運(yùn)算中,運(yùn)算層級(jí)降級(jí),造成了模型計(jì)算量降低的結(jié)果;因式分解使得參數(shù)量由原有的指數(shù)級(jí)降低為二倍關(guān)系,運(yùn)算層級(jí)降級(jí),實(shí)現(xiàn)了網(wǎng)絡(luò)模型輕量化。但因式分解從計(jì)算量角度而言,由于乘法操作數(shù)目沒變,網(wǎng)絡(luò)的計(jì)算量基本未發(fā)生改變。而且改變卷積核數(shù)量由于使用卷積尺寸不一,在模型運(yùn)行過(guò)程中需進(jìn)行部分如填充等微調(diào)操作,以此來(lái)保證輸出尺寸相同。
改變卷積核數(shù)量與網(wǎng)絡(luò)寬度是在前兩節(jié)的基礎(chǔ)上,通過(guò)調(diào)整分解后的卷積結(jié)構(gòu),在維持輕量化效果的同時(shí),一定程度上對(duì)模型性能進(jìn)行提升。常規(guī)卷積在空間及通道方向進(jìn)行解耦操作后,通常會(huì)使得模型中卷積數(shù)量增多。盡管卷積分段求和操作可降低模型計(jì)算量,但若串聯(lián)卷積的數(shù)量過(guò)多,仍會(huì)將輕量化的優(yōu)勢(shì)消除。因此需要同時(shí)對(duì)卷積結(jié)構(gòu)寬度進(jìn)行調(diào)整,通過(guò)對(duì)卷積進(jìn)行功能性劃分,形成各個(gè)卷積組,且將各分組卷積并聯(lián)執(zhí)行,用以彌補(bǔ)卷積數(shù)量帶來(lái)的問(wèn)題。
LEDNet提出的分割-混洗-非瓶頸模塊(splitshuffle-non-bottleneck,SS-nbt)除進(jìn)行并聯(lián)操作外,還在通道拆分和混洗兩個(gè)運(yùn)算間引入了跳躍連接,結(jié)構(gòu)如圖7(d)所示。在起始位置的SS-nbt 通過(guò)通道分割操作,將輸入拆分為兩個(gè)較低維分支,每個(gè)分支為一個(gè)完整的卷積功能分組,且每個(gè)分組僅占據(jù)一半的輸入通道。分組中由一組專用的一維濾波器(例如1×3、3×1)代替逐點(diǎn)卷積進(jìn)行轉(zhuǎn)換構(gòu)成,采用2.1 節(jié)和2.2 節(jié)中的輕量化方法,構(gòu)建出滿足提取需求功能的輕量化卷積分組。級(jí)聯(lián)可保證通道個(gè)數(shù)不變,因此調(diào)整網(wǎng)絡(luò)寬度是使用級(jí)聯(lián)對(duì)兩個(gè)分支的卷積輸出進(jìn)行合并。結(jié)構(gòu)中跳躍連接的引入可重用子層參數(shù),將淺層特征復(fù)制與通過(guò)卷積后的輸出進(jìn)行疊加,用來(lái)提升特征能力。通道混洗是用來(lái)實(shí)現(xiàn)兩個(gè)拆分分支之間的信息通信。
圖7 LEDNet網(wǎng)絡(luò)的基礎(chǔ)單元SS-nbtFig.7 Basic unit of LEDNet network:SS-nbt
通過(guò)采用并行分組結(jié)構(gòu)的方式,降低了網(wǎng)絡(luò)深度,在有限程度上對(duì)網(wǎng)絡(luò)結(jié)構(gòu)加寬,提升了網(wǎng)絡(luò)運(yùn)行效率,搭配提升模型準(zhǔn)確率的跳躍連接層。每個(gè)SS-nbt單元將合并的特征通道隨機(jī)混洗后加入下一個(gè)單元,可以看作是一種功能重用,在某種程度上擴(kuò)大了網(wǎng)絡(luò)容量,卻未顯著增加復(fù)雜性。SS-nbt的設(shè)計(jì)中采用的拆分轉(zhuǎn)換合并策略受到了XNOR-Net和InceptionV3的影響,該結(jié)構(gòu)的設(shè)計(jì)方法可接近大型和密集層的表示能力,但計(jì)算復(fù)雜度卻低得多。最終LEDNet 在模型參數(shù)量不足1.0×10的情況下,運(yùn)行速度卻可達(dá)71 FPS。
卷積核進(jìn)行解耦拆分后,若采用直連構(gòu)成線性結(jié)構(gòu)會(huì)使得網(wǎng)絡(luò)深度加深,因此提出添加分支結(jié)構(gòu)進(jìn)行多卷積操作并行處理,通過(guò)采用輕量化的卷積運(yùn)算對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的寬度進(jìn)行修改,降低模型深度,并通過(guò)多分支卷積并行運(yùn)算,提升模型的運(yùn)行效率,進(jìn)而提升模型性能。但分支結(jié)構(gòu)的數(shù)量需要進(jìn)行人工控制,具體結(jié)構(gòu)的設(shè)定依賴所面對(duì)的具體應(yīng)用需求和所使用的硬件設(shè)備。
綜上所述,卷積結(jié)構(gòu)輕量化技術(shù)通過(guò)數(shù)學(xué)運(yùn)算對(duì)單一卷積進(jìn)行拆解,使用更利于運(yùn)算的卷積進(jìn)行模型計(jì)算量的削減,但該方法多次使用會(huì)導(dǎo)致模型中卷積使用數(shù)量驟增,使得卷積的總計(jì)算量占模型計(jì)算總量的比重增大,拉低計(jì)算量降低的優(yōu)勢(shì),甚至?xí)?dǎo)致模型中卷積的結(jié)構(gòu)復(fù)雜,不利于后期模型結(jié)構(gòu)調(diào)整。主要的卷積結(jié)構(gòu)輕量化技術(shù)的對(duì)比如表1所示。
表1 卷積結(jié)構(gòu)輕量化技術(shù)對(duì)比表Table 1 Comparison of convolution lightweight technology
卷積模塊是人工構(gòu)建的應(yīng)用編程接口(application programming interface,API),可在代碼中直接使用縮寫進(jìn)行調(diào)用,封裝包中通常包含有固定的卷積結(jié)構(gòu)模塊,可移植性高。在卷積模塊使用過(guò)程中,具體網(wǎng)絡(luò)架構(gòu)中的卷積模塊可根據(jù)需求人工進(jìn)行調(diào)整,增減模塊結(jié)構(gòu)中的卷積結(jié)構(gòu)以達(dá)成特定需求,并能防止功能模塊間出現(xiàn)功能重疊的情況,造成資源浪費(fèi)。輕量化卷積模塊常指經(jīng)由輕量化后的卷積操作組合構(gòu)成,由于其構(gòu)建使用輕量化后的卷積結(jié)構(gòu),輕量化模塊較普通模塊所占用計(jì)算量更小。輕量化模塊中常用模塊有殘差模塊、ResNeXt 模塊、SE 模塊以及注意力機(jī)制模塊。
在數(shù)理統(tǒng)計(jì)中,殘差通常用來(lái)表示實(shí)際觀察值與估計(jì)值(擬合值)之間的差。在一個(gè)堆積層結(jié)構(gòu)中,當(dāng)輸入為時(shí),記學(xué)習(xí)到的特征為()。與原始特征()相比,差值更容易直接學(xué)習(xí),因此殘差作為差值計(jì)算學(xué)習(xí)可表示為:
由上述公式可知,當(dāng)殘差()=0 時(shí),堆積層僅做了恒等映射,網(wǎng)絡(luò)性能應(yīng)保持不變。但事實(shí)上殘差并不為0,因此會(huì)導(dǎo)致堆積層在輸入特征基礎(chǔ)上不斷學(xué)習(xí)到新的特征,從而網(wǎng)絡(luò)也會(huì)擁有更好的性能。若網(wǎng)絡(luò)中最優(yōu)輸出為輸入,在沒有短路連接(shortcut connection)的網(wǎng)絡(luò)中,需要將其優(yōu)化成()=;而對(duì)于包含短路連接的殘差單元,可將其轉(zhuǎn)化為使得()=()-優(yōu)化為0 的需求。因此短路連接的存在可使得卷積的結(jié)構(gòu)優(yōu)化更為簡(jiǎn)單。使用殘差單元可極大保留梯度的空間結(jié)構(gòu),解決梯度破碎現(xiàn)象,提升優(yōu)化方法的有效性。圖8 為初始?xì)埐钅K的結(jié)構(gòu)圖。
圖8 初始?xì)埐钅KFig.8 Initial residual module
瓶頸模塊作為特殊的殘差結(jié)構(gòu),如圖9 所示,保持原有殘差結(jié)構(gòu)的同時(shí),將模塊構(gòu)建成了疊加的漏斗形狀。通過(guò)上下各一個(gè)1×1 卷積,調(diào)整網(wǎng)絡(luò)特征維度,將通道個(gè)數(shù)先減小后增大。該結(jié)構(gòu)本質(zhì)上仍是在結(jié)構(gòu)優(yōu)化的基礎(chǔ)上,通過(guò)使用1×1 卷積人為控制通道數(shù),降低模型參數(shù)量。
圖9 殘差結(jié)構(gòu)與瓶頸結(jié)構(gòu)Fig.9 Residual structure and bottleneck structure
SqueezeNext中的基本模塊是在瓶頸模塊的基礎(chǔ)上進(jìn)行的調(diào)整,如圖10 所示。將原始瓶頸結(jié)構(gòu)中的三維3×3 卷積因式分解為3×1 和1×3 這兩個(gè)二維卷積運(yùn)算之和,并在瓶頸結(jié)構(gòu)開始前再添加一組1×1 卷積,用來(lái)降低輸入通道數(shù)。
圖10 SqueezeNext的基礎(chǔ)模塊Fig.10 Basic module of SqueezeNext
卷積結(jié)構(gòu)中通過(guò)調(diào)整1×1 卷積個(gè)數(shù)的使用情況,可以靈活控制每層卷積操作時(shí)的通道數(shù)量,保證3×3卷積因式分解所得的兩個(gè)卷積運(yùn)算,始終處于低維通道運(yùn)算中,降低模型計(jì)算量。基礎(chǔ)模塊最后的1×1 卷積,用來(lái)將處理好的特征恢復(fù)成與輸入同樣的維度。
ShuffleNet V1的基本模塊同樣基于瓶頸結(jié)構(gòu),如圖11 所示,圖(a)、(b)、(c)結(jié)構(gòu)依次進(jìn)化。與原始瓶頸結(jié)構(gòu)不同,圖(a)將普通3×3 卷積使用更為輕量化的3×3 DW 卷積來(lái)替代,降低結(jié)構(gòu)的計(jì)算量。圖(b)在圖(a)的基礎(chǔ)上進(jìn)一步調(diào)整,使用1×1 的分組卷積替換原始的1×1 卷積,并在第一個(gè)1×1 分組卷積后增添通道混洗(channel shuffle)操作。圖(c)在圖(b)的基礎(chǔ)上,將3×3的平均池化加入跳躍連接層上,并在最后使用Concat操作取代了原有的疊加(Add)操作。
圖11 ShuffleNet單元模塊及殘差模塊Fig.11 ShuffleNet unit module and residual module
由第1 章中的解釋可知,3×3 的DW 卷積屬于二維卷積,相較于普通3×3 卷積使用更為輕量化。而在通道數(shù)過(guò)大的情況下,多次使用1×1 卷積,輕量化效果并不十分明顯,甚至當(dāng)通道數(shù)過(guò)大時(shí),使用1×1 卷積可能會(huì)造成計(jì)算量增加。因此,圖11(b)將1×1 的卷積進(jìn)行分組后,替換原始的1×1 卷積。分組后的卷積完美解決了通道數(shù)不可控的情況,使得1×1 卷積可以保持降低計(jì)算量的功效。在第一個(gè)1×1 分組卷積后增添channel shuffle 操作是為了克服分組后信息不流通的副作用。當(dāng)stride=2 時(shí),為了保持與卷積后結(jié)果相同的特征圖大小,跳躍連接層上需要添加3×3 的平均池化操作。最后使用Concat操作取代Add操作,是因?yàn)榭梢詫煞种С叽缦嗤挠?jì)算結(jié)果直接拼接,無(wú)需重復(fù)進(jìn)行Add 運(yùn)算,因此降低了模型的計(jì)算量。
DetNet的空間瓶頸(dilated bottleneck)模塊同樣是對(duì)瓶頸結(jié)構(gòu)的改進(jìn),如圖12 所示,圖(c)為原始瓶頸單元??臻g瓶頸結(jié)構(gòu)使用空洞卷積(dilated convolution)替換了原有的常規(guī)3×3 卷積,圖(a)與圖(b)的區(qū)別在于跳躍連接層中是否存在1×1 卷積。
圖12 DetNet的瓶頸模塊及殘差模塊Fig.12 DetNet bottleneck module and residual module
空間瓶頸模塊引入的空洞卷積,可以在不引入額外參數(shù)的情況下,任意擴(kuò)大感受野。由于空洞卷積是通過(guò)對(duì)卷積核進(jìn)行填充,特征圖分辨率不會(huì)如降采樣一樣丟失。卷積中的感受野范圍大小可通過(guò)調(diào)整超參數(shù)空洞率(dilation rate)進(jìn)行人為控制。跳躍連接層中是否包含1×1 卷積,取決于卷積模塊所處DetNet 骨干結(jié)構(gòu)的位置。由于DetNet 骨干搭建的特殊性,含有1×1 卷積是為了進(jìn)行通道加倍處理。經(jīng)過(guò)實(shí)驗(yàn)證明,1×1 卷積跨通道信息融合可以更好地進(jìn)行信息整合??臻g瓶頸模塊在優(yōu)化模塊上的輕量化作用并不明顯,但該模塊可大幅提升模型定位分割的能力,并同時(shí)獲得視覺任務(wù)中非常重要的多尺度信息。DetNet 比同等條件的ResNet-50 所擁有的參數(shù)量少了1.0×10,且精度提升了0.8%。
MobileNet V2提出的線性瓶頸(linear bottleneck)模塊,如圖13 所示,保留原有瓶頸結(jié)構(gòu),僅將標(biāo)準(zhǔn)瓶頸結(jié)構(gòu)中1×1 和3×3 的卷積,使用深度可分離卷積中的DW 和PW 進(jìn)行替換,降低計(jì)算量。linear bottleneck 模塊為防止MobileNet V1 中PW 的激活函數(shù)破壞低維空間特征,在PW 操作后MobileNet V2 使用線性激活函數(shù)對(duì)ReLU6 進(jìn)行了替換。
圖13 MobileNet V2 的Linear Bottleneck 模塊Fig.13 Linear Bottleneck module for MobileNet V2
MobileNet V2 模塊本質(zhì)上是對(duì)瓶頸結(jié)構(gòu)與深度可分離卷積進(jìn)行融合。模塊結(jié)構(gòu)中DW 與第二個(gè)PW 可構(gòu)成深度可分離卷積,其卷積功效與深度可分離卷積一致。而DW 卷積前添加對(duì)DW 卷積通道數(shù)具有升維作用的PW 卷積,則是將模塊搭建成了標(biāo)準(zhǔn)漏斗形狀的瓶頸結(jié)構(gòu)。升維作用的PW 卷積解決了由于上層通道數(shù)較少影響DW 的空間特征,且DW 卷積缺少改變通道數(shù)的能力而產(chǎn)生的問(wèn)題。如此構(gòu)建的linear bottleneck 模塊既有瓶頸結(jié)構(gòu)的優(yōu)化特征,還通過(guò)深度可分離卷積進(jìn)行了卷積拆解,使用更輕量化的二維卷積,進(jìn)一步降低了模型計(jì)算量。
GhostNet中按步長(zhǎng)(stride)將單元瓶頸(ghost bottleneck)模塊分為兩種,如圖14 所示。stride=1 的ghost bottleneck 模塊結(jié)構(gòu)仿照普通殘差,由兩塊Ghost 模塊構(gòu)成。第一塊充當(dāng)擴(kuò)展層,用來(lái)增加通道數(shù)量;第二塊降低通道數(shù),將通道數(shù)量恢復(fù)到與輸入通道一致,并與跳躍連接層相連。stride=2 的ghost bottleneck 模塊擁有標(biāo)準(zhǔn)瓶頸結(jié)構(gòu)的布局,保持stride=1 時(shí)的結(jié)構(gòu)特點(diǎn),通過(guò)借鑒MobileNet V2 的Linear Bottleneck 模塊的經(jīng)驗(yàn),在stride=1 結(jié)構(gòu)的中間加入中間塊,塊中使用更為輕量化的二維DW 卷積,降低計(jì)算量。吸取了MobileNet V2 的經(jīng)驗(yàn),模塊在設(shè)計(jì)過(guò)程中,除第二個(gè)Ghost 模塊后不使用ReLU 激活函數(shù)外,其他層在每層后均應(yīng)用批歸一化(batch normalization,BN)和ReLU 非線性激活函數(shù)。
圖14 GhostNet的Ghost BottleneckFig.14 Ghost Bottleneck of GhostNet
殘差模塊中瓶頸結(jié)構(gòu)使用更為廣泛,在殘差結(jié)構(gòu)的搭建過(guò)程中,通常使用更為輕量化的卷積對(duì)標(biāo)準(zhǔn)卷積進(jìn)行替換操作,以達(dá)到在優(yōu)化結(jié)構(gòu)的基礎(chǔ)上進(jìn)一步降低計(jì)算量。但瓶頸結(jié)構(gòu)的設(shè)定在一定程度上會(huì)使得模型整體結(jié)構(gòu)變得復(fù)雜,不利于結(jié)構(gòu)調(diào)整時(shí)的修改。
ResNeXt 模塊本質(zhì)上是分組卷積。AlexNet 當(dāng)初迫于實(shí)驗(yàn)壞境,嘗試將卷積操作進(jìn)行拆分,因此出現(xiàn)了分組卷積。分組卷積介于常規(guī)卷積與深度可分離卷積之間,未曾獨(dú)立賦予每個(gè)通道獨(dú)立的卷積核,也不曾對(duì)輸入圖片使用一個(gè)卷積核。分組卷積通過(guò)將卷積分組,對(duì)通道數(shù)進(jìn)行了切割,因此降低了模塊的參數(shù)量,達(dá)到了輕量化的效果。
ResNeXt模塊是在Inception 網(wǎng)絡(luò)基礎(chǔ)上融合了ResNet 的特點(diǎn),與人工設(shè)計(jì)卷積細(xì)節(jié)的Inception模塊不同,ResNeXt 模塊的各個(gè)分支均采用完全一致的卷積拓?fù)浣Y(jié)構(gòu)。分組卷積的結(jié)構(gòu)設(shè)計(jì)更符合GPU的硬件設(shè)計(jì)原則,因此運(yùn)行速度應(yīng)快于人工設(shè)計(jì)卷積細(xì)節(jié)的Inception 模塊。ResNeXt 在ImageNet 數(shù)據(jù)集上實(shí)現(xiàn)了高于ResNet的精度,但復(fù)雜度僅占ResNet的50%。
ShuffleNet V2結(jié)構(gòu)是基于ShuffleNet V1 的設(shè)計(jì)基礎(chǔ),V2 的模塊在基本模塊中添加了通道拆分模塊,效果等同于分組卷積,因此使用常規(guī)1×1 卷積代替1×1 分組卷積。ShuffleNet V2 的基礎(chǔ)模塊按stride分為兩種設(shè)計(jì)方案,如圖15(a)、(b)所示。圖(a)中模塊將輸入通道拆分為兩部分,一部分使用恒等映射進(jìn)行特征復(fù)用,另一部分則是通過(guò)首位進(jìn)行分組處理后的瓶頸結(jié)構(gòu)。圖(b)中模塊同樣將輸入通道分為兩部分,一部分使用瓶頸結(jié)構(gòu),一部分使用深度可分離卷積。stride=2 的(b)去除了(a)中的通道拆分操作,得到了輸出通道數(shù)量翻倍的效果。ShuffleNet V2以2.3 GFLOPs(floating point operations)的速度優(yōu)于ShuffleNet V1,并在FLOPs 降低40%的情況下效果優(yōu)于ResNet-50。
圖15 ShuffleNet V2 模塊Fig.15 ShuffleNet V2 module
GhostNet 中的Ghost 模塊將卷積生成的結(jié)果分為兩組,一組保留原始卷積的一部分不變,另一組進(jìn)行優(yōu)化輸出特征中彼此相似的冗余特征圖。Ghost模塊是由簡(jiǎn)單變換后得到的結(jié)果與保持不變信息的分組拼接得到的。將訓(xùn)練好的網(wǎng)絡(luò)中存在的大量冗余信息中相似的特征圖看作Ghost。通過(guò)對(duì)Ghost 特征圖進(jìn)行簡(jiǎn)單變換后可以替換部分用卷積生成的特征圖,縮減模型計(jì)算量。Ghost 模塊可以通過(guò)使用簡(jiǎn)單變換代替卷積操作生成CNN 特征中大量相似的冗余特征圖,實(shí)現(xiàn)了模型加速。GhostNet可在運(yùn)行時(shí)間縮減一半的情況下,達(dá)到與ResNet相同的識(shí)別精度。
ResNeXt 模塊中的分組卷積思想實(shí)際上是對(duì)參與卷積操作的通道數(shù)進(jìn)行調(diào)整。通過(guò)對(duì)卷積的通道數(shù)進(jìn)行分割,然后多分組并行執(zhí)行,使得模型運(yùn)算速度得到了明顯提升。且在參數(shù)量的計(jì)算上,通道數(shù)分組也大幅降低了卷積計(jì)算量。理論上,分組越多模型計(jì)算越快,但卷積的分組個(gè)數(shù)取決于當(dāng)前所使用的硬件資源配置,并且與所用的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)有關(guān),因?yàn)榉纸M過(guò)多會(huì)影響到模型結(jié)構(gòu)的寬度。
SENet提出的SE(squeeze-excitation)模塊由squeeze和excitation 兩個(gè)操作構(gòu)成。雖然同樣基于通道分組,但不同于分組卷積與深度可分離卷積是為了達(dá)成降低計(jì)算量的目的,SE 模塊對(duì)通道分組是希望模型可以自主學(xué)到不同通道間的依賴性,得到特征之間的關(guān)系,并且能通過(guò)對(duì)全局信息的把控,將通道信息進(jìn)行得分排序,強(qiáng)調(diào)信息特征并抑制干擾特征。為了將卷積運(yùn)算時(shí)的空間依賴性與通道依賴性分離,提高對(duì)信息特征的敏感度。SE 模塊在squeeze部分采用1×1 的全局平均池化操作,將輸入特征從三維壓縮至一維,所得的一維特征可獲得全局感受野,感受范圍得到了極致地放大,避免了淺層網(wǎng)絡(luò)中小的感受野無(wú)法感知上下文信息情況的出現(xiàn)。而excitation 部分為了獲取多通道間的依賴關(guān)系,通過(guò)兩個(gè)全連接層(FC)與非線性激活函數(shù)ReLU 構(gòu)成瓶頸結(jié)構(gòu),在升維的FC 層和sigmoid 激活函數(shù)的升維控制下,參數(shù)化門控機(jī)制。excitation 部分通過(guò)對(duì)每個(gè)通道的重要性進(jìn)行預(yù)測(cè),得到不同通道的重要性大小后再將激勵(lì)作用到之前特征圖的對(duì)應(yīng)通道上,使得通道擁有可以進(jìn)行初選擇的不同激勵(lì)效果。
SE模塊具有良好的可移植性,可以用最小的額外計(jì)算成本為深層架構(gòu)提供顯著的性能改進(jìn)。ILSVRC 2017 年,以SENet為骨干的網(wǎng)絡(luò)獲得了分類賽的第一名。MobileNet V3的瓶頸模塊中添加了SE 模塊,因?yàn)闀r(shí)間損耗問(wèn)題將SE 模塊放在DW 卷積后,最終MobileNet V3 精度得到了進(jìn)一步提升,卻未增加時(shí)間損耗。GCNet提出將SE 模塊中squeeze 部分的全局平均池化操作使用簡(jiǎn)化的非局部(non-local)模塊替代,使得模型輕量化且可以有效對(duì)全局上下文建模。在目標(biāo)檢測(cè)方面,GCNet 的平均精度(average precision,AP)較SENet提升1.7%,F(xiàn)LOPs僅增加0.07%。
經(jīng)由前文可知,SE 模塊在squeeze 部分使用1×1卷積降維,并在excitation 中構(gòu)成優(yōu)化的瓶頸結(jié)構(gòu),降低了卷積結(jié)構(gòu)的計(jì)算量。但瓶頸結(jié)構(gòu)中的FC 層較為耗時(shí),因此,在通道數(shù)較少時(shí)使用該模塊可獲得最佳效果。SE 模塊可依據(jù)上下文對(duì)通道進(jìn)行權(quán)值標(biāo)定,調(diào)整通道依賴,non-local模塊可通過(guò)使用聚集其他位置信息來(lái)加強(qiáng)此位置特征信息的功能。并且nonlocal 模塊在不同位置時(shí)全局上下文信息幾乎相同。SE 模塊與non-local 模塊功能具有輔助作用,且nonlocal模塊的出現(xiàn)解決了SE 模塊無(wú)法充分利用上下文的缺點(diǎn),適合聯(lián)合使用。
注意力機(jī)制模塊CBAM(convolutional block attention module)是輕量級(jí)通用模塊,可在通道維度和空間維度兩方面進(jìn)行特征聚焦,并對(duì)兩方面的獨(dú)立維度進(jìn)行集成?;诳臻g維度和通道維度可分為通道注意力模塊(channel attention module,CAM)和空間注意力模塊(spatial attention module,SAM)兩部分。
CAM 是對(duì)SE 模塊結(jié)構(gòu)的調(diào)整,在SE 模塊的基礎(chǔ)上,CAM 中添加了一個(gè)全局最大池化操作。CAM在空間維度上壓縮特征圖為一維矢量,并使用全局平均池化與全局最大池化對(duì)空間映射的特征信息進(jìn)行聚合,通過(guò)共享全連接層對(duì)結(jié)果進(jìn)行逐元素加和操作。雙重池化操作的結(jié)構(gòu)設(shè)定,可使得所提取的高層次特征內(nèi)容更豐富,提供更為精細(xì)的信息。SAM是將CAM 操作后的結(jié)果基于通道進(jìn)行Concat 操作,經(jīng)由卷積進(jìn)行單通道降維。SAM 同CAM 一樣均采用雙重池化操作。CBAM 與SE 模塊相似,模塊結(jié)構(gòu)中多采用1×1 卷積進(jìn)行操作,通過(guò)SAM 調(diào)整通道維度,完成對(duì)特征圖的信息提取。
ThunderNet使用輕量級(jí)骨干網(wǎng)絡(luò)與小分辨率圖像輸入,使得模型特征提取部分表現(xiàn)力有限,不能正確學(xué)習(xí)特征分布。為解決小主干和小特征圖的性能退化問(wèn)題,ThunderNet壓縮了區(qū)域生成網(wǎng)絡(luò)(region proposal network,RPN)和R-CNN子網(wǎng),提出了上下文增強(qiáng)模塊(context enhancement module,CEM)和空間注意力模塊(SAM)兩個(gè)模塊。CEM 的功能與特征金字塔網(wǎng)絡(luò)(feature pyramid networks,F(xiàn)PN)的多尺度思想類似,且CEM 僅采用骨干后三層數(shù)據(jù)進(jìn)行操作,因此CEM 具有FPN 的功能,且擁有比FPN 更為精簡(jiǎn)的效果。SAM 使用RPN 中的得分結(jié)果對(duì)CEM的特征圖進(jìn)行加權(quán),達(dá)到抑制背景區(qū)域特征的目的,與CEM 運(yùn)算幾乎不增加計(jì)算量相比,SAM 會(huì)增加5%的網(wǎng)絡(luò)計(jì)算量。CEM 和SAM 的使用最終可將模型精度提升1.7%。
坐標(biāo)注意力(coordinate attention,CA)模塊將通過(guò)二維全局池化操作生成一維特征向量的CAM調(diào)整為經(jīng)由兩個(gè)一維全局池化,并在垂直和水平方向上將CAM 進(jìn)行特征編碼,最終得到兩個(gè)含有特定方向信息的注意力圖。該注意力圖中分別包含輸入特征圖在該方向上的長(zhǎng)距離依賴,即注意力圖含有輸入特征圖的位置信息。CA 模塊所得注意力圖具有對(duì)特征圖的方向和位置信息敏感的特性,增強(qiáng)了模型定位和劃分待定區(qū)域的精準(zhǔn)度,且CA 模塊具有良好的可移植性,移植過(guò)程中幾乎沒有計(jì)算開銷。
注意力機(jī)制模塊是一種簡(jiǎn)單而有效的模塊,它達(dá)到了與基礎(chǔ)卷積同時(shí)進(jìn)行端到端訓(xùn)練的程度。在兩個(gè)獨(dú)立維度上,注意力機(jī)制模塊可以做到沿著不同維度分別進(jìn)行注意力圖推斷,并在特征圖提取基礎(chǔ)上進(jìn)行自適應(yīng)優(yōu)化。在注意力推斷過(guò)程中使用輕量化的1×1 卷積進(jìn)行操作,將特征提取過(guò)程中被忽略的位置信息標(biāo)記于卷積通道,并通過(guò)方向與特征信息在空間維度中加強(qiáng)模型的定位能力。注意力機(jī)制模塊在網(wǎng)絡(luò)中常位于前饋神經(jīng)網(wǎng)絡(luò)的常規(guī)卷積層后,可忽略該模塊開銷將其無(wú)縫集成至任意CNN 架構(gòu),可移植性好。但由于其結(jié)構(gòu)中包含F(xiàn)C 結(jié)構(gòu),應(yīng)避免在通道數(shù)較多的層中多次使用。
綜上所述,卷積模塊輕量化技術(shù)通過(guò)使用輕量化卷積搭建所需的功能模塊結(jié)構(gòu),在降低計(jì)算量的同時(shí)盡可能提升模型效率,但在卷積模塊的設(shè)計(jì)過(guò)程中為滿足具體應(yīng)用需求,可能會(huì)使用提升模型性能卻不利于降低計(jì)算量的設(shè)計(jì),甚至不同功能性模塊間的結(jié)構(gòu)設(shè)計(jì)會(huì)相互影響,從而影響模型性能提升。因此,功能性輕量化模塊具有一定提升模型性能與降低計(jì)算量作用,但需要在具體的網(wǎng)絡(luò)結(jié)構(gòu)中依據(jù)具體需求進(jìn)行人為調(diào)整。主要的模塊輕量化技術(shù)的對(duì)比如表2 所示。
表2 模塊輕量化技術(shù)對(duì)比Table 2 Comparison of lightweight technology of modules
近年來(lái)硬件設(shè)備的發(fā)展賦予了卷積運(yùn)算新的發(fā)展思路。乘法運(yùn)算的卷積操作十分消耗網(wǎng)絡(luò)資源與能量,因此模型雖可以正常運(yùn)轉(zhuǎn),但乘積類運(yùn)算參數(shù)量過(guò)多,使得模型可移植性較低。對(duì)乘法操作進(jìn)行替換是解決模型高計(jì)算量和功耗預(yù)算的有效方式。
DeepShift網(wǎng)絡(luò)通過(guò)執(zhí)行按位移位和按位取反的操作來(lái)替換原有前向傳播中的浮點(diǎn)乘法運(yùn)算,減少模型運(yùn)行過(guò)程中推理所需計(jì)算時(shí)間。按位移位操作可等價(jià)為將輸入數(shù)字的基礎(chǔ)二進(jìn)制與2 的冪次方進(jìn)行乘積運(yùn)算,但2 的冪次方無(wú)論冪次取值為何,結(jié)果恒大于0,因此按位移位可取代常規(guī)卷積中的絕對(duì)值乘法運(yùn)算。在網(wǎng)絡(luò)中,正值和負(fù)值的濾波器均有助于網(wǎng)絡(luò)的邊緣檢測(cè),因此DeepShift 加入了取反運(yùn)算,按位取反操作保證了網(wǎng)絡(luò)訓(xùn)練過(guò)程中負(fù)值的乘積運(yùn)算出現(xiàn)。在硬件電路設(shè)備中,移位和取反操作甚至比加法操作速度還快,因此使用按位移位和按位取反來(lái)替換乘積運(yùn)算,可使模型運(yùn)行速度更快。與二值化神經(jīng)網(wǎng)絡(luò)(binarized neural networks,BNN)這類僅可以在小型數(shù)據(jù)集上加快網(wǎng)絡(luò)運(yùn)算速度的方法不同,DeepShift 網(wǎng)絡(luò)在ImageNet 這類大型數(shù)據(jù)集上也可正常使用,且能維持90%的精度。
在常規(guī)卷積輕量化的方法中,雖注意到可以對(duì)卷積的乘法操作進(jìn)行替換,但似乎很少有人可以站在硬件資源加速的角度,使用底層算法徹底進(jìn)行卷積加速,這個(gè)想法既新穎又很大膽。DeepShift 的訓(xùn)練方式與常規(guī)卷積訓(xùn)練方式相同,但參數(shù)與梯度變化需要按照固定公式進(jìn)行調(diào)整。DeepShift 通過(guò)2 的冪次方進(jìn)行按位移位操作,但當(dāng)冪次方取值小于1時(shí),結(jié)果分布較為密集,而當(dāng)冪次方取值大于1 時(shí),結(jié)果分布卻越來(lái)越稀疏。這樣的分布差距可能會(huì)隨著取值范圍的變化而對(duì)DeepShift 的移位運(yùn)算造成越來(lái)越大的近似誤差。
現(xiàn)階段,對(duì)于卷積運(yùn)算的替代方式嚴(yán)重依賴于底層硬件設(shè)備的設(shè)計(jì),二進(jìn)制運(yùn)算過(guò)程中會(huì)使得冪次運(yùn)算在替換過(guò)程中出現(xiàn)不可避免的運(yùn)算方面的誤差,從而導(dǎo)致模型在實(shí)際應(yīng)用方面受限。但該替代卷積運(yùn)算的新潮思想,仍能作為未來(lái)研究的一個(gè)方向。
使用更廉價(jià)的操作代替原有乘法運(yùn)算已成為卷積輕量化方法的核心思想,在廉價(jià)操作替換完畢后,通過(guò)卷積間的關(guān)系以及各種輔助工具對(duì)功能性卷積進(jìn)行調(diào)整,便可得到較為滿意的輕量化功能性卷積結(jié)構(gòu)。
本文對(duì)近幾年輕量化模型進(jìn)行了歸類分析,所涉模型涵蓋多種類別,包含目標(biāo)檢測(cè)、目標(biāo)識(shí)別、語(yǔ)義分割、圖像分類等實(shí)際視覺應(yīng)用需求,卷積輕量化的主要途徑為:
(1)優(yōu)化單一卷積。普通卷積單一乘法的計(jì)算方式疊加起來(lái)所需算力驚人,不適用于算力有限的小型便攜式設(shè)備。通過(guò)不同研究方向,將常規(guī)卷積完整的一次乘法運(yùn)算進(jìn)行拆解,使用更為低級(jí)的加法運(yùn)算替換掉部分乘法運(yùn)算,以此達(dá)到輕量化的目的。
(2)優(yōu)化卷積間結(jié)構(gòu)。卷積間結(jié)構(gòu)指輕量化卷積模塊。卷積模塊的構(gòu)建需要按照具體應(yīng)用需求進(jìn)行設(shè)計(jì),設(shè)計(jì)方法有兩種:第一種是直接在現(xiàn)有的輕量化卷積模塊上按照需求進(jìn)行修改;第二種是首先設(shè)計(jì)出滿足要求的傳統(tǒng)卷積模塊結(jié)構(gòu),其次通過(guò)借用單一卷積得到的輕量化后的卷積,對(duì)傳統(tǒng)卷積模塊中的卷積進(jìn)行替換,然后使用現(xiàn)有輕量化功能結(jié)構(gòu)或使用激活函數(shù)之類的工具調(diào)整輕量化卷積在模塊間的結(jié)構(gòu)關(guān)系,最后達(dá)成輕量化卷積功能模塊的效果。
(3)優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)中的卷積。出于對(duì)硬件設(shè)備運(yùn)行速度的考量,使用底層運(yùn)算對(duì)卷積運(yùn)算進(jìn)行替代。通過(guò)底層運(yùn)算的聯(lián)合,取代卷積的高階乘法運(yùn)算,以達(dá)到輕量化的目的。
卷積作為深度學(xué)習(xí)的構(gòu)成基礎(chǔ),將卷積輕量化可最大限度地提高網(wǎng)絡(luò)計(jì)算效率,減少卷積間的冗余計(jì)算量,使模型在相同識(shí)別精度下,卷積在參數(shù)量或計(jì)算量上占比有所下降,使得模型便于在移動(dòng)式視覺終端上使用。模型輕量化的效果如表3 所示。通過(guò)表3 數(shù)據(jù)可知,搭配工具使用了輕量化的卷積或功能模塊,在降低參數(shù)量或者提升運(yùn)行速度的同時(shí),準(zhǔn)確率均得到了一定程度的提升。
表3 模型輕量化效果對(duì)比Table 3 Comparison of model lightweight effects
表3 (續(xù))
但當(dāng)前輕量化網(wǎng)絡(luò)模型的卷積輕量化操作還略顯稚嫩,均是圍繞使用廉價(jià)操作替換卷積運(yùn)算展開的。按照使用底層運(yùn)算提升硬件運(yùn)行速度的發(fā)展來(lái)看,或許可以從底層運(yùn)算入手,設(shè)計(jì)出一款基于底層運(yùn)算的卷積操作。
希望本文可以幫助讀者認(rèn)識(shí)卷積輕量化的方法,對(duì)設(shè)計(jì)輕量化卷積結(jié)構(gòu)提供啟發(fā),并能針對(duì)具體需求設(shè)計(jì)或組合出高效的輕量化模型。