董藝威 于 津
(汕頭大學(xué)工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系 廣東 汕頭 515063)
計(jì)算機(jī)視覺(jué)(Computer Vision)賦予計(jì)算機(jī)看見(jiàn)并理解世界的能力,包括圖像分類(lèi)、目標(biāo)定位、目標(biāo)識(shí)別、實(shí)例分割等任務(wù)。圖像分類(lèi)是計(jì)算機(jī)根據(jù)圖像內(nèi)容將其歸類(lèi),是上述其他任務(wù)的基礎(chǔ),有重要的研究意義。
自2012年Krizhevsky等憑借AlexNet[1]贏得ILSVRC12的圖像分類(lèi)冠軍以后,研究學(xué)者們開(kāi)始關(guān)注卷積神經(jīng)網(wǎng)絡(luò)在圖像分類(lèi)中的應(yīng)用。隨后,在AlexNet的基礎(chǔ)上,提出如ResNet[2]等很多表現(xiàn)優(yōu)異的卷積神經(jīng)網(wǎng)絡(luò),在ILSVRC圖像分類(lèi)中獲得優(yōu)異的成績(jī)。通過(guò)設(shè)計(jì)更深更復(fù)雜的結(jié)構(gòu)以獲得更高分類(lèi)精度(即深度學(xué)習(xí))。上述卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)量高達(dá)數(shù)兆,識(shí)別一張圖片需要上百億次浮點(diǎn)運(yùn)算次數(shù)。運(yùn)行這些結(jié)構(gòu)需要大量?jī)?nèi)存空間和計(jì)算資源,一般是工作站級(jí)別的設(shè)備。
現(xiàn)實(shí)中,人們希望將卷積神經(jīng)網(wǎng)絡(luò)部署到手機(jī)、無(wú)人機(jī)和無(wú)人駕駛汽車(chē)等移動(dòng)設(shè)備中,用于圖像分類(lèi)和目標(biāo)檢測(cè)等計(jì)算機(jī)視覺(jué)任務(wù)。移動(dòng)設(shè)備內(nèi)存少、計(jì)算能力小。研究學(xué)者提出設(shè)計(jì)適用于移動(dòng)設(shè)備的卷積神經(jīng)網(wǎng)絡(luò),即輕量化結(jié)構(gòu)。輕量化結(jié)構(gòu)是指結(jié)構(gòu)分類(lèi)精度滿(mǎn)足應(yīng)用需求,結(jié)構(gòu)參數(shù)量和計(jì)算量均未超出移動(dòng)設(shè)備的能力。輕量化結(jié)構(gòu)具有如下優(yōu)勢(shì):一般采用空中下載OTA技術(shù)將訓(xùn)練好的結(jié)構(gòu)部署(安裝或更新)到移動(dòng)設(shè)備,輕量化結(jié)構(gòu)加快了部署過(guò)程,節(jié)省移動(dòng)數(shù)據(jù)流量;移動(dòng)設(shè)備內(nèi)存少、計(jì)算量小,輕量化結(jié)構(gòu)符合移動(dòng)設(shè)備的硬件要求。
2016年,Iandola等[3]借鑒了Inception模塊的設(shè)計(jì)思想,提出Fire模塊,以此提出首個(gè)輕量化卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)SqueezeNet。不同于Inception模塊中對(duì)特征圖進(jìn)行獨(dú)立的多尺度學(xué)習(xí)的做法,F(xiàn)ire模塊先對(duì)特征圖進(jìn)行維度壓縮,然后對(duì)這些特征圖做多尺度學(xué)習(xí)后進(jìn)行拼接。此外,F(xiàn)ire模塊僅采用1×1卷積和3×3卷積,并未使用更大的卷積,有效減少結(jié)構(gòu)參數(shù)量。在維持AlexNet的分類(lèi)精度情況下,SqueezeNet的結(jié)構(gòu)參數(shù)量?jī)H為AlexNet的1/50。SqueezeNet存在以下兩點(diǎn)不足:AlexNet是2012年提出的結(jié)構(gòu),分類(lèi)精度低于近些年的結(jié)構(gòu),沒(méi)有可比性;雖然SqueezeNet結(jié)構(gòu)參數(shù)量較小,但與AlexNet相比其所占計(jì)算資源幾乎相同。
為了降低結(jié)構(gòu)計(jì)算量,2014年,Sifre等[4]首次提出深度可分卷積(Depthwise Separable Convolution),以此改進(jìn)AlexNet,在保持分類(lèi)精度的情況下,減少了結(jié)構(gòu)的訓(xùn)練時(shí)間和參數(shù)量。受Sifre啟發(fā),文獻(xiàn)[5]采用深度可分卷積替換InceptionV3中的常規(guī)卷積(Standard Convolution)。同時(shí)指出去掉3×3卷積和1×1卷積之間的ReLU能夠加速訓(xùn)練并提高分類(lèi)精度,以此提出Xception[6],在相同參數(shù)量的情況下,分類(lèi)精度上勝過(guò)InceptionV3。
受到Xception啟發(fā),2017年谷歌的Howard等借用深度可分卷積代替常規(guī)卷積,借鑒VGG[7]中逐層設(shè)計(jì)的思想,提出了MobileNet[8]。MobileNet的主要工作在于使用深度可分卷積替代常規(guī)卷積來(lái)降低卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)量和計(jì)算量,設(shè)計(jì)面向移動(dòng)設(shè)備的輕量化結(jié)構(gòu)。實(shí)驗(yàn)證明,與VGG相比,在很小的分類(lèi)精度損失情況下,MobileNet參數(shù)量是VGG的3%,計(jì)算量是VGG的4%。使用深度可分卷積的MobileNet在輕量化設(shè)計(jì)中起到了啟蒙作用。但MobileNet存在以下問(wèn)題:采用VGG的直筒結(jié)構(gòu)性?xún)r(jià)比較低,ResNet等結(jié)構(gòu)已證明通過(guò)殘差學(xué)習(xí)能提升結(jié)構(gòu)分類(lèi)精度。
深度可分卷積包含深向卷積(Depthwise Convolution)和點(diǎn)向卷積(Pointwise Convolution)。深向卷積是單通道學(xué)習(xí)特征,點(diǎn)向卷積使得各個(gè)通道間信息流通。其中1×1卷積占據(jù)了大部分的計(jì)算量。在MobileNet中1×1卷積在參數(shù)量占74.59%,在計(jì)算量上占94.86%。
為了減少1×1卷積所占計(jì)算量比例,2017年曠視科技的孫劍等在1×1卷積中引入分組卷積,提出1×1分組卷積(Pointwise Group Convolution),但分組卷積導(dǎo)致分組通道間信息不流通。他們提出在結(jié)構(gòu)中添加通道交叉操作使得分組通道間信息重新流通。文獻(xiàn)[9]在MobileNet的基礎(chǔ)上,添加了殘差學(xué)習(xí),提出ShuffleNet。ShuffleNet在分類(lèi)精度、結(jié)構(gòu)參數(shù)量和計(jì)算量上均優(yōu)于MobileNet。
2018年,谷歌的Sandler等[10]對(duì)MobileNet進(jìn)行改進(jìn),提出MobileNetV2。他們提出反轉(zhuǎn)殘差模塊(Inverted Residuals),其特點(diǎn)是先擴(kuò)張后卷積再壓縮。這樣做的目的是為深度可分卷積提供更多的通道,從而提高結(jié)構(gòu)的學(xué)習(xí)能力。他們還發(fā)現(xiàn)去掉通道壓縮層的非線性變換能夠提升分類(lèi)精度。實(shí)驗(yàn)證明,和MobileNet相比,MobileNetV2在分類(lèi)精度、結(jié)構(gòu)參數(shù)量和計(jì)算量上均有了改善。在ImageNet-1k數(shù)據(jù)集上,MobileNetV2分類(lèi)精度提升2%,參數(shù)量減少30%,計(jì)算量減少50%。
本文提出兩種設(shè)計(jì)策略:分組瓶頸和奇異瓶頸,并使用上述策略改進(jìn)SqueezeNet,提出輕量化結(jié)構(gòu)SlimNet。與SqueezeNet相比,SlimNet在Flowers5數(shù)據(jù)集上分類(lèi)精度提高17%,在Simpsons13數(shù)據(jù)集上分類(lèi)精度提高9%,在結(jié)構(gòu)參數(shù)量上降低34%,在計(jì)算量上降低75%。
SqueezeNet在分類(lèi)精度和結(jié)構(gòu)計(jì)算量上與AlexNet持平,其結(jié)構(gòu)參數(shù)量為1.24兆,而AlexNet結(jié)構(gòu)參數(shù)量為61.10兆。SqueezeNet計(jì)算量與AlexNet持平,不利于部署在移動(dòng)設(shè)備上。經(jīng)過(guò)推導(dǎo)Fire模塊的計(jì)算量,發(fā)現(xiàn)導(dǎo)致計(jì)算量過(guò)高的原因有:壓縮層輸入通道數(shù)量較大,用于降低通道數(shù)量的1×1卷積操作占計(jì)算比例高;擴(kuò)展層輸出通道數(shù)量較大,用于特征學(xué)習(xí)的1×1和3×3卷積操作計(jì)算較多。本文針對(duì)如何降低計(jì)算量而展開(kāi)研究。
為改進(jìn)結(jié)構(gòu)以減少結(jié)構(gòu)計(jì)算量,提出分組卷積,它能夠有效降低結(jié)構(gòu)的參數(shù)量和計(jì)算量。常規(guī)卷積對(duì)輸入整體進(jìn)行卷積操作,如圖1(a)所示。分組卷積中的分組是針對(duì)輸入通道而言,在圖1(b)中,輸入通道分為兩組。每組輸入獨(dú)立進(jìn)行卷積操作,分組得到的輸出拼接后作為整體輸出。
(a) (b)圖1 常規(guī)卷積和分組卷積
當(dāng)輸入為W1×H1×C1(W1代表Width,指輸入通道寬度;H1代表Height,指輸入通道高度;C1代表Channel,指輸入通道數(shù)量),卷積核大小為h×w,一共有C2個(gè),則輸出數(shù)據(jù)為H2×W2×C2。對(duì)于常規(guī)卷積和分組卷積,其參數(shù)量和計(jì)算量如表1所示,其中分組數(shù)量為g。
表1 常規(guī)卷積和分組卷積對(duì)比
從表1可見(jiàn),分組卷積有效減少了結(jié)構(gòu)的參數(shù)量和計(jì)算量,但存在分組通道間信息不流通的問(wèn)題。
為了解決分組卷積引起的分組通道信息不流通問(wèn)題,本文研究近年來(lái)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),發(fā)現(xiàn)ResNet中的瓶頸模塊或許能夠解決這個(gè)問(wèn)題。瓶頸模塊如圖2所示。瓶頸模塊先使用1×1卷積縮減輸入通道數(shù)量(通道數(shù)量由256變?yōu)?4),再對(duì)64個(gè)通道進(jìn)行3×3卷積以學(xué)習(xí)特征,最后使用1×1卷積恢復(fù)通道數(shù)量(通道數(shù)量由64變?yōu)?56)。在模塊中通道數(shù)量經(jīng)歷了先減少再不變最后增加的過(guò)程,類(lèi)似于瓶頸,所以叫瓶頸模塊。這樣做的目的是減少3×3卷積的輸入和輸出通道數(shù)量(均為64),以減少結(jié)構(gòu)的訓(xùn)練時(shí)間。圖2中右邊一條線連接輸入和輸出,為恒等映射,其目的是使用殘差學(xué)習(xí)。
圖2 瓶頸模塊
因瓶頸模塊中1×1卷積的輸入或輸出通道數(shù)量較大,3×3卷積的輸入和輸出通道數(shù)量較小,故本文提出1×1卷積使用分組卷積以減少結(jié)構(gòu)的參數(shù)量和計(jì)算量,3×3卷積使用常規(guī)卷積以使得分組通道間信息重新流通,并命名為分組瓶頸,如圖3所示。使用分組瓶頸可解決分組通道間信息不流通的問(wèn)題,而不需要額外操作(ShuffleNet使用通道交叉操作來(lái)解決分組通道間信息不流通的問(wèn)題)。
圖3 本文提出的分組瓶頸
2017年Sandler等在MobileNetV2中提出線性瓶頸的設(shè)計(jì)策略。線性瓶頸指,刪除用于通道縮減的1×1卷積后的非線性變換能夠提高分類(lèi)精度,如圖4所示。在線性瓶頸中,下面的1×1卷積沒(méi)有非線性變換(即ReLU)。由此本文提出舍去用于通道擴(kuò)增的1×1卷積后的非線性變換,提升了分類(lèi)精度,并通過(guò)實(shí)驗(yàn)驗(yàn)證上述想法的可行性。由于改進(jìn)后的模塊僅一次非線性變換,故叫奇異瓶頸。在圖5中,舍去上面的1×1卷積的非線性操作。
圖4 線性瓶頸 圖5 本文提出的奇異瓶頸
本文使用上述策略改進(jìn)SqueezeNet,并引入批歸一化BN(Batch Normalization)[11],改進(jìn)SqueezeNet的Fire模塊。改進(jìn)SqueezeNet的整體結(jié)構(gòu)后級(jí)聯(lián)Slim模塊,增加池化層和Slim模塊的數(shù)量,添加Softmax,提出SlimNet。
Fire模塊沒(méi)有采用瓶頸設(shè)計(jì),為了使用分組瓶頸進(jìn)行改進(jìn),先將Fire模塊改進(jìn)成瓶頸模塊,再引入分組瓶頸。具體講,減小Fire模塊中3×3卷積的輸出通道數(shù)量,使其有輸入輸出通道數(shù)量相同,后接1×1卷積用于擴(kuò)增通道數(shù)量,形成瓶頸模塊。使用分組瓶頸,對(duì)模塊中的1×1卷積采用分組卷積。使用奇異瓶頸,舍去1×1卷積的非線性變換。此外,發(fā)現(xiàn)Fire模塊中沒(méi)有批歸一化。批歸一化能夠加速訓(xùn)練過(guò)程,提高分類(lèi)精度。添加批歸一化后,本文提出Slim模塊,如圖6所示。Slim模塊由壓縮層、卷積層和擴(kuò)展層組成,設(shè)有四個(gè)超參數(shù),分別是壓縮層和擴(kuò)展層的分組組數(shù)g、壓縮層卷積核數(shù)s、卷積層卷積核數(shù)c和擴(kuò)展層卷積核數(shù)e,其中s=c,s 圖6 Slim模塊 將Slim模塊級(jí)聯(lián)形成卷積階段以進(jìn)行圖像特征學(xué)習(xí),后接分類(lèi)器用于圖像分類(lèi)。由于Slim模塊和Fire模塊輸入和輸出通道的寬、高、數(shù)量都相同,本文按照SqueezeNet整體結(jié)構(gòu)的方式級(jí)聯(lián)Slim模塊,并在結(jié)構(gòu)中額外增加一個(gè)池化層和兩個(gè)Slim模塊。SqueezeNet最后一層卷積層采用1×1卷積用以改變輸出分類(lèi)數(shù)量,將通道數(shù)量從512擴(kuò)增至1 000。該操作占用大量的計(jì)算,于是去掉該卷積層,增加全連接層用于改變輸出分類(lèi)數(shù)量。此外,在結(jié)構(gòu)最后添加Softmax函數(shù)。Softmax函數(shù)用于多分類(lèi)過(guò)程,將結(jié)構(gòu)的輸出值映射到0~1的范圍內(nèi),且輸出之和為1,可以看作是概率。SlimNet的整體結(jié)構(gòu)如表2所示。 表2 Slim整體結(jié)構(gòu) 考慮到結(jié)構(gòu)針對(duì)不同數(shù)據(jù)集的普遍適用能力,本文采用兩個(gè)不同的數(shù)據(jù)集:Flowers5[12]和Simpsons13[13],如表3所示。 表3 數(shù)據(jù)集概況 實(shí)驗(yàn)環(huán)境如下:操作系統(tǒng)為Ubuntu 17.10,顯卡驅(qū)動(dòng)為NVIDIA 384.81,CUDA 9.0,PyTorch 0.3.0。使用Torchsummary記錄結(jié)構(gòu)的參數(shù)量。使用R語(yǔ)言環(huán)境下的Tidyverse庫(kù)繪制實(shí)驗(yàn)折線圖。 超參數(shù)設(shè)置如下:輸入圖像分辨率為224×224,批大小為16個(gè),損失函數(shù)為交叉熵,優(yōu)化方法為隨機(jī)梯度下降,學(xué)習(xí)速率為0.001,動(dòng)量為0.9,步長(zhǎng)為8,Gamma值為0.1,趟數(shù)為50。 使用測(cè)試集分類(lèi)精度、結(jié)構(gòu)參數(shù)量和結(jié)構(gòu)計(jì)算量作為評(píng)估指標(biāo)。分類(lèi)精度選取結(jié)構(gòu)在訓(xùn)練過(guò)程中最高的測(cè)試集分類(lèi)精度,以度量結(jié)構(gòu)的能力上限。本文使用Torchsummary來(lái)記錄結(jié)構(gòu)的參數(shù)量。結(jié)構(gòu)計(jì)算量指結(jié)構(gòu)推斷一張圖片所需浮點(diǎn)數(shù)運(yùn)算次數(shù)GFLOPI(Giga Floating-Point Operations Per Image)。通過(guò)計(jì)算得到結(jié)構(gòu)計(jì)算量,精簡(jiǎn)已有公式[14]后得到如下公式: Complexity=2×C1×C2×w×h×W2×H2 (1) 式中:Complexity指結(jié)構(gòu)計(jì)算量;C1指輸入通道數(shù)量,C2指輸出通道數(shù)量;w和h指卷積核的寬和高;W2和H2指輸出通道的寬和高。 實(shí)驗(yàn)首先使用分組瓶頸和奇異瓶頸修改已有結(jié)構(gòu),通過(guò)評(píng)估指標(biāo)分析策略的有效性。然后對(duì)比不同分組數(shù)量下SlimNet的評(píng)估指標(biāo),以分析分組數(shù)量對(duì)SlimNet的影響。最后將SlimNet同其他結(jié)構(gòu)進(jìn)行比較,突出SlimNet的實(shí)用價(jià)值。 選取采用瓶頸結(jié)構(gòu)的ResNet和SlimNet進(jìn)行驗(yàn)證。其中ResNet層數(shù)為50層,分組數(shù)量均取4。實(shí)驗(yàn)分別在有無(wú)分組瓶頸兩種情況下,將各個(gè)結(jié)構(gòu)在兩個(gè)真實(shí)數(shù)據(jù)集上進(jìn)行訓(xùn)練,得到最高測(cè)試集分類(lèi)精度,如表4所示。分組瓶頸對(duì)分類(lèi)精度影響不大。在ResNet中引入分組瓶頸,分類(lèi)精度沒(méi)有明顯變化,說(shuō)明分組瓶頸有效解決了分組卷積引起的分組通道間信息不流通的問(wèn)題。SlimNet中引入分組瓶頸后,發(fā)現(xiàn)在Simpsons13數(shù)據(jù)集上分類(lèi)精度有所降低。由此可見(jiàn),不同于ResNet中“1”字型結(jié)構(gòu), SlimNet中“人”字型結(jié)構(gòu)抑制了分組瓶頸的作用。 表4 分組瓶頸對(duì)分類(lèi)精度的影響 同時(shí),實(shí)驗(yàn)記錄結(jié)構(gòu)參數(shù)量,并計(jì)算結(jié)構(gòu)計(jì)算量,如表5所示。分組瓶頸有效降低結(jié)構(gòu)參數(shù)量和計(jì)算量。在ResNet中,分組卷積降低了27%的參數(shù)量和34%的計(jì)算量。在SlimNet中,分組卷積降低了25%的參數(shù)量和40%的計(jì)算量。 表5 分組瓶頸對(duì)結(jié)構(gòu)參數(shù)量和計(jì)算量的影響 在對(duì)分類(lèi)精度影響不大的情況下,分組瓶頸大幅度降低結(jié)構(gòu)的參數(shù)量和計(jì)算量,是一種有效的輕量化設(shè)計(jì)策略。 選擇ResNet、ShuffleNet、MobileNetV2和SlimNet,通過(guò)實(shí)驗(yàn)比較奇異瓶頸對(duì)分類(lèi)精度的影響。其中ResNet層數(shù)為50層。實(shí)驗(yàn)分別在有無(wú)奇異瓶頸兩種情況下,將各個(gè)結(jié)構(gòu)在兩個(gè)真實(shí)數(shù)據(jù)集上進(jìn)行訓(xùn)練,得到最高測(cè)試集分類(lèi)精度,如表6所示。 表6 奇異瓶頸對(duì)分類(lèi)精度的影響 從表6可見(jiàn),奇異瓶頸在各個(gè)結(jié)構(gòu)上均能提升分類(lèi)精度。在Flowers5數(shù)據(jù)集上,奇異瓶頸使得分類(lèi)精度提高4.8%。在Simpsons13數(shù)據(jù)集上,奇異瓶頸使得分類(lèi)精度提高1.2%。奇異瓶頸對(duì)分類(lèi)精度的提高幅度與其自值有關(guān),即分類(lèi)精度越高,提高幅度越小。值得注意的是,對(duì)于ShuffleNet,在Simpsons13數(shù)據(jù)集上,無(wú)奇異瓶頸的情況下有著更高的分類(lèi)精度,這可能和ShuffleNet自身結(jié)構(gòu)有關(guān)。 分組數(shù)量分別選擇1、2、4、8和16。其中,分組數(shù)量為1相當(dāng)于常規(guī)卷積。分組數(shù)量均選擇2的指數(shù)是為了能夠整除通道數(shù)量。最大選擇16是因?yàn)镾limNet中最小的通道數(shù)量為16。實(shí)驗(yàn)結(jié)果如表7所示。 表7 分組數(shù)量對(duì)SlimNet的影響 續(xù)表7 從表7可見(jiàn),分組數(shù)量從1增加到16,在Flowers5數(shù)據(jù)集上分類(lèi)精度降低2%,在Simpsons13數(shù)據(jù)集上分類(lèi)精度降低3%,訓(xùn)練時(shí)間也相應(yīng)增加3分鐘和8分鐘,參數(shù)量減少32%,計(jì)算量降低50%。由此可見(jiàn),損失少量的分類(lèi)精度,可以得到參數(shù)量和計(jì)算量的大幅度降低。在分組數(shù)量從4增加到8時(shí),SlimNet在Simpsons13數(shù)據(jù)集上的分類(lèi)精度降低1.1%,而結(jié)構(gòu)參數(shù)量降低5%,結(jié)構(gòu)計(jì)算量降低11%。由此可見(jiàn),當(dāng)分組數(shù)量從4增加16的過(guò)程中,參數(shù)量和計(jì)算量的減少幅度逐漸降低。為了保持較高分類(lèi)精度,本文建議分組數(shù)量為4較佳。 值得注意的是,在Flowers5數(shù)據(jù)集上,分組數(shù)量為4的分類(lèi)精度高于分組數(shù)量為1和2的,這是因?yàn)镕lowers5數(shù)據(jù)集自身存在問(wèn)題,SlimNet在Flowers5數(shù)據(jù)集上的訓(xùn)練過(guò)程不穩(wěn)定,有較大的起伏(具體原因在下節(jié)分析)。但從實(shí)驗(yàn)角度考慮,F(xiàn)lowers5數(shù)據(jù)集能一定程度上反映結(jié)構(gòu)特性,且訓(xùn)練時(shí)間較短,便于結(jié)構(gòu)多次改進(jìn)和實(shí)驗(yàn)的重復(fù)迭代,所以本文依舊選擇了Flowers5數(shù)據(jù)集。 選擇了AlexNet、ResNet、SqueezeNet、ShuffleNet、MobileNetV2作為對(duì)比結(jié)構(gòu)。ResNet選用18層是因?yàn)樵趯?shí)驗(yàn)數(shù)據(jù)集上分類(lèi)精度較高,具有可比性。SlimNet分組數(shù)量為4。 首先,在Flowers5數(shù)據(jù)集上進(jìn)行比較,各個(gè)結(jié)構(gòu)的訓(xùn)練過(guò)程如圖7所示。結(jié)構(gòu)均在20趟(Epoch)后趨于收斂。其中AlexNet和SqueezeNet在30趟后幾乎無(wú)波動(dòng),而其余結(jié)構(gòu)一直保持上下波動(dòng),這是由于其余結(jié)構(gòu)中添加了批歸一化層導(dǎo)致每趟訓(xùn)練改變每層的輸入使得分類(lèi)精度無(wú)法穩(wěn)定在一個(gè)值。在ImageNet-1K數(shù)據(jù)集上AlexNet和SqueezeNet分類(lèi)精度相同,在Flowers5數(shù)據(jù)集上分類(lèi)精度不同,說(shuō)明Flowers5數(shù)據(jù)集自身存在問(wèn)題影響到了兩個(gè)結(jié)構(gòu)的分類(lèi)精度。SlimNet取得最高的分類(lèi)精度可能是受到Flowers5數(shù)據(jù)集影響,不能真實(shí)反映SlimNet在其他數(shù)據(jù)集上的分類(lèi)精度。從整體上看,相較于其他結(jié)構(gòu),SlimNet在Flowers5數(shù)據(jù)集上分類(lèi)精度最高。 圖7 各結(jié)構(gòu)在Flowers5數(shù)據(jù)集上的訓(xùn)練過(guò)程 同時(shí),在Simpsons13數(shù)據(jù)集上進(jìn)行比較,各個(gè)結(jié)構(gòu)的訓(xùn)練過(guò)程如圖8所示。使用批歸一化的ResNet、ShuffleNet、MobileNetV2和SlimNet在20趟后趨于收斂。未使用批歸一化的AlexNet和SqueezeNet在30趟后趨于收斂。批歸一化能夠加速結(jié)構(gòu)訓(xùn)練過(guò)程,因此本文在改進(jìn)過(guò)程中引入批歸一化,分類(lèi)精度由低到高依次是AlexNet、SqueezeNet、SlimNet、ResNet、ShuffleNet和MobileNetV2??梢?jiàn)SlimNet比SqueezeNet有更高的分類(lèi)精度。此時(shí),AlexNet和SqueezeNet分類(lèi)精度幾乎相同,說(shuō)明Simpsons13數(shù)據(jù)集和ImageNet-1K數(shù)據(jù)集特性接近,則Simpson13能夠真實(shí)反映SlimNet的分類(lèi)精度。從整體上看,相較于其他結(jié)構(gòu),SlimNet在Simpsons13數(shù)據(jù)集上能收斂到較好的分類(lèi)精度。 圖8 各結(jié)構(gòu)在Simpsons13數(shù)據(jù)集上的訓(xùn)練過(guò)程 兩個(gè)數(shù)據(jù)集中,發(fā)現(xiàn)各結(jié)構(gòu)在第8趟前后均出現(xiàn)不同程度的分類(lèi)精度突然下降的現(xiàn)象。在第1趟時(shí),ShuffleNet和SlimNet均有較高的分類(lèi)精度,ResNet次之,MobileNetV2、AlexNet和SqueezeNet最低。需要指出,MobileNetV2在兩個(gè)數(shù)據(jù)集上的表現(xiàn)差異較大,因?yàn)槠鋵?duì)數(shù)據(jù)集的質(zhì)量有著較高的要求,不利于在現(xiàn)實(shí)任務(wù)中應(yīng)用。 比較各個(gè)結(jié)構(gòu)的參數(shù)量和計(jì)算量,如表8所示。AlexNet有最大的參數(shù)量,計(jì)算量卻居中。AlexNet中三個(gè)全連接層的參數(shù)占據(jù)大部分參數(shù)空間,全連接層導(dǎo)致結(jié)構(gòu)參數(shù)多。但其結(jié)構(gòu)層數(shù)(8層)較少,卷積部分參數(shù)少,故計(jì)算量不大。ResNet有著適中的參數(shù)量,計(jì)算量卻特別大,這是由于ResNet使用全局平均池化層(全局平均池化層在Network In Network中最早提出)取代全連接層,大大減少結(jié)構(gòu)參數(shù)量,但ResNet使用了過(guò)多的層數(shù)(18層)進(jìn)行3×3卷積,使得計(jì)算量過(guò)大。SqueezeNet使用較少3×3卷積使得參數(shù)量很小,但有18層,其中包含大量的1×1卷積使得計(jì)算量過(guò)大。ShuffleNet使用分組卷積和深度可分卷積,結(jié)構(gòu)參數(shù)量和計(jì)算量均較小。MobileNetV2一方面使用深度可分卷積以減少參數(shù)量和計(jì)算量,另一方面為了增加分類(lèi)精度,使用反轉(zhuǎn)殘差在模塊內(nèi)增加通道數(shù)量導(dǎo)致參數(shù)量和計(jì)算量的增加,故參數(shù)量和計(jì)算量居中。SlimNet使用分組瓶頸,使得結(jié)構(gòu)的參數(shù)量和計(jì)算量均為最小。 表8 各結(jié)構(gòu)的參數(shù)量和計(jì)算量比較 和SqueezeNet相比,SlimNet在Flowers5數(shù)據(jù)集的分類(lèi)精度提高17%,在Simpsons13數(shù)據(jù)集的分類(lèi)精度提高9%,參數(shù)量減少了34%,計(jì)算量上減少了75%。實(shí)驗(yàn)證明,本文提出的SlimNet具有一定的實(shí)用價(jià)值。 分組瓶頸和奇異瓶頸使得本文提出的策略改進(jìn)SqueezeNet的輕量化結(jié)構(gòu)SlimNet在分類(lèi)精度、結(jié)構(gòu)參數(shù)量和計(jì)算量上均優(yōu)于SqueezeNet。 但SlimNet在分類(lèi)精度上稍低于ShuffleNet和MobileNetV2。這是由于SlimNet和SqueezeNet采用了相近的整體結(jié)構(gòu),可改進(jìn)整體結(jié)構(gòu)以提高分類(lèi)精度。本文的實(shí)驗(yàn)數(shù)據(jù)集包含圖片類(lèi)別(分別是5和13)稍小,在ImageNet-1K數(shù)據(jù)集(種類(lèi)為1 000)上分類(lèi)精度未知因此可提高實(shí)驗(yàn)環(huán)境,以測(cè)量SlimNet在ImageNet-1K上的分類(lèi)精度。未來(lái)還可進(jìn)一步研究SlimNet在目標(biāo)檢測(cè)等計(jì)算機(jī)視覺(jué)其他領(lǐng)域中的可行性。2 實(shí)驗(yàn)分析
2.1 分組瓶頸的驗(yàn)證
2.2 奇異瓶頸的驗(yàn)證
2.3 分組數(shù)量的影響
2.4 結(jié)構(gòu)比較
3 結(jié) 語(yǔ)