孫若釩 高建瓴 陳婭先
摘要:近年來,研究人員們在卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上保證效率的條件下提出了輕量化卷積神經(jīng)網(wǎng)絡(luò),其中SqueezeNet輕量化卷積神經(jīng)網(wǎng)絡(luò)在保證精度的前提下,壓縮了參數(shù),提高了整體效率。本文針對SqueezeNet網(wǎng)絡(luò)中由于壓縮參數(shù),存在準確率不理想的問題,提出了引入殘差網(wǎng)絡(luò),增加跳層結(jié)構(gòu)和網(wǎng)絡(luò)寬度的改進方法VansNet,相較于AlexNet、ResNet和SqueezeNet三種卷積神經(jīng)網(wǎng)絡(luò)其計算量最小且參數(shù)量很小。實驗結(jié)果表明,改進后的VansNet輕量化結(jié)構(gòu)在略增加參數(shù)的前提下提高了圖像分類的準確率和效率。
關(guān)鍵詞:輕量化;卷積神經(jīng)網(wǎng)絡(luò);圖像分類;壓縮參數(shù) ;殘差網(wǎng)絡(luò);跳層結(jié)構(gòu)
中圖分類號:TP391
文獻標識碼: A
隨著卷積神經(jīng)網(wǎng)絡(luò)的不斷發(fā)展,人們把研究的重點集中于如何提高正確率上,隨著準確率的提升,卷積神經(jīng)網(wǎng)絡(luò)[1](Convolutional Neural Networks,CNN)
逐漸演變?yōu)榱松疃染矸e神經(jīng)網(wǎng)絡(luò),為了達到更好的性能,使得網(wǎng)絡(luò)層數(shù)不斷增加,網(wǎng)絡(luò)結(jié)構(gòu)更加復(fù)雜,雖然網(wǎng)絡(luò)性能得到了一定的提升,但是隨之而來的就是效率問題。例如,AlexNet[2]、ResNet[3]等性能不錯的卷積神經(jīng)網(wǎng)絡(luò)在圖像分類等很多領(lǐng)域已經(jīng)廣泛使用,這些卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)量非常高,識別一張圖片需要很大的運算量,需要大量的計算資源,而一般電腦的CPU計算耗費時間,效率也低,因此運行時需要用到性能優(yōu)異的GPU等更好的設(shè)備。實際中,為了發(fā)揮卷積神經(jīng)網(wǎng)絡(luò)的作用,將卷積神經(jīng)網(wǎng)絡(luò)運用到終端設(shè)備中,例如手機和航拍設(shè)備等移動設(shè)備,然而像手機這樣的移動終端設(shè)備內(nèi)存以及計算能力較小,不適合將網(wǎng)絡(luò)直接使用到當中去,因此研究人員們提出了適用于移動設(shè)備的卷積神經(jīng)網(wǎng)絡(luò),也就是輕量化卷積神經(jīng)網(wǎng)絡(luò)。輕量化結(jié)構(gòu)是指結(jié)構(gòu)分類精度滿足應(yīng)用需求,移動設(shè)備能承擔其結(jié)構(gòu)參數(shù)量和計算量。輕量化結(jié)構(gòu)的特點為一能加快運用到移動設(shè)備的效率,二為其占用空間小、計算量小并且能夠節(jié)約流量。在效率方面相較于傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)有了很大的提升,因此更受研究人員們的青睞。
2016年,提出的第一個輕量化網(wǎng)絡(luò)結(jié)構(gòu)Fire模塊,是由IANDOLA等[4]根據(jù)之前的網(wǎng)絡(luò)結(jié)構(gòu)提出來的,命名為SqueezeNet。SqueezeNet的分類精度跟AlexNet能夠達到基本相同,但其結(jié)構(gòu)參數(shù)量僅為后者的五十分之一。
本文主要針對SqueezeNet網(wǎng)絡(luò)中由于壓縮了參數(shù),存在準確率不理想的問題,提出了引入殘差網(wǎng)絡(luò),增加跳層結(jié)構(gòu)和網(wǎng)絡(luò)寬度的VansNet,以提升網(wǎng)絡(luò)的準確性以及效率。
1卷積神經(jīng)網(wǎng)絡(luò)
1.1卷積神經(jīng)網(wǎng)絡(luò)簡介
隨著人工智能的高速發(fā)展,深度學習也隨之在圖像識別、語音識別和自然語言處理等科技、大數(shù)據(jù)等應(yīng)用領(lǐng)域飛速發(fā)展,從而引起了研究人員們的廣泛重視與研究。其中深度學習的經(jīng)典代表算法CNN在分類領(lǐng)域中成為研究人員重點研究的對象,這是由于卷積神經(jīng)網(wǎng)絡(luò)在進行圖像分類時,可以直接將原始的圖像直接輸入神經(jīng)網(wǎng)絡(luò),不需要做像傳統(tǒng)圖像處理中繁瑣的圖像預(yù)處理工作,因而被廣泛應(yīng)用。
CNN是一種多層的神經(jīng)網(wǎng)絡(luò)[5],一個典型的卷積網(wǎng)絡(luò)由卷積層、池化層和全連接層構(gòu)成,擅長處理大圖像、大數(shù)據(jù)等的相關(guān)問題,卷積網(wǎng)絡(luò)通過卷積層與池化層的相互配合,組成多個卷積組,逐層進行特征提取,在卷積層完成操作之后,緊接著池化層降低數(shù)據(jù)維度,最后通過數(shù)個全連接層來完成所需分類。卷積神經(jīng)網(wǎng)絡(luò)其獨特的優(yōu)越性在于它的局部權(quán)值共享的特殊結(jié)構(gòu),其布局接近于實際的生物神經(jīng)網(wǎng)絡(luò)(如人的神經(jīng)網(wǎng)絡(luò)),CNN中權(quán)值共享這樣的特殊結(jié)構(gòu)有效地降低了網(wǎng)絡(luò)的復(fù)雜性,尤其是將包含多維輸入向量的圖像直接輸入到網(wǎng)絡(luò)中,避免了分類和特征提取過程中數(shù)據(jù)重建的復(fù)雜方式。
1.2卷積神經(jīng)網(wǎng)絡(luò)的架構(gòu)
CNN是一種前饋神經(jīng)網(wǎng)絡(luò)[6],是受到生物思考方式啟發(fā)的多層感知器,它有著不同的類別層次,并且各層的工作方式和作用也不同。卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)與常規(guī)人工神經(jīng)網(wǎng)絡(luò)架構(gòu)非常相似,可以響應(yīng)周圍單元,也可以進行大型的圖像處理。卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)一般分為:輸入層、卷積層、池化層、全連接層和輸出層五個部分,如圖1所示。
輸入特征的標準化有利于提升算法的運行效率和學習表現(xiàn),卷積神經(jīng)網(wǎng)絡(luò)的輸入層可以處理多維數(shù)據(jù),在將圖像的像素值輸入卷積神經(jīng)網(wǎng)絡(luò)前,需在通道對原始圖像進行歸一化、去均值等操作。
在卷積層中,卷積層內(nèi)部包含很多卷積核,組成卷積核的每個元素都對應(yīng)一個權(quán)重系數(shù)和一個偏差量,類似于一個前饋神經(jīng)網(wǎng)絡(luò)的神經(jīng)元。計算輸入圖像的區(qū)域和濾波器的權(quán)重矩陣之間的點積,然后將其計算結(jié)果作為卷積層的輸出,主要作用是對輸入的數(shù)據(jù)提取特征。
池化層也稱為欠采樣或下采樣,核心目標是在卷積神經(jīng)網(wǎng)絡(luò)上減小特征空間維度,進行特征選擇和信息過濾。目前使用最廣泛的池化操作有最大池化和平均池化,當使用最大池化層時,采用的是輸入?yún)^(qū)域中的最大數(shù)量,而當使用平均池化時,采用的是輸入?yún)^(qū)域中的平均值。
全連接層搭建在網(wǎng)絡(luò)結(jié)構(gòu)中的最后部分,等價于傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò)中的隱含層,在一些卷積神經(jīng)網(wǎng)絡(luò)中由全局均值池化取代。
輸出層的上游基本是全連接層,其工作原理與前饋神經(jīng)網(wǎng)絡(luò)的輸出層相同。在分類任務(wù)中輸出層通常是分類器。
1.3卷積神經(jīng)網(wǎng)絡(luò)的相關(guān)運算
1.3.1卷積運算
卷積神經(jīng)網(wǎng)絡(luò)使用卷積來提取圖像的局部特征,其最核心的概念就是卷積,它的計算方法如下:
卷積神經(jīng)網(wǎng)絡(luò)的卷積操作方式和數(shù)學中的離散卷積是有一定的區(qū)別,雖然其卷積操作方式的定義是離散卷積,卷積操作實際上是用卷積核在圖像矩陣上滑動,對卷積核矩陣與圖像矩陣中對應(yīng)位置元素相乘然后求和。卷積層內(nèi)每個神經(jīng)元都與前一層中位置接近的區(qū)域的多個神經(jīng)元相連,卷積核的參數(shù)值決定了卷積結(jié)果的投票能力,即卷積核與對應(yīng)的像素點的重合區(qū)域,參數(shù)權(quán)值越大,投票比重越大。
1.3.2下采樣
池化通常緊跟在CNN的卷積層之后,主要用于特征降維,減少網(wǎng)絡(luò)要學習的數(shù)據(jù)和參數(shù)的數(shù)量,防止過擬合,擴大感受視野,實現(xiàn)平移、旋轉(zhuǎn)和尺度不變性,同時提高模型的容錯性。主要的池化方法:最大池化法,對領(lǐng)域內(nèi)特征點取最大值;平均池化法,對領(lǐng)域特征點求平均。
進行卷積,主要目的是減少Feature Map的維數(shù)。SqueezeNet的核心在于Fire Module,可以理解為網(wǎng)絡(luò)中的小模塊,F(xiàn)ire Module包含兩個部分:Squeeze層與Expand層,如圖2所示,Squeeze層采用1×1卷積層對輸入特征數(shù)據(jù)進行卷積,主要目的是減少輸入特征的通道數(shù),也即是降維。Expand層分別采用1×1和3×3卷積,然后再拼接,具體操作如圖3所示。
本文對SqueezeNet的改進主要為兩點:第一,擴展網(wǎng)絡(luò)寬度,在略增加網(wǎng)絡(luò)參數(shù)的前提下,提高模型準確率;第二,引入殘差網(wǎng)絡(luò)的思想,防止在訓練過程中出現(xiàn)梯度消失和梯度爆炸,增強網(wǎng)絡(luò)對圖像分類的泛化能力,并且提高網(wǎng)絡(luò)效率。如圖5所示,在原網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上增加Fire模塊,以提高網(wǎng)絡(luò)的準確率,同時引入殘差思想增加運算效率,沒有增加網(wǎng)絡(luò)的深度而是適當增加網(wǎng)絡(luò)的寬度。在Fire模塊中,在原基礎(chǔ)上引入殘差網(wǎng)絡(luò)的思想,增加跳層結(jié)構(gòu),防止訓練過程中梯度消失,以提高網(wǎng)絡(luò)的效率,如圖6所示。
4實驗分析
實驗是基于Tensorflow[8]來構(gòu)建和訓練VansNet,且卷積網(wǎng)絡(luò)模型的訓練使用了 GPU并行處理。實驗環(huán)境的主要參數(shù):Intel(R) Xeon(R) CPU X5690 @ 3.47 GHz和NVIDIA GeForce RTX 2080Ti GPU,操作系統(tǒng)為Linux系統(tǒng),實驗平臺為python36。
由于該網(wǎng)絡(luò)對不同數(shù)據(jù)集具有普遍適應(yīng)能力,本文采用以下兩個不同的數(shù)據(jù)集[9-10]進行實驗,如表1所示:
使用測試集的分類精度、網(wǎng)絡(luò)參數(shù)量和網(wǎng)絡(luò)計算量作為評估指標[11]。網(wǎng)絡(luò)計算量指推斷一張圖片所需浮點數(shù)的運算次數(shù)。通過輸入通道數(shù)量、輸出通道數(shù)量、卷積核的高和寬以及輸出通道的高和寬的相應(yīng)關(guān)系來得到網(wǎng)絡(luò)計算量。
實驗首先將VansNet與AlexNet、ResNet、SqueezeNet分別在同一數(shù)據(jù)集下做對比實驗。
將四種網(wǎng)絡(luò)結(jié)構(gòu)在Flowers5 數(shù)據(jù)集上進行比較,如圖7所示,四種網(wǎng)絡(luò)結(jié)構(gòu)均在迭代20輪后趨近于穩(wěn)定。在迭代25~30輪后,AlexNet與SqueezeNet趨近于穩(wěn)定,而VansNet和ResNet保持小范圍的波動。文中提到AlexNet和SqueezeNet分類精度基本相同,而在此次實驗中兩者的分類精度不同,這是因為本次實驗使用的數(shù)據(jù)集Flowers5自身存在的問題所致,并不能代表普遍情況,在其他數(shù)據(jù)集下測試兩者的分類精度是相同的,如ImageNet ̄1K數(shù)據(jù)集以及文中的Simpsons13數(shù)據(jù)集等。從此次實驗結(jié)果可知,相較于其他三種網(wǎng)絡(luò)結(jié)構(gòu),在數(shù)據(jù)集Flowers5上,VansNet的分類精度優(yōu)于其余三者。
將四種網(wǎng)絡(luò)在數(shù)據(jù)集Simpsons13上進行實驗,如圖8所示,在迭代15~20輪后,ResNet與VansNet趨近于穩(wěn)定,在迭代25~30輪后,AlexNet與 SqueezeNet趨近于穩(wěn)定。由訓練結(jié)果圖像可知,分類精度由高到低依次為ResNet 、VansNet、SqueezeNet、AlexNet。并且由訓練結(jié)果圖像可見AlexNet與SqueezeNet分類精度幾乎相同,同時VansNet相較于SqueezeNet 有更好的分類精度。從此次實驗結(jié)果可知,數(shù)據(jù)集Simpsons13上,VansNet相較于AlexNet與SqueezeNet,能達到較好的分類精度。
將四種網(wǎng)絡(luò)AlexNet、ResNet、SqueezeNet和VansNet的參數(shù)量、計算量作比較,如表2所示。AlexNet 結(jié)構(gòu)參數(shù)量最大,計算量處于四種網(wǎng)絡(luò)之間。這是因為AlexNet含三個全連接層,且三個全連接層中的參數(shù)占比較大造成AlexNet總體參數(shù)量較大;計算量不是很大是由于AlexNet中結(jié)構(gòu)層數(shù)不多并且卷積層的參數(shù)較少。ResNet結(jié)構(gòu)參數(shù)量處于四種網(wǎng)絡(luò)之間,而計算量卻是最大的。這是因為 ResNet中應(yīng)用了全局平均池化層,有效地減少結(jié)構(gòu)參數(shù)量;計算量最大是由于ResNet結(jié)構(gòu)中含有較多的層數(shù)。SqueezeNet結(jié)構(gòu)參數(shù)量很小,計算量處于四種結(jié)構(gòu)之間。這是因為SqueezeNet結(jié)構(gòu)中Fire模塊使用了較少的3×3的卷積,故其參數(shù)量很小;計算量偏大是因為Fire模塊中1×1的卷積較多。VansNet采用跳層結(jié)構(gòu)以及增加網(wǎng)絡(luò)寬度使得其計算量最小但參數(shù)量比SqueezeNet稍高一些。
5結(jié)語
本文引入殘差的思想,增加跳層結(jié)構(gòu)以及增加SqueezeNet中網(wǎng)絡(luò)結(jié)構(gòu)的寬度,使得VansNet在分類精度和計算量上均優(yōu)于SqueezeNet。但VansNet在參數(shù)量上還是稍高于SqueezeNet,這是由于在VansNet中增加寬度的策略自然增加了模塊數(shù)使得參數(shù)量略微提高。將來可進一步研究VansNet網(wǎng)絡(luò)模型的改進,使得網(wǎng)絡(luò)更加輕量化以及在其他領(lǐng)域中運用的可行性。
參考文獻:
[1]吳正文.卷積神經(jīng)網(wǎng)絡(luò)在圖像分類中的應(yīng)用研究[D]. 成都:電子科技大學,2015.
[2]KRIZHEVSKY A, SUTSKEVER I, HINTON G . ImageNet Classification with Deep Convolutional Neural Networks[C]//2012 IEEE Conference on Computer Vision and Pattern Recognition.USA:IEEE,2012:154-161.