張 雷,楊薪穎
(沈陽航空航天大學(xué)電子信息工程學(xué)院,遼寧 沈陽 110136)
目前,深度卷積神經(jīng)網(wǎng)絡(luò)(DeepConvolutional Neural Network,DCNN)已經(jīng)廣泛應(yīng)用于圖像分類[1]、人臉識別[2]、音頻分類[3]和語音識別[4]等研究。在DCNN快速發(fā)展的同時,網(wǎng)絡(luò)的層數(shù)和模型的體積也在不斷擴大,規(guī)模的擴大和計算復(fù)雜度的增加使得這些模型很難部署[5]和應(yīng)用于實時性要求較高的場景,阻礙了其在更廣闊領(lǐng)域的應(yīng)用和推廣,因此,優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),壓縮并加速網(wǎng)絡(luò)模型已成為工業(yè)界和學(xué)術(shù)界亟待解決的難題之一。為了解決這一問題,大量的網(wǎng)絡(luò)模型壓縮方法被相繼提出[6-11]。
目前具有代表性的網(wǎng)絡(luò)模型壓縮方法有五種:權(quán)重剪枝法、近端梯度法、知識蒸餾、深度可分離卷積和二值化。權(quán)重剪枝法[6]在早期的神經(jīng)網(wǎng)絡(luò)時期就已經(jīng)被提出,其主要通過減少網(wǎng)絡(luò)全連接層中的權(quán)重數(shù)量,從而達到減少網(wǎng)絡(luò)中的冗余、提高網(wǎng)絡(luò)計算效率的要求,在不顯著影響精度的情況下刪除一部分網(wǎng)絡(luò)權(quán)重,最終可以減少數(shù)十倍的內(nèi)存需求。相對于傳統(tǒng)的隨機梯度下降法,近端梯度法[7]則是在目標(biāo)函數(shù)中加入L2范數(shù)正則化項,產(chǎn)生稀疏模型,這種方法不僅可以避免過擬合問題,而且提高了網(wǎng)絡(luò)收斂速度,縮短了訓(xùn)練時間。不同于以上兩種方法,知識蒸餾[8]法通過構(gòu)建出新的小網(wǎng)絡(luò)來達到壓縮模型的效果,將一個高精度且復(fù)雜的教師網(wǎng)絡(luò)轉(zhuǎn)換為一個結(jié)構(gòu)緊湊簡單的學(xué)生網(wǎng)絡(luò),教師網(wǎng)絡(luò)將細粒度知識遷移到學(xué)生網(wǎng)絡(luò)中,進而使學(xué)生網(wǎng)絡(luò)和教師網(wǎng)絡(luò)擁有同樣的性能。深度可分離卷積[9]與權(quán)重剪枝類似,通過減少了參數(shù)數(shù)量來優(yōu)化網(wǎng)絡(luò)模型,其已經(jīng)廣泛應(yīng)用于一些輕量級網(wǎng)絡(luò)中,如Google所提出的Inception[12]、MobileNet[13]和SqueezeNet,該方法的核心思想是將一個完整的卷積運算分為兩步,相比與標(biāo)準(zhǔn)的卷積操作,不僅可以有效的提取特征,還極大的減少了參數(shù)量,降低了運算復(fù)雜度,通過深度可分離卷積,在CPU上可以實現(xiàn)2到4倍的加速,并且可以保持分類精度。二值化網(wǎng)絡(luò)[10]又稱為二進制神經(jīng)網(wǎng)絡(luò),主要思想是將網(wǎng)絡(luò)參數(shù)值量化為+1或-1,使原本32位的浮點數(shù)參數(shù)量化至1位定點數(shù),此外,其純邏輯計算極大得壓縮了網(wǎng)絡(luò)模型,并保持了與原始模型中相同的參數(shù)數(shù)量,在分類MNIST數(shù)據(jù)集時,速度可提升7倍[14]。上述方法均已在模型壓縮與優(yōu)化加速技術(shù)中成功地應(yīng)用與普及。
本文結(jié)合深度可分離卷積和二值化網(wǎng)絡(luò)兩種模型壓縮方法,設(shè)計了一種深度可分離卷積二值化網(wǎng)絡(luò)模型,使用深度可分離卷積代替標(biāo)準(zhǔn)卷積,再對網(wǎng)絡(luò)進行二值化,并通過實值教師網(wǎng)絡(luò)引導(dǎo)訓(xùn)練使二值化網(wǎng)絡(luò)模型在最大化壓縮的同時保持了分類精度。實驗結(jié)果表明,深度可分離卷積二值化網(wǎng)絡(luò)在分類精度略有損失的情況下,可以大幅減少內(nèi)存占用、提高計算速度,有利于移動端部署。
在本節(jié)中,構(gòu)建了一個基礎(chǔ)的深度卷積神經(jīng)網(wǎng)絡(luò)DCNN-8,并詳細介紹了在DCNN-8的基礎(chǔ)上采用的兩種優(yōu)化方法:深度可分離卷積和二值化網(wǎng)絡(luò)。
深度卷積神經(jīng)網(wǎng)絡(luò)是最成功的深度學(xué)習(xí)算法之一[15],作為一種有監(jiān)督的學(xué)習(xí)算法,其無需人工對圖像進行大量而復(fù)雜的特征提取,而是通過網(wǎng)絡(luò)中的卷積運算提取特征,達到分類識別的目的,與傳統(tǒng)機器學(xué)習(xí)方法[16]相比具有更強的特征學(xué)習(xí)能力和表達能力。
本文搭建的DCNN-8包含8個卷積層,2個最大池化層、1個特征融合層、2個全連接層和一個Softmax分類層,每一個卷積層的卷積核尺寸為5×5,且都包含批標(biāo)準(zhǔn)化和修正線性單元,具體的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 DCNN-8網(wǎng)絡(luò)結(jié)構(gòu)圖
深度可分離卷積(depthwise separable convolution)由逐通道卷積(depthwise,DW)和逐點卷積(pointwise,PW)兩個部分組成,相比與標(biāo)準(zhǔn)的卷積操作,其參數(shù)數(shù)量和運算成本相對較低。
圖2 標(biāo)準(zhǔn)卷積方式
圖3 深度可分離卷積方式
圖2、圖3分別為標(biāo)準(zhǔn)卷積和深度可分離卷積,在標(biāo)準(zhǔn)的卷積操作中假設(shè)步長為1,大小為H×W×N的輸入特征映射,生成H×W×M的特征映射,其中H表示特征圖的高度,W表示特征圖的寬度,N表示輸入通道的數(shù)量,M為輸出通道的數(shù)量。標(biāo)準(zhǔn)卷積由K×K×N×M的卷積核計算,其中K是卷積核的尺寸,所以標(biāo)準(zhǔn)卷積參數(shù)量為
Pc=N×M×K×K
(1)
深度可分卷積包括兩層:逐通道卷積和1×1逐點卷積,其參數(shù)量如下
Ps=N×K×K+1×1×N×M
(2)
深度可分離卷積參數(shù)量與標(biāo)準(zhǔn)卷積參數(shù)量之比為
(3)
標(biāo)準(zhǔn)的卷積同時增強了空間相關(guān)性和通道相關(guān)性,而深度可分卷積首先增強空間相關(guān)性,然后增強了通道相關(guān)性。因此,使用深度可分離卷積,不僅可以對輸入特征圖進行有效的提取,保持網(wǎng)絡(luò)分類精度,還大大減少了參數(shù)數(shù)量和運算成本。
在本文搭建的DCNN-8中,使用卷積核尺寸為5×5(K=5)的深度可分離卷積來代替?zhèn)鹘y(tǒng)的卷積,根據(jù)式(3),采用深度可分卷積代替后,卷積層的總參數(shù)數(shù)量減少了10倍以上。
二值化網(wǎng)絡(luò)(Binary neural network,BNN)被認為是將分類模型部署到資源有限的設(shè)備上最有前途的模型壓縮方法之一[7]。
網(wǎng)絡(luò)權(quán)重和激活值通過sign函數(shù)進行二值化,其值被限制為+1或-1
(4)
式中x為真實變量值,xb為二值化后的變量值。通過二值化,使網(wǎng)絡(luò)權(quán)重和激活值的精度降低到1位,然后將32個二值化變量存儲在一個32位的寄存器中,因此,二值化后的模型壓縮比最大可以達到32倍。
在二值化網(wǎng)絡(luò)的卷積層中,由于權(quán)重和激活值都被限制為+1或-1,因此可以用輕量級的按位同或(XNOR)操作和計算二進制串中1的數(shù)量(popcount)操作代替浮點型的復(fù)雜矩陣乘法運算
Xb*Wb=popcount(XNOR(Xb,Wb))
(5)
式中Xb和Wb分別為二值化后的激活值和權(quán)重矩陣。
二值化網(wǎng)絡(luò)作為壓縮算法中的極端情況,其擁有高壓縮比、高加速比的性能優(yōu)勢,但是缺陷也較為明顯。由于二值化網(wǎng)絡(luò)將數(shù)值精度降低到+1或-1,卷積層輸出的特征圖很難攜帶足夠的特征信息并保證輸出值的范圍適合下一層的二值化操作,如果直接使用sign函數(shù)對網(wǎng)絡(luò)中傳遞的實數(shù)值進行二值化可能會導(dǎo)致特征圖攜帶的特征信息過低,最終影響網(wǎng)絡(luò)的分類精度,并且二值化網(wǎng)絡(luò)在傳播時采用的是±1,無法直接計算梯度信息,因此二值化網(wǎng)絡(luò)一直缺乏有效的訓(xùn)練算法。針對以上問題,文獻[17]中提出Rsign和RPReLu函數(shù),通過使用可學(xué)習(xí)參數(shù)讓網(wǎng)絡(luò)學(xué)習(xí)到最適合的二值化閾值和激活值的分布,如圖4所示,通過使用Rsign、RPReLu,緩解了二值化網(wǎng)絡(luò)對于特征分布學(xué)習(xí)的困難,獲得了良好的二值化特征,使網(wǎng)絡(luò)的性能得到提高。
圖4 Rsign和RPReLu函數(shù)
Rsign公式如下
(6)
RPReLu公式如下
(7)
式中xi是RPReLu在第i個通道的輸入,βi是控制負部分斜率的可學(xué)習(xí)系數(shù),γi和ζi是移動分布的可學(xué)習(xí)位移量。
針對經(jīng)過深度可分離卷積處理的DCNN-8(SDCNN-8),本文采用Rsign、RPReLu替換Relu激活函數(shù)作為二值化方法,如圖5所示,將網(wǎng)絡(luò)模型進一步壓縮。
圖5 二值化結(jié)構(gòu)
本文為了彌補二值化導(dǎo)致的精度損失,通過實值教師網(wǎng)絡(luò)來引導(dǎo)學(xué)生網(wǎng)絡(luò)的訓(xùn)練,DCNN-8作為實值教師網(wǎng)絡(luò),學(xué)生網(wǎng)絡(luò)即為經(jīng)過深度可分離卷積處理的二值化DCNN-8(SBDCNN-8)。實值教師網(wǎng)絡(luò)通過引入溫度參數(shù)得到軟化后的概率分布
(8)
式中T為溫度參數(shù),zi為softmax層輸出的分類類別概率。若T越大,則概率分布越緩和,實值教師網(wǎng)絡(luò)隱含的知識更容易被學(xué)生網(wǎng)絡(luò)學(xué)習(xí),此時學(xué)生網(wǎng)絡(luò)的損失函數(shù)為
(9)
本文實驗所使用的服務(wù)器配置及軟件環(huán)境的配置如表1所示,實驗在Windows10系統(tǒng)下運行,使用 NVIDIA GeForce GTX 1060和CUDA進行加速訓(xùn)練。
表1 實驗環(huán)境配置
本文實驗使用的數(shù)據(jù)集是由牛津大學(xué)Visual Geometry Group發(fā)布的公開數(shù)據(jù)集17flowers,其中包含了在英國比較常見的17種花,例如水仙,向日葵,洋甘菊等,如圖6所示。數(shù)據(jù)集中的圖像具有較高的空間復(fù)雜度和較大的類內(nèi)差距,具體表現(xiàn)為數(shù)據(jù)集中的花卉圖像具有多種形狀、角度和光照條件。整個數(shù)據(jù)集共有1360張圖片,每種花包含80張圖片,選取其中60張圖片作為訓(xùn)練集,20張圖片作為測試集,并將圖片尺寸統(tǒng)一縮放成128×128,便于網(wǎng)絡(luò)輸入。
圖6 17flowers數(shù)據(jù)集
對SBDCNN-8使用兩階段式訓(xùn)練策略進行訓(xùn)練:第一階段,首先在該訓(xùn)練集上訓(xùn)練DCNN-8,將預(yù)訓(xùn)練好的DCNN-8作為實值教師網(wǎng)絡(luò),然后對SBDCNN-8的激活值進行二值化、權(quán)重采用實值進行訓(xùn)練,共訓(xùn)練100輪;第二階段,加載第一階段保存的網(wǎng)絡(luò)模型,并對權(quán)重進行二值化,然后繼續(xù)訓(xùn)練。訓(xùn)練時超參數(shù)α設(shè)置為0.8,采用Adam優(yōu)化算法,批大小設(shè)置為32,學(xué)習(xí)率設(shè)置為0.0005。
圖6 不同溫度參數(shù)下SBDCNN-8的平均測試集準(zhǔn)確率
為了測試溫度參數(shù)對于模型性能的影響,接下來在不同溫度參數(shù)下對SBDCNN-8進行訓(xùn)練。當(dāng)訓(xùn)練損失值達到最低并且穩(wěn)定時終止訓(xùn)練,對測試集進行測試時溫度參數(shù)設(shè)置為1,在每個溫度參數(shù)下重復(fù)訓(xùn)練4次,取其平均準(zhǔn)確率,如圖7所示。當(dāng)溫度參數(shù)小于20時,隨著溫度參數(shù)的增加,測試集準(zhǔn)確率逐漸上升,溫度參數(shù)為20時,平均測試集準(zhǔn)確率最高,達到96.6%。
為評估SBDCNN-8的性能,本文從權(quán)重位寬、激活值位寬、參數(shù)量、分類精度、內(nèi)存占用以及計算時間等方面與DCNN-8和SDCNN-8進行對比。表2為不同網(wǎng)絡(luò)模型的參數(shù)比較,SBDCNN-8的參數(shù)位寬僅為1位,參數(shù)量僅為8.4M。
表2 不同網(wǎng)絡(luò)模型的參數(shù)比較
為公平的測試不同網(wǎng)絡(luò)模型的分類精度,實驗過程采用四折交叉驗證。首先使用相同的訓(xùn)練集訓(xùn)練三種網(wǎng)絡(luò)模型,SBDCNN-8和實值教師網(wǎng)絡(luò)的溫度參數(shù)設(shè)置為20,然后在同一測試集上進行測試,測試結(jié)果如表3所示。
表3 不同網(wǎng)絡(luò)模型的測試結(jié)果
從測試結(jié)果可以看出,全精度的實值網(wǎng)絡(luò)DCNN-8的平均準(zhǔn)確率為99.1%,SDCNN-8的平均準(zhǔn)確率為98.4%,SBDCNN-8的平均準(zhǔn)確率為96.9%,與實值網(wǎng)絡(luò)相比,深度可分離卷積和二值化后網(wǎng)絡(luò)的準(zhǔn)確率下降約2.2%。圖6為三種網(wǎng)絡(luò)模型訓(xùn)練時的損失值曲線,反映了模型的訓(xùn)練進程,當(dāng)?shù)喆芜_到150輪時,三種網(wǎng)絡(luò)模型的損失值均達到平緩,其中DCNN-8的損失值最低,SBDCNN-8的損失值最高。
圖6 不同網(wǎng)絡(luò)模型訓(xùn)練時的損失值曲線
表4 不同網(wǎng)絡(luò)模型的性能比較
表4為各個網(wǎng)絡(luò)模型的性能比較,DCNN-8和SDCNN-8作為實值網(wǎng)絡(luò)其分類精度較高,但是卻消耗了大量的內(nèi)存空間和計算時間,而SBDCNN-8在分類精度僅損失2.2%的情況下,內(nèi)存占用相對于DCNN-8減少了25倍、計算時間節(jié)省了18倍,這對于部署在資源較少的移動端設(shè)備上尤為重要。
本文提出一種基于深度可分離卷積二值化網(wǎng)絡(luò)的模型壓縮與優(yōu)化加速的方法,通過深度可分卷積代替標(biāo)準(zhǔn)卷積并對網(wǎng)絡(luò)進行二值化,大幅減少了內(nèi)存占用和計算時間。通過實值的教師網(wǎng)絡(luò)引導(dǎo)訓(xùn)練,避免了網(wǎng)絡(luò)二值化后分類精度的大幅下降。在下一步工作中,將繼續(xù)對模型壓縮和優(yōu)化加速方法進行研究,并將本文提出的方法移植到資源有限的移動設(shè)備上,實現(xiàn)硬件部署。