《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于深層卷積神經(jīng)網(wǎng)絡(luò)的剪枝優(yōu)化
基于深層卷積神經(jīng)網(wǎng)絡(luò)的剪枝優(yōu)化
2018年電子技術(shù)應(yīng)用第12期
馬治楠1,韓云杰2,彭琳鈺1,周進凡1,林付春1,劉宇紅1
1.貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽550025;2.貴陽信息技術(shù)研究院,貴州 貴陽550081
摘要: 隨著近幾年來深度學(xué)習(xí)的興起,其在目標(biāo)檢測、圖像分類、語音識別、自然語言處理等機器學(xué)習(xí)領(lǐng)域都取得了重大的突破,其中以卷積神經(jīng)網(wǎng)絡(luò)在深度學(xué)習(xí)中的運用較多。自VGGNet出現(xiàn)以來,深度學(xué)習(xí)逐漸向深層的網(wǎng)絡(luò)發(fā)展,網(wǎng)絡(luò)越來越深,這不僅增大了對硬件平臺存儲、運行內(nèi)存的需求,還大大增加了計算量,對硬件平臺資源的要求越來越高。因此將深度學(xué)習(xí)應(yīng)用于嵌入式平臺尤為困難。對此,通過對模型進行剪枝的方法將訓(xùn)練好的網(wǎng)絡(luò)模型壓縮處理,在基本保證準(zhǔn)確率的情況下去除不重要的參數(shù),縮減模型,減小網(wǎng)絡(luò)的計算復(fù)雜度,將深度學(xué)習(xí)應(yīng)用于嵌入式平臺。
中圖分類號: TP391
文獻標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.181958
中文引用格式: 馬治楠,韓云杰,彭琳鈺,等. 基于深層卷積神經(jīng)網(wǎng)絡(luò)的剪枝優(yōu)化[J].電子技術(shù)應(yīng)用,2018,44(12):119-122,126.
英文引用格式: Ma Zhinan,Han Yunjie,Peng Linyu,et al. Pruning optimization based on deep convolution neural network[J]. Application of Electronic Technique,2018,44(12):119-122,126.
Pruning optimization based on deep convolution neural network
Ma Zhinan1,Han Yunjie2,Peng Linyu1,Zhou Jinfan1,Lin Fuchun1,Liu Yuhong1
1.College of Big Data and Information Engineering,Guizhou University,Guiyang 550025,China; 2. Guiyang Academy of Information Technology,Guiyang 550081,China
Abstract: With the rise of deep learning in recent years, it has made major breakthroughs in machine learning fields such as target detection, image classification, speech recognition, and natural language processing. Among them, convolutional neural networks are widely used in deep learning. Since the emergence of VGGNet, neural networks have gradually developed deeper and the network has become deeper. This not only increases the demand for operating memory and running memory, but also greatly increases the amount of computation. The requirements for hardware platform resources are getting higher and higher. Therefore, it is particularly difficult to apply deep learning to embedded platforms. In this paper, by pruning the model, the trained network model is compressed, the unimportant parameters are eliminated, the model is reduced, and the computational complexity of the network is reduced. The deep learning will be applied to the embedded platform.
Key words : deep learning;convolutional neural network;model compression;pruning

0 引言

    深度學(xué)習(xí)起源于人工神經(jīng)網(wǎng)絡(luò),后來LECUN Y提出了卷積神經(jīng)網(wǎng)絡(luò)LeNet-5[1],用于手寫數(shù)字識別,并取得了較好的成績,但當(dāng)時并沒有引起人們足夠的注意。隨后BP算法被指出梯度消失的問題,當(dāng)網(wǎng)絡(luò)反向傳播時,誤差梯度傳遞到前面的網(wǎng)絡(luò)層基本接近于0,導(dǎo)致無法進行有效的學(xué)習(xí)。2006年HINTON G E提出多隱層的網(wǎng)絡(luò)可以通過逐層預(yù)訓(xùn)練來克服深層神經(jīng)網(wǎng)絡(luò)在訓(xùn)練上的困難[2],隨后深度學(xué)習(xí)迎來了高速發(fā)展期。一些新型的網(wǎng)絡(luò)結(jié)構(gòu)不斷被提出(如AlexNet、VGGNet、GoogleNet、ResNet等),網(wǎng)絡(luò)結(jié)構(gòu)不斷被優(yōu)化,性能不斷提升,用于圖像識別可以達到很好的效果。然而這些網(wǎng)絡(luò)大都具有更多的網(wǎng)絡(luò)層,對計算機處理圖像的能力要求很高,需要更多的計算資源,一般使用較好的GPU來提高訓(xùn)練速度,不利于在硬件資源(內(nèi)存、處理器、存儲)較低的設(shè)備運行,具有局限性。

    深度學(xué)習(xí)發(fā)展到目前階段,其研究大體可以分為兩個方向:(1)設(shè)計復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),提高網(wǎng)絡(luò)的性能;(2)對網(wǎng)絡(luò)模型進行壓縮,減少計算復(fù)雜度。在本文將討論第二種情況,去除模型中冗余的參數(shù),減少計算量,提高程序運行速度。

    目前很多網(wǎng)絡(luò)都具有更復(fù)雜的架構(gòu)設(shè)計,這就造成網(wǎng)絡(luò)模型中存在很多的參數(shù)冗余,增加了計算復(fù)雜度,造成不必要的計算資源浪費。模型壓縮大體有以下幾個研究方向:(1)設(shè)計更為精細(xì)的網(wǎng)絡(luò)結(jié)構(gòu),讓網(wǎng)絡(luò)的性能更為簡潔高效,如MobileNet網(wǎng)絡(luò)[3];(2)對模型進行裁剪,越是結(jié)構(gòu)復(fù)雜的網(wǎng)絡(luò)越存在大量參數(shù)冗余,因此可以尋找一種有效的評判方法,對訓(xùn)練好的模型進行裁剪;(3)為了保持?jǐn)?shù)據(jù)的精度,一般常見的網(wǎng)絡(luò)模型的權(quán)重,通常將其保存為32 bit長度的浮點類型,這就大大增加了數(shù)據(jù)的存儲和計算復(fù)雜度。因此,可以將數(shù)據(jù)進行量化,或者對數(shù)據(jù)二值化,通過數(shù)據(jù)的量化或二值化從而大大降低數(shù)據(jù)的存儲。除此之外,還可以對卷積核進行核的稀疏化,將卷積核的一部分誘導(dǎo)為0,從而減少計算量[4]。

    本文著重討論第二種方法,對模型的剪枝,通過對無用權(quán)重參數(shù)的裁剪,減少計算量。

1 CNN卷積神經(jīng)網(wǎng)絡(luò)

    卷積神經(jīng)網(wǎng)絡(luò)是一種前饋式網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)由卷積層、池化層、全連接層組成[5]。卷積層的作用是從輸入層提取特征圖,給定訓(xùn)練集:

jsj4-gs1-2.gif

    在卷積層后面一般會加一個池化層,池化又稱為降采樣,池化層可以用來降低輸入矩陣的緯度,而保存顯著的特征,池化分為最大池化和平均池化,最大池化即給出相鄰矩陣區(qū)域的最大值。池化層具有減小網(wǎng)絡(luò)規(guī)模和參數(shù)冗余的作用。

2 卷積神經(jīng)網(wǎng)絡(luò)剪枝

jsj4-2-x1.gif

jsj4-t1.gif

2.1 模型壓縮的方法

    本文用以下方法修剪模型:(1)首先使用遷移學(xué)習(xí)的方法對網(wǎng)絡(luò)訓(xùn)練,然后對網(wǎng)絡(luò)進行微調(diào),使網(wǎng)絡(luò)收斂并達到最優(yōu),保存模型;(2)對保存的模型進行修剪,并再次訓(xùn)練,對修剪后的模型參數(shù)通過訓(xùn)練進行微調(diào),如此反復(fù)進行,直到檢測不到可供裁剪的卷積核;(3)對上一步裁剪后的模型再次訓(xùn)練,直到訓(xùn)練的次數(shù)達到設(shè)定的標(biāo)準(zhǔn)為止。具體的流程如圖2所示。

jsj4-t2.gif

    上述的處理流程比較簡單,重點是如何評判網(wǎng)絡(luò)模型中神經(jīng)元的重要性。本文用價值函數(shù)C(W)作為評判重要性的工具。對于數(shù)據(jù)集D,經(jīng)訓(xùn)練后得到網(wǎng)絡(luò)模型Model,其中的權(quán)重參數(shù)為:

jsj4-gs3-4.gif

jsj4-gs3-4-x1.gif

2.2 參數(shù)評估

    網(wǎng)絡(luò)參數(shù)的評估在模型壓縮中有著非常重要的作用。一般采用下面的這種方法,通過比較權(quán)重參數(shù)的l2范數(shù)的大小,刪除l2范數(shù)較小的卷積核[8]。除此之外,還可以通過激活驗證的方法對參數(shù)進行評判,將數(shù)據(jù)集通過網(wǎng)絡(luò)前向傳播,對于某個網(wǎng)絡(luò)節(jié)點,若有大量通過激活函數(shù)后的數(shù)值為0或者小于一定的閾值,則將其舍去。

2.2.1 最小化l2范數(shù)

jsj4-gs5.gif

3 實驗結(jié)果

3.1 訓(xùn)練和剪枝結(jié)果

    本設(shè)計在Ubuntu16.04系統(tǒng),搭載1080Ti顯卡的高性能服務(wù)器上進行實驗,使用Pytorch深度學(xué)習(xí)框架進行訓(xùn)練和測試。本設(shè)計使用VGG16網(wǎng)絡(luò),對16類常見的路面障礙物圖片進行訓(xùn)練,其中數(shù)據(jù)集中的訓(xùn)練集有24 000張圖片,訓(xùn)練集12 000張圖片。在VGG16網(wǎng)絡(luò)中有16個卷積網(wǎng)絡(luò)層,共4 224個卷積核。采用遷移學(xué)習(xí)的方法對其進行訓(xùn)練,設(shè)置epoch為30,訓(xùn)練的結(jié)果如圖3所示。

jsj4-t3.gif

    圖3縱軸表示訓(xùn)練的準(zhǔn)確率,橫軸表示迭代次數(shù),最后的訓(xùn)練準(zhǔn)確率為97.97%。

    將上面的訓(xùn)練參數(shù)保存為模型,對其進行剪枝,分5次對其修剪,首先會根據(jù)l2范數(shù)最小值篩選出要修剪的網(wǎng)絡(luò)層中的卷積核,每次去除512個卷積核,修剪后模型中剩余的卷積核數(shù)量如圖4所示。

jsj4-t4.gif

    圖4中縱軸表示模型中保留的卷積核的數(shù)量,從最初的4 224降到1 664,裁剪率達到60.6%。5次迭代修剪后的準(zhǔn)確率如圖5所示。

jsj4-t5.gif

    對修剪后的網(wǎng)絡(luò)重新訓(xùn)練得到最終的修剪模型,訓(xùn)練過程如圖6所示。

jsj4-t6.gif

    最后達到98.7%的準(zhǔn)確率。剪枝前模型大小為512 MB,剪枝后模型可以縮小到162 MB,將模型的內(nèi)存占用降低了68.35%。

3.2 嵌入式平臺下的移植測試

    在嵌入式平臺樹莓派3代B型上移植Pytorch框架,樹莓派3b擁有1.2 GHz的四核BCM2837 64位ARM A53處理器,1 GB運行內(nèi)存,板載BCM43143WiFi。由于樹莓派運行內(nèi)存有限,故增加2 GB的swap虛擬內(nèi)存,用于編譯Pytorch框架源碼。將在GPU服務(wù)器上訓(xùn)練好的網(wǎng)絡(luò)模型移植到嵌入式平臺,對其進行測試。對123張測試圖片進行檢測分類,載入裁剪前的原始模型,用時109.47 s,準(zhǔn)確率為95.08%。載入剪枝后的模型,同樣對123張圖片進行測試,用時41.85 s,準(zhǔn)確率達到96.72%。結(jié)果如圖7所示,可以看到對模型裁剪后時間上減少了61%,速度有了很大提升。

jsj4-t7.gif

4 結(jié)論

    目前深度學(xué)習(xí)是一個熱門的研究方向,在圖像檢測、分類、語音識別等方面取得了前所未有的成功,但這些依賴于高性能高配置的計算機,也出現(xiàn)了各種深度學(xué)習(xí)框架以及網(wǎng)絡(luò)模型,但是可以預(yù)見深度學(xué)習(xí)即將邁入一個發(fā)展平緩期,如果不能有一個寬闊的應(yīng)用領(lǐng)域,深度學(xué)習(xí)的發(fā)展將很快被擱淺。誠然,將其應(yīng)用于嵌入式平臺將會是一個非常好的發(fā)展方向。相信未來深度學(xué)習(xí)在嵌入式領(lǐng)域會有一個更大的突破,部署于移動平臺將不再是一個難題。

參考文獻

[1] LECUN Y,BOTTOU L,BENGIO Y,et al.Gradient-based learning applied to document recognition[C].Proceedings of the IEEE,1998,86(11):2278-2324.

[2] HINTON G E,SALAKHUTDINOV R R.Reducing the dimensionality of data with neural networks[J].Science,2006,313(5786):504-507.

[3] HOWARD A G,ZHU M,CHEN B,et al.MobileNets:efficient convolutional neural networks for mobile vision applications[Z].arXiv preprint arXiv:1704.04861,2017.

[4] HAN S,MAO H,DALLY W J.Deep compression:compressing deep neural networks with pruning, trained quantization and Huffman coding[J].Fiber,2015,56(4):3-7.

[5] 周飛燕,金林鵬,董軍.卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J].計算機學(xué)報,2017,40(6):1229-1251.

[6] ANWAR S,HWANG K,SUNG W,et al.Structured pruning of deep convolutional neural networks[J].JETC,2017,13(3):1-18.

[7] AYINDE B O,ZURADA J M.Building efficient ConvNets using redundant feature pruning[Z].arXiv preprint arXiv:1802.07653,2018.

[8] LI H,KADAV A,DURDANOVIC I,et al.Pruning filters for efficient ConvNets[C].ICLR 2017,2017.



作者信息:

馬治楠1,韓云杰2,彭琳鈺1,周進凡1,林付春1,劉宇紅1

(1.貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽550025;2.貴陽信息技術(shù)研究院,貴州 貴陽550081)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。