趙麗君, 周永軍, 湯小紅, 蔣淑霞, 董寅賓, 廖慕欽
(中南林業(yè)科技大學 機電工程學院,湖南 長沙 410000)
障礙物檢測和識別是無人駕駛汽車駕駛自主避障的前提,主要傳感手段有雷達、激光等主動傳感器和基于視覺的被動傳感器。將深度卷積神經網絡應用在無人駕駛場景識別,是一個實用且具有挑戰(zhàn)的研究方向[1,2]。深度卷積神經網絡更深的層級和大量參數是網絡模型準確檢測及識別的重要保障。但是,由于需要訓練的參數眾多,導致訓練過程計算量大、模型所占內存太大以至難以部署到移動端。模型剪枝是一種網絡模型壓縮方法,對深度神經網絡的稠密連接引入稀疏性,通過將“不重要”的權重刪掉來減少權重數量。
LeCun Y等人[3]提出使用對角Hessian矩陣評價每個權重參數的重要性,將網絡中不重要的參數剔除,從而達到壓縮模型作用,方法能夠較好保證網絡測試準確率,但對網絡加速效果有限;Hassibi B等人[4]提出使用逆 Hessian 矩陣評價每個權重的重要性,將重要性低的權重刪減,剩余權重使用二階泰勒確定損失函數值增量更新;Luo J H等人[5]利用熵值大小評價卷積核重要性,將重要性較小的卷積核進行裁剪。
卷積核剪枝側重于模型加速,權重剪枝側重于模型壓縮,因此,本文提出一種組合剪枝方法,分別對全連接層和卷積層采用不同的剪枝算法進行模型剪枝。所提剪枝算法不僅有效提高了網絡模型的泛化能力,而且大大節(jié)省了參數存儲空間,提高訓練和測試速度。
卷積核剪枝,每剪掉一個卷積核之后,相應的輸出特征圖也會少一個通道,而且還會影響下一個卷積層。ni表示第i個卷積層的輸入通道數,hi/wi表示輸入特征圖的高度/寬度。卷積層輸入特征圖xi∈ni×hi×wi;通過該層卷積核Fi,j∈ni×k×k,生成輸出特征圖xi+1∈ni+1×hi+1×wi+1,該特征圖作為下一卷積層的輸入特征圖。該層所有卷積核一起組成了核矩陣Fi∈ni×ni+1×k×k,因此需要進行ni+1nik2hi+1wi+1次卷積操作。
當卷積核Fi,j被修剪時,相應輸出特征圖xi+1,j則被刪減,這樣該卷積層就減少了nik2hi+1wi+1次卷積操作,而本應作為下一層的輸入特征圖的刪減,直接導致下下層的卷積運算減少了ni+2k2hi+2wi+2次。由此可以得出,將第i層剪掉m個卷積核,會同時將i層和i+1層的計算量減少m/ni+1。
卷積核剪枝的重點就是如何評價卷積核重要性,本文采用將卷積核參數絕對值之和大小作為評判卷積核重要性的標準,卷積核參數求和公式
(1)
式中k為權重參數數值。
將sj與設定的閾值進行比較,以此作為該卷積核對于整個網絡貢獻度的評價指標,將各層中低于閾值的卷積核剪掉,可將模型空間復雜度降低且不會大幅降低模型性能。
全連接層的權重數量在整個網絡中所占比重較大,計算量相對于卷積層所占比重較小,因此提出隨機權重折半剪枝算法,能夠快速剪掉大量權重參數。隨機權重折半剪枝算法指的是將權重隨機刪減50 %,分析訓練測試精度及損失函數值,在能夠保證訓練效果的前提下不斷折半修剪權值參數,根據損失函數值及測試準確率的變化快速確定最佳剪枝數量。
損失函數值計算公式如下
H(p,q)=-∑(p(x)logq(x)+
(1-p(x))log(1-q(x)))
(2)
式中 概率分布p為期望輸出,概率分布q為實際輸出,H(p,q)為交叉熵損失函數。
觀察損失函數的收斂情況,用作是否停止剪枝的參考。
計算折半修剪前后平均測試準確率差值
δ=|Mi+1-Mi|
(3)
式中Mi為第i次剪枝后測試準確率,δ為準確率之差。當δ≤0.02時,繼續(xù)折半剪枝,否則停止剪枝,并將上一次剪枝數量N作為最佳剪枝量。確定全連接層剪枝數量后,將權重絕對值按從小到大排序,剪掉數值較小的前N個權重。
對于給定的原始網絡,在各層中增加掩模(mask)算法,被屏蔽的權重在反向傳播步驟中無法獲得更新量,再結合正則化對網絡進行稀疏化[6,7]。采用組合剪枝方式對卷積層和全連接層進行參數刪減,能夠在分類識別準確率保持較高水平下達到最大壓縮效果。首先控制全連接層參數數量保持不變并對卷積層進行修剪,卷積層修剪完成后控制卷積層參數數量不變,對全連接層修剪。本文剪枝過程分數次進行,在剔除不重要權重參數之后,通過一個再訓練(retrain)過程來恢復模型的性能,剪枝加再訓練反復進行,從而保證網絡模型對于目標圖像的分類識別有較高準確率。
網絡模型剪枝流程如圖1。
圖1 網絡模型剪枝流程
本次實驗平臺為Windows10系統搭載GeForce RTX 2080顯卡,使用Tensorflow深度學習框架進行訓練和測試。實驗采用的網絡模型是經典分類卷積神經網絡VGG—16[8],作為基礎網絡模型,其分類性能非常好;通過反復堆疊3×3的小型卷積核和2×2的最大池化層,構筑了一個13個卷積層和3個全鏈接層的卷積神經網絡。實驗采用香港中文大學多媒體實驗室公開的車輛數據,挑選10種不同類型的車輛圖片制作實驗數據集,訓練集含26 600張圖片,測試集含3 800張圖片。
卷積核剪枝能夠快速地將冗余神經元去掉,使得卷積層特征提取過程更為高效。圖2是各卷積層剪枝前后權重數量比較,各層有不同程度的刪減,卷積層從4 224個卷積核(14 710 464個權重)減至2 100個卷積核(3 712 437個權重)。
圖2 卷積層剪枝前后權重數量
全連接層參數隨機減半,例:原始網絡fc6 weights shape: (25 088,4 096),fc7 weights shape:(4 096,4 096),fc8 weights shape:(4 096,10)。第一次折半剪枝后,fc6 weights shape:(25 088,2 048),fc7 weights shape: (2 048,2 048),fc8 weights shape:(2 048,10),即每次減半操作,fc6層減半,fc7層減為1/4,fc8層減半。圖3是多次折半剪枝后訓練網絡的平均測試準確率。
圖3 全連接層不同剪枝率的網絡準確率
圖3(a)全連接層保持原始參數數量,測試平均準確率是94.12 % 。圖3(b)參數第一次折半刪減,測試平均準確率93.10 %;在參數減半的情況下準確率較為接近,因此符合繼續(xù)剪枝標準。圖3(c)參數第二次折半刪減,測試平均準確率92.84 %;參數數量低至1/4,準確率初期有較大波動,逐漸減小波動直至迭代8 000次后穩(wěn)定下來并保持較高的準確率。圖3(d)參數第三次折半刪減,測試平均準確率88.76 %;準確率下降較為明顯,因此不再繼續(xù)做剪枝處理 。
全連接層進行2次折半剪枝后:fc6 weights shape:(25 088,1 024);fc7 weights shape:(1 024,1 024);fc8 weights shape:( 1 024,10)。全連接層原始參數數量119 578 664個,修剪后參數數量26 748 928個,占比22.37 %,在保證測試準確率的情況下將全連接層進行了較高比例的壓縮。
將本文提出的組合剪枝方法與現有的幾種剪枝方法比較,結果如表1所示。
表1 VGG-16組合剪枝與其他剪枝方法比較
文獻[4]剪枝模型的測試準確率及模型壓縮率相對較高,但由于該算法需要計算 Hessian 矩陣及其逆矩陣,且每一輪迭代過程都要更新全部權重顯著度值,因此計算量較大,對模型加速效果較差。文獻[5]采用隨機修剪卷積核方式,因此測試準確率較差。文獻[6]采用基于熵值大小作為卷積核剪枝依據,剪枝后測試準確率相對較高,但模型壓縮率相對較差。本文提出的組合剪枝方法有較高預測準確率,同時對于原始網絡模型壓縮超過3/4,大幅降低計算復雜度、所需存儲空間和計算時間,結果表明本文提出的組合剪枝算法對VGG—16網絡模型實現了有效壓縮。
本文通過對多種剪枝方法效果分析,可以得出:全連接層權重參數存在大量冗余,對于全連接層剪枝能夠大幅壓縮模型尺寸;卷積核剪枝在模型訓練及測試加速方面起到明顯作用。本文提出組合剪枝算法:通過卷積核剪枝和折半權重剪枝達到模型加速及高效壓縮目的;多次剪枝及剪枝后的再訓練,較好地保證模型分類識別性能及時恢復,使得剪枝后的網絡模型仍具有較高測試準確率。對于其他剪枝方式的組合及改進有待進一步探究。