倪偉健,秦會斌
(杭州電子科技大學(xué) 電子信息學(xué)院 新型電子器件與應(yīng)用研究所,浙江 杭州310018)
隨著深度學(xué)習(xí)理論的提出和硬件設(shè)備計算速度的不斷突破,卷積神經(jīng)網(wǎng)絡(luò)在近年來得以迅速發(fā)展。 2012年,AlexNet[1]在ImageNet 大規(guī)模視覺識別挑戰(zhàn)賽中獲得了圖像分類冠軍。之后,為了提高網(wǎng)絡(luò)模型的準確率,研究人員不斷地加深卷積網(wǎng)絡(luò)的深度,相繼提出了性能更加優(yōu)越的卷積神經(jīng)網(wǎng)絡(luò),如VGG16[2]、GoogLeNet[3]和DenseNet[4]等。
這些網(wǎng)絡(luò)準確率普遍較高,但是有著非常復(fù)雜的模型和很深的層次,參數(shù)量十分巨大。 在實際生活的應(yīng)用中,模型往往需要在資源有限的嵌入式設(shè)備和移動設(shè)備上運行。因此,研究人員開始著手研究,并且相繼提出了更高效的輕量級卷積神經(jīng)網(wǎng)絡(luò)。 它們保持了網(wǎng)絡(luò)的性能,大大減少了模型的參數(shù)量,從而減少計算量,提升了模型速度。
曠視科技的ShuffleNet 在ResNet[5]單元上進行了改進,有兩個創(chuàng)新的地方:逐點分組卷積和通道混洗[6]。WANG R J 等提出的PeleeNet 是一種輕量級網(wǎng)絡(luò),它在DenseNet 基礎(chǔ)上進行了改進和創(chuàng)新,主要有五個方面的結(jié)構(gòu)改進[7]。 ZHANG J N 等提出了一種卷積核及其壓縮算法,通過這種卷積方法,ZHANG J N 等發(fā)明了輕量卷積神經(jīng)網(wǎng)絡(luò)SDChannelNets[8]。
可以看出,上述輕量卷積神經(jīng)網(wǎng)絡(luò)均存在一定不足。 在使用分組卷積時,為了解決分組卷積導(dǎo)致的信息丟失問題, 需要增加額外的操作。 在運用1×1 卷積時,會導(dǎo)致1×1 卷積的參數(shù)量在網(wǎng)絡(luò)總參數(shù)量中占據(jù)大部分。 通過分析,這些網(wǎng)絡(luò)需要通過調(diào)整相應(yīng)的超參數(shù)來提高網(wǎng)絡(luò)識別精度。這些操作往往會大大增加網(wǎng)絡(luò)模型參數(shù)量。
為了解決這個不足,本文結(jié)合參數(shù)共享、密集連接的卷積方法和分組卷積,基于PeleeNet 網(wǎng)絡(luò),提出了輕量級卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)GSDCPeleeNet。 適當調(diào)節(jié)超參數(shù), 在損失較小準確度甚至擁有更高準確度的情況下,減小了模型的參數(shù)量。
標準卷積層掃描一個寬度和高度均為Df、通道數(shù)為m 的輸入特征圖的每個位置,輸出一個寬度和高度均為Dg、通道數(shù)為n 的輸出特征圖。 標準卷積層卷積核的參數(shù)在通道方向上是相互獨立的,所以標準的卷積層的卷積核的大小為DW·DH·m,一共有n 個,其中DW和DH(一般相等)是卷積核的寬度和高度。 因此,標準卷積層的參數(shù)量數(shù)量為:
其中,DW和DH分別是卷積核的寬度和高度,m 和n 分別是輸入和輸出特征圖的通道數(shù)。
從上述分析中,標準卷積層參數(shù)的大小取決于輸入特征通道數(shù)m 和輸出特征通道數(shù)n 的乘積m·n 的大小。 為了能夠減少卷積層的參數(shù),SD-channel-wise 卷積層提出運用了參數(shù)共享、密集連接思想,它可以有效避免m·n 的大小對卷積層參數(shù)的影響。
常規(guī)卷積層的卷積核數(shù)量為n 個,而SD-channel-wise卷積層的卷積核只有1 個。輸入特征圖每次只和這個卷積核的一小部分進行卷積運算,這一小部分上的參數(shù)是共享的,即權(quán)值相等。 標準卷積層中的數(shù)個卷積核在卷積運算中是相互獨立的。而該卷積核運用了密集連接的思想,在卷積過程中,有一部分的參數(shù)是重疊的,重疊的部分的參數(shù)的權(quán)值也是相同的。
為了更好地解釋這個卷積層,先從一個高度和寬度均為1、通道數(shù)為m 的輸入特征圖說明。 這個通道數(shù)量為m 的輸入特征圖會逐次和這個卷積核的第(1+x·s)~第(m+x·s)通道進行卷積運算,最終獲得一個輸出通道數(shù)為n 的1×1 輸出特征圖。 其中,x 是小于n 的自然數(shù),s是長卷積核通道方向上的步長。當輸入寬度和高度不為1 時,卷積層的卷積核會和輸入特征圖的各個空間位置進行卷積運算。 SD-channel-wise 卷積層參數(shù)量的數(shù)量為:
經(jīng)過這樣參數(shù)共享和密集連接的卷積操作,SDchannel-wise 卷積層的參數(shù)量不再取決于m×n 的大小。因此,該卷積層的參數(shù)相比于標準卷積層,得以大幅度的下降。 需要特別注意的一點是,當通道方向上的步長s 等于或者大于輸入特征圖的通道數(shù)m 時,該卷積層相當于標準的卷積層。
在SD-Channel-Wise 卷積的基礎(chǔ)上, 本文提出了分組SD-Channel-Wise 卷積, 命名為GSD-Channel-Wise。在這里將給定的輸入特征圖分成g 組,每組都獨立進行SD-Channel-Wise 卷積操作。 每個分組將會得到n/g 個輸出特征圖,通過將它們級聯(lián)來獲得整個卷積層的輸出特征圖。 由于該卷積層的參數(shù)共享且連接非常密集,經(jīng)過分組后提取到的特征會更多,分組卷積的優(yōu)勢得以進一步發(fā)揮。
在分組卷積的過程中,相同分組中不同通道可能含有一樣的信息,這樣就有可能會丟失部分信息,導(dǎo)致輸出特征圖得到的信息非常有限。ShuffleNet 為了解決這個問題,增加了額外的操作——通道混洗,很好地解決了這個問題,但是也相應(yīng)增加了網(wǎng)絡(luò)的復(fù)雜度。
本文著手研究其他卷積神經(jīng)網(wǎng)絡(luò),發(fā)現(xiàn)PeleeNet 的兩路密集層和轉(zhuǎn)換層能夠很好地解決這個問題,它們結(jié)構(gòu)如圖1 所示。 其中,k 為增長率,兩路密集層在Inception結(jié)構(gòu)基礎(chǔ)上進行改進,由兩路不同的網(wǎng)絡(luò)分支組成,用來獲取不同尺度感受野。第一路經(jīng)過一層標準的1×1 標準卷積縮減通道數(shù)量, 再經(jīng)過一層3×3 卷積層學(xué)習(xí)特征;另一路則是在用1×1 卷積減少通道數(shù)量后,經(jīng)過兩層3×3 層卷積層來學(xué)習(xí)不同的特征。 轉(zhuǎn)換層作為過渡,保持輸入輸出通道一致。
圖1 PeleeNet 中兩路密集層和轉(zhuǎn)換層
通過分析PeleeNet 網(wǎng)絡(luò)結(jié)構(gòu),發(fā)現(xiàn)兩路密集層和轉(zhuǎn)換層占據(jù)了網(wǎng)絡(luò)的主要部分,且1×1 卷積的輸入通道或者輸出通道數(shù)目比較大,3×3 卷積的輸入通道或者輸出通道數(shù)目比較小,導(dǎo)致1×1 卷積的參數(shù)量占據(jù)了PeleeNet網(wǎng)絡(luò)的參數(shù)量的60%以上。 本文分析提出,將上述兩層結(jié)構(gòu)的1×1 卷積替換成1×1GSD-Channel-Wise,3×3 卷積使用標準卷積。 經(jīng)過這樣的操作,不同分組間的信息可以重新流通。 同時因為運用了新的卷方法,新網(wǎng)絡(luò)的參數(shù)數(shù)量在PeleeNet 的基礎(chǔ)上大幅度減少。 改進后的兩路密集層和轉(zhuǎn)換層如圖2 所示。
圖2 GSDCPeleeNet 中改進的兩路密集層和轉(zhuǎn)換層
不同于常規(guī)的分組卷積,1×1GSD-Channel-Wise 卷積層中由于只有一個卷積核, 參數(shù)并沒有大幅度地減少。 分成g 組的1×1GSD-Channel-Wise 卷積層參數(shù)量大小為:
通過將標準1×1 卷積層替換成參數(shù)共享的1×1GSD-Channel-Wise 卷積層,將參數(shù)縮減為原來的:
1×1GSD-Channel-Wise 卷積層的具體計算如圖3 所示。 可以分析出,通過調(diào)整超參數(shù)卷積核通道方向上的步長s,模型的參數(shù)大小會相應(yīng)改變。 而參數(shù)量的改變在一定程度上會影響準確率改變。當選取較小的s和適當?shù)膅 時,1×1GSD-Channel-Wise 相比于標準的1×1 標準卷積層,參數(shù)量可以減少為原來的數(shù)十分之一。
圖3 1×1GSD-Channel-Wise 卷積層卷積計算圖示
本文遵循了PeleeNet 的基本架構(gòu),并對上述方法進行改進,將兩路密集層和轉(zhuǎn)換層1×1 標準卷積層替換成1×1GSD-Channel-Wise,提出了GSDCPeleeNet。 每一層輸出維度和PeleeNe 保持一致。GSDCPeleeNet 的結(jié)構(gòu)如表1所示。
ShuffleNet v2[9]中提出的高效網(wǎng)絡(luò)設(shè)計實用準則中指出,較大的分組卷積會提升內(nèi)存訪問成本,導(dǎo)致模型的速度反而降低。 綜合考慮精度和速度等因素的影響,將1×1GSD-Channel-Wise 卷積中設(shè)置分組數(shù)量為2。 在該卷積層中,選擇長卷積核通道方向上的步長s 作為超參數(shù),該超參數(shù)可以根據(jù)所需的精度和參數(shù)數(shù)量進行相應(yīng)的調(diào)整。 本文設(shè)計了GSDCPeleeNe-s1、GSDCPeleeNe-s32、GSDCPeleeNe-s64、GSDCPeleeNe-s192 4 種模型,其在通道方向上的步長分別為1、32、64 和192。它們的參數(shù)總數(shù)在1.11 M~1.808 M 之間,占PeleeNet(2.8 M)的39.6%~64.5%。
表1 GSDCPeleeNet 網(wǎng)絡(luò)結(jié)構(gòu)
網(wǎng)路模型的復(fù)雜度常用浮點運算數(shù)衡量,可以理解為計算量(FLoating-point OPerations,F(xiàn)LOPS)。對于卷積層來說,計算量公式為:
其中,m 是輸入特征圖通道數(shù),K 是卷積核大小,H、W是輸出特征圖大小,n 是輸出通道數(shù)通道數(shù)。 不考慮偏置bias 時有-1,考慮時沒有。 對于全連接層,計算量公式為:
其中,I 是輸入神經(jīng)元數(shù),O 是輸出神經(jīng)元數(shù)。 經(jīng)過計算,GSDCPeleeNet 的計算量為178.6 MFLOPs,為PeleeNet(508 MFLOPs)的35.1%。
實驗主要在數(shù)據(jù)集CIFAR-10 和Fashion-MNIST 進行。 CIFAR-10 數(shù)據(jù)集中的圖像均為彩色, 像素大小為32×32。它的訓(xùn)練集包含一共5 萬張不同的圖像,測試集包含一共1 萬張不同的圖像,共分為10 個不同的類別。Fashion-MNIST 數(shù)據(jù)集均是灰度圖像,像素大小為28×28。它的訓(xùn)練集一共包含6 萬張圖像,測試集包含1 萬張圖像,與CIFAR-10 一樣,被劃分成為10 個不同的類別。
每張圖片均進行一定的預(yù)處理。 在CIFAR-10 數(shù)據(jù)集,本文使用通道均值和標準差對它們進行歸一化處理;在Fashion-MNIST 上,每張圖像中的每個像素點均除以255 進行歸一化處理。 同時數(shù)據(jù)集里的每張圖片進行了數(shù)據(jù)增強,主要包括水平隨機翻轉(zhuǎn)和平移。
所有網(wǎng)絡(luò)的訓(xùn)練方式均是隨機梯度下降法[10],動量設(shè)置為0.9[11],權(quán)值衰減為5×10-4。訓(xùn)練批量大小設(shè)置成64,CIFAR-10 趟數(shù)設(shè)置成100,F(xiàn)ashion-MNIST 趟數(shù)設(shè)置成60;初始的學(xué)習(xí)率設(shè)置成0.1,在趟數(shù)25 和50 上分別除以10。 每一層后均增加批歸一化BN(Batch Normalization)[12]層。 因為只是在各個網(wǎng)絡(luò)上進行對比,每一層都沒有設(shè)置Dropout[13]層。 實驗訓(xùn)練所有數(shù)據(jù)集中的圖片,并且在訓(xùn)練結(jié)束后記錄測試集的準確率。
本文在CIFAR-10 和Fashion-MNIST 數(shù)據(jù)集上使用相同的分組數(shù)2 和不同的長卷積核通道方向上的步長s訓(xùn)練GSDCPeleeNet,再用同樣條件訓(xùn)練其他不同的卷積神經(jīng)網(wǎng)絡(luò)。 在訓(xùn)練結(jié)束后,記錄下兩個數(shù)據(jù)集的識別正確率,結(jié)果如表2、表3 所示。 由于兩個數(shù)據(jù)集的的像素大小分別為32×32×3 和28×28×1,因此GSDCPeleeNet 和PeleeNet 都沒有使用莖塊,增長率(growth rate)設(shè)置為32;DenseNet 中的密集層為3 層,轉(zhuǎn)換層為2 層。
表2 各模型在CIFAR-10 上的識別準確度
表3 各模型在Fashion-MNIST 上的識別準確度
從表2 可以看出,在CIFAR-10 數(shù)據(jù)集中,GSDCPelee-Net 中長卷積核信道方向上的步長s 取1 時,該網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)大幅度減少,只有0.404M,在Peleenet 的基礎(chǔ)上,大約減少了80%,準確率只大約降低了2%。 當步長s 逐漸增加時,網(wǎng)絡(luò)結(jié)構(gòu)的參量數(shù)量逐漸增大,而識別準確度有一個先上升后下降的過程。 這與SDChannelNets中步長s 和識別準確度呈正相關(guān)不同。 這是因為,輸入特征圖經(jīng)過分組卷積后,過大的步長s 會使得更多的1×1GSD-Channel-Wise 轉(zhuǎn)換成標準1×1 卷積,導(dǎo)致參數(shù)共享和密集連接與分組卷積結(jié)合的效果減弱。 因此,選取合適的步長s,可以在網(wǎng)絡(luò)模型參數(shù)增加不大的情況下有一個很好的精準度。 當步長s 選取64 時,網(wǎng)絡(luò)的識別準確率最高,為91.38%,優(yōu)于PeleeNet 的90.76%和其他模型。
圖4 是各個GSDCPeleeNet 模型在CIFAR-10 上數(shù)據(jù)集上的測試準確率曲線對比。
圖4 GSDCPeleeNet 各模型在CIFAR-10 的準確率曲線
從表3 可以看出,該模型在不同的數(shù)據(jù)集中也表現(xiàn)出了較強的識別能力。 尤其是在Fashion-MNIST 這樣的簡單數(shù)據(jù)集中,GSDCPeleeNet-s1 也表現(xiàn)出了不錯的識別能力,準確率達到94.01%。 GSDCPeleeNet-s64 的識別準確率仍然最高,達到了94.61%,優(yōu)于PeleeNet 的94.35%和其他模型。 圖5 是GSDCPeleeNet 各模型在Fashion-MNIST 的準確率曲線。
本文結(jié)合SD-Channel-Wise 卷積算法和分組卷積的方法,提出改進的GSD-Channel-Wise 卷積方法;并結(jié)合PeleeNet 網(wǎng)絡(luò)的結(jié)構(gòu),用該卷積方法代替網(wǎng)絡(luò)中標準的1×1 卷積,改進出了一種新型網(wǎng)絡(luò)——GSDCPeleeNet。通過調(diào)整長卷積核通道方向上的超參數(shù)步長s,可以改變網(wǎng)絡(luò)模型的參數(shù)量和準確度。 通過一定的實驗,發(fā)現(xiàn)網(wǎng)絡(luò)的識別準確度和步長s 之間沒有成正比。 這表明,選擇合適的步長s 可以在一個較少的模型參數(shù)量上取得更高的準確率。 實驗結(jié)果也表明,與其他卷積神經(jīng)網(wǎng)絡(luò)相比,該卷積神經(jīng)網(wǎng)絡(luò)參數(shù)更少,而且識別效果差距不大甚至更佳。但由于PeleeNet 網(wǎng)絡(luò)結(jié)構(gòu)的限制,GSDCPeleeNet 的網(wǎng)絡(luò)參數(shù)和計算量還是較大。 在接下去的工作中,希望通過結(jié)合其他輕量卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和壓縮方法,繼續(xù)改進該網(wǎng)絡(luò)。在進一步的工作中,還將會研究該網(wǎng)絡(luò)在其他計算機視覺領(lǐng)域的應(yīng)用,如目標檢測和圖像識別等。
圖5 GSDCPeleeNet 各模型在Fashion-MNIST 的準確率曲線