張江永,徐智勇,張建林,許 濤
(1.中國科學院光電技術研究所,成都 610209;2.中國科學院大學 電子電氣與通信工程學院,北京 100049;3.中國船舶工業(yè)系統(tǒng)工程研究院,北京 100036)
自從2012 年AlexNet 問世以來,深度卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)在圖像處理和自然語言處理等任務中取得了重要成果。為增強卷積神經(jīng)網(wǎng)絡的非線性擬合能力,網(wǎng)絡通常被設計得更寬和更深,并且需要大量的存儲空間和計算資源,導致其不適用于算力有限的硬件設備。因此,針對大型卷積神經(jīng)網(wǎng)絡進行壓縮,在確保精度損失較少的前提下,設計占用存儲量、前向推理計算量和能源消耗量均減少的輕量化網(wǎng)絡模型就顯得十分重要,而輕量化方法主要包括剪枝[1-2]、低秩分解[3]、量化[4]、知識蒸餾[5-6]等。由于卷積神經(jīng)網(wǎng)絡中包含卷積層和全連接層等人為設定的訓練參數(shù)模塊,這種憑借經(jīng)驗通過重復實驗得到的局部最優(yōu)超參數(shù)不能代表網(wǎng)絡的實際需求。根據(jù)深度卷積神經(jīng)網(wǎng)絡的新雙U 型偏差-方差風險曲線[6]可知,在不考慮資源限制的條件下,參數(shù)越多、模型越復雜的網(wǎng)絡性能表現(xiàn)越好,但是過多參數(shù)的復雜模型沒有權衡成本和性能間的關系并且模型存在冗余。剪枝的目的是通過剪除網(wǎng)絡中冗余的模塊,從過參數(shù)化的復雜模型中得到參數(shù)較少的輕量化模型,該模型處于雙U 型曲線的第一極小值點。
剪枝按照粒度的粗細可以分為非結構化剪枝和結構化剪枝兩種。非結構化剪枝主要是對權重進行修剪,LECUN 等[7]通過刪除目標函數(shù)的參數(shù)二階導較小的神經(jīng)元以稀疏權重,HAN 等[8]提出基于參數(shù)值的剪枝方法去除冗余權重,GUO 等[9]提出動態(tài)網(wǎng)絡剪枝方法,可恢復已被剪掉的重要神經(jīng)元,避免了錯誤修剪導致的精度損失。結構化剪枝由于內(nèi)部非規(guī)整的連接,需要依賴專門運行庫和硬件設備,因此卷積核(指三維卷積核,即濾波器)層面的結構化剪枝更受青睞。在卷積核粒度層面的結構化剪枝中,一旦某個卷積核或者通道被視為不重要,則會被整個移除,因此需要得到整個卷積核或者通道的重要性。LI 等[10]將卷積核權重的L1 范數(shù)值作為得分判斷卷積核的重要性。HU 等[11]通過計算卷積核權重的稀疏程度,得出越稀疏的核越不重要的結論。WANG 等[12]利用Group Lasso 得到稀疏化的卷積核,以便于進一步剪枝。YE 等[13]對“較小范數(shù)不重要”準則進行重新思考,認為較小的范數(shù)可能是對信息的補充。
除了從參數(shù)層面評估卷積核的重要性以外,還有基于特征重建的剪枝方式,通過最小化重建誤差獲取輕量化模型。LUO 等[14]使用貪心算法,在每一層的卷積核中尋找合適的子集代替原有的集合,如果可以得到類似于原來的特征,則可去除子集外的卷積核。ZHUANG 等[15]在fine-tuning 和剪枝階段引入鑒別力感知的輔助損失,增強剪枝后所保留特征的鑒別能力。HE 等[16]認為位于或者接近幾何中位數(shù)的卷積核是冗余的,可以用邊緣的剩余卷積核代替。LIU 等[17]提出網(wǎng)絡輕量化方法,通過在訓練過程中將BN 層的縮放因子的稀疏性損失加入網(wǎng)絡本身的損失函數(shù)中,使網(wǎng)絡在訓練時自主稀疏縮放因子,基于縮放因子的大小決定卷積核是否刪減,但如果層之間的稀疏不均勻,則會導致網(wǎng)絡中的層間卷積核個數(shù)不均勻。本文提出針對YOLO 網(wǎng)絡的基于敏感度的集成剪枝算法,利用稀疏縮放因子方式稀疏YOLO 網(wǎng)絡中卷積核個數(shù)較多的層,綜合3 種參數(shù)重要性評價方法對卷積核做重要性排序,通過網(wǎng)絡中每個剪枝層對精度下降的敏感度確定剪枝比率。
結構化剪枝可表示為如下形式:
其中:L是網(wǎng)絡損失函數(shù);D是預測值和真實值的差;W是卷積核的權重參數(shù);λ是平衡剪枝比率和損失的系數(shù)。剪枝的目標為在減少卷積核數(shù)目的前提下,盡量使損失函數(shù)最小化。本文采用結構化剪枝,剪去重要性低的卷積核,并通過fine-tuning 得到具有較高網(wǎng)絡精度的精簡模型。YOLO 網(wǎng)絡剪枝流程如圖1 所示。
圖1 YOLO 網(wǎng)絡剪枝流程Fig.1 Procedure of YOLO network pruning
YOLOv3[18]采用darknet-53 的backbone,同時借鑒ResNet[19]的殘差結構,采 用5 個殘差單元(共53 個卷積層)進行5 次降采樣。在輸入到y(tǒng)olo 層之前,為避免深層特征提取的信息不足以判斷類別,采用concat 的方式進行特征疊加,提高識別精度。由于殘差結構連接了不同層,如果剪除殘差結構中某一層的卷積核,在進行剪枝時要維持輸入輸出的維度一致,需要對與其連接的所有層進行對應個數(shù)的卷積核剪除。為避免這一問題,在對YOLOv3 進行剪枝時,僅對殘差塊中間的卷積層(共42 個卷積層)進行卷積核篩選。YOLOv3 殘差結構如圖2所示。
圖2 YOLOv3 殘差結構Fig.2 Residual structure in YOLOv3
YOLOv3-tiny 采用簡單的直筒式結構,為達到更快的檢測速度,剪除了一些特征層和殘差層,只采用2 個yolo 層檢測不同尺度。YOLOv3-tiny 網(wǎng)絡共23 層,其中可剪枝的卷積層共10 個,其余的是pooling 層和yolo 層前的卷積層。
1.2.1 冗余層稀疏
根據(jù)文獻[20]研究,近些年來被提出的一些參數(shù)重要性評價方法有很強的相似性,依據(jù)的參數(shù)都近似符合類似高斯分布。如果按照這些準則進行剪枝,可以得到近似的卷積核重要性排序,但是當某一卷積層存在過多的卷積核時,網(wǎng)絡訓練會導致卷積層形成特殊的空間幾何結構,參數(shù)重要性評價方法不能有效區(qū)分卷積核重要性。YOLOv3 網(wǎng)絡中的卷積核個數(shù)相差較大,可剪枝層中最少的層有32 個卷積核,最多的層有1 024 個卷積核。YOLOv3-Tiny 網(wǎng)絡中最少的層只有16 個卷積核。面對卷積核個數(shù)差異巨大的剪枝層,通過稀疏縮放因子方法可以解決上述問題。BN 層[21]的作用是使每一層的激活輸入值在訓練時保持相同分布,避免內(nèi)部協(xié)變量偏移問題,使得激活輸入值始終處于敏感區(qū),遠離導數(shù)飽和區(qū),解決了反向傳播的梯度消失問題。
卷積層對輸入特征圖的處理如下:
其中:u是輸入值;B是偏置。
對x進行正則化,使其符合標準正態(tài)分布:
其中:μζ和σζ代表輸入x的小批次的均值 和方差;ε是一個極小值。符合標準正態(tài)分布,使用式(4)保證非線性,而sscale和sshift是網(wǎng)絡中的可學習參數(shù),根據(jù)不同的實例將標準正態(tài)分布進行尺度變換和平移:
稀疏縮放因子方法針對的是網(wǎng)絡中BN 層的sscale參數(shù),通過對縮放因子L1 正則化將其不斷向0推進,因此與接近0 的縮放因子一一對應的卷積核對網(wǎng)絡性能的貢獻較小,可以將其剪除而不會導致過多的精度損失。
在訓練過程中,對縮放因子進行稀疏性正則化處理:
其中:W是卷積核矩陣;x和y是輸入和標簽;g(γ)=|γ|是稀疏誘導懲罰函數(shù),λ將原始損失和進行稀疏平衡。
通過對卷積核多的層(實驗中選擇512和1 024個卷積核的層)稀疏訓練得到稀疏化模型,此時參數(shù)重要性評價方法可以判斷卷積核重要性,再使用集成剪枝算法進行剪枝。
1.2.2 參數(shù)重要性評價方法
為避免一種參數(shù)重要性評價方法對于YOLO 網(wǎng)絡的卷積核重要性判斷存在片面性,本文采用結合L1 范數(shù)、激活值和梯度3 種參數(shù)重要性評價方法的集成剪枝算法。首先分析上述3 種參數(shù)重要性評價方法的剪枝原理,說明根據(jù)每種評價方法的剪枝合理性,然后比較基于3 種參數(shù)重要性評價方法的剪枝算法和集成剪枝算法的剪枝效果,以展示集成剪枝在YOLO 網(wǎng)絡上的優(yōu)越性。集成剪枝算法同時采用3 種評價方法得到的3 個卷積核排序,三者之間沒有優(yōu)先級關系。
1)L1 范數(shù)。將卷積核的權重的絕對值相加得到L1 范數(shù)‖Wi,j‖1,然后將所有卷積核的L1 范數(shù)進行排序,由于在網(wǎng)絡訓練過程中不重要的神經(jīng)元在優(yōu)化時權重會逐漸趨近于0,因此權重的絕對值較小的卷積核對于最終結果的影響是相應較小的,可在剪枝過程中對其進行剪除。
2)激活值。在網(wǎng)絡訓練過程中,為能夠分辨不同特征的重要性,會盡可能保留對于判定類別有重要影響的特征,其他特征則被視為噪聲盡量剪除。這一行為體現(xiàn)在卷積后激活得到的特征圖上,重要的特征對應的是高響應值,其他特征對應的是低響應值,因此根據(jù)激活值大小對卷積神經(jīng)網(wǎng)絡進行剪枝。
3)梯度。卷積神經(jīng)網(wǎng)絡通過反向傳播進行參數(shù)優(yōu)化,在訓練過程中根據(jù)式(6)更新參數(shù)。SUN 等[22]提出的meProp 方法僅更新梯度最大的k個神經(jīng)元,由于一些梯度為0 的神經(jīng)元會加速反向傳播,梯度大小與神經(jīng)元的重要性是相關的,因此僅保留梯度大的卷積核。
圖3 是YOLOv3 網(wǎng)絡預訓練后第41 層和稀疏訓練后第76 層的3 種參數(shù)的分布情況,選用這兩層是因為它們的參數(shù)分布在稀疏前后更具代表性。L1范數(shù)、激活值和梯度在稀疏前都是類似正態(tài)分布,稀疏后的參數(shù)中心較為靠近0。稀疏前的參數(shù)差異是明顯存在的,可以根據(jù)分布將正態(tài)分布中心前的一部分卷積核剪除,因為這些卷積核的3 種參數(shù)值都較小,而稀疏后的參數(shù)差異更明顯,可以將靠近0 的參數(shù)代表的卷積核剪除。
圖3 3 種參數(shù)稀疏前后的分布情況Fig.3 Distribution of three parameters before and after sparse
通過比較集成剪枝算法和基于L1 范數(shù)重要性評價方法的剪枝算法(簡稱為基于L1 范數(shù)的剪枝算法)、基于激活值重要性評價方法的剪枝算法(簡稱為基于激活值的剪枝算法)、基于梯度重要性評價方法的剪枝算法(簡稱為基于梯度的剪枝算法)的剪枝效果,驗證集成剪枝算法的優(yōu)越性。選擇YOLOv3-tiny 網(wǎng)絡進行實驗,對網(wǎng)絡每一剪枝層的卷積核按照上述4 種重要性評價方法排序后剪枝50%,得到同等結構的不同剪枝策略下的精簡模型,并且各自微調100 代后得到100 組微調的平均精度均值(mean Average Precision,mAP)數(shù)據(jù),擬合后的曲線如圖4 所示??梢钥闯?,利用基于3 種單一參數(shù)重要性評價方法的剪枝算法得到的精簡模型在訓練時的曲線比較接近,說明它們的剪枝效果十分接近,而集合剪枝算法得到的曲線在訓練5 代以后一直處于前3 種算法訓練曲線的上方,表明集成剪枝算法的剪枝效果優(yōu)于基于單一重要性評價方法的剪枝算法。
圖4 4 種剪枝算法的剪枝效果比較Fig.4 Comparison of pruning effect of four pruning algorithms
4 種集成剪枝算法的檢測精度如表1 所示。
表1 4 種剪枝算法的檢測精度比較Table 1 Comparison of detection accuracy of four pruning algorithms
為加快訓練速度,在訓練過程中采用的置信度閾值為0.1,以減少檢測框的數(shù)量。在測試訓練的最后一代時采用的置信度閾值為0.001,因此mAP 在最后一代會有一個向上的跳變(在圖4 中采用的是前99 代的數(shù)據(jù)擬合曲線,未體現(xiàn)出該跳變),最終集成剪枝算法得到的模型檢測精度最高。
1.2.3 集成剪枝的參數(shù)重要性評價方法
每種參數(shù)重要性評價方法都考慮每層的所有卷積核的不同參數(shù),如果要根據(jù)某一參數(shù)對卷積核做篩選,需要計算每個卷積核對應參數(shù)的值,然后將同一層卷積核的該參數(shù)的對應值做排序。為使網(wǎng)絡精度損失最小,需要剪除排序靠后的部分卷積核,即不重要的卷積核。
在同一層中,不同卷積核對該層在網(wǎng)絡整體性能中的貢獻是不同的,不同的參數(shù)重要性評價方法對同一卷積核在該層的排序也是不同的,因此不同的參數(shù)重要性評價方法剪枝后得到的精簡模型有所差別。在理想情況下,為能夠使不同的參數(shù)重要性評價方法相結合,將其寫成一個數(shù)學表達式的形式,但是本文采用的L1 范數(shù)、梯度和激活值3 種參數(shù)之間的數(shù)值差可能有好幾個數(shù)量級,而且在數(shù)值空間上的分布也不一致,因此單純采用相加、相乘等方式得到的排序剪枝的效果可能還不如單一參數(shù)重要性評價方法。
由于每種參數(shù)重要性評價方法都能夠得到每一層卷積核的重要性排序,因此將該排序當作新的評價參數(shù),此時每一個剪枝層都有3 組排序,把3 組排序相加即可得到一組新的卷積核重要性排序。這組新的排序集成了3 種方法對每一個卷積核的重要性判斷,相比單一方法得到的判斷更全面,可以得到更接近最優(yōu)解的卷積核保留集合,減少了單一參數(shù)重要性評價方法的片面性。圖4 的實驗結果也證實了集成剪枝算法得到的精簡模型微調后的檢測精度優(yōu)于基于單一參數(shù)重要性評價方法的剪枝算法。
假設對第L層(共m個卷積核)進行剪枝,卷積核權重集合為(圖5 中省略了卷積層參數(shù)l 和上標0,其中0 表示卷積核原始權重)。從訓練集中隨機選擇256 張圖片得到網(wǎng)絡可剪枝層的每個卷積核的平均L1 范數(shù)、該層的每個卷積核的平均激活值以及反向傳播時的平均梯度(取絕對值的平均值),對該層所有卷積核按照3 種方法對應的值分別進行從大到小的排序,得到每一個卷積核在序列中的對應位置,然后將每個卷積核的3個序號對應相加作為最終的重要性得分,據(jù)此去除得分低的m-n個卷積核得到新的權重集合,n 圖5 集成剪枝的卷積核選擇過程Fig.5 Convolution kernel selection process of integrated pruning 在剪枝實驗時需要對多個層進行剪枝,上述方法針對的是單層的卷積核排序,因此需要根據(jù)總體剪枝比率確定每一層的剪枝比率,在這種情況下需要考慮多層剪枝時的精度損失均衡問題,以避免對某一層剪枝比率過大出現(xiàn)短板效應,導致精度損失嚴重,finetuning 后精度恢復達不到理想效果。為解決這一問題,在所有層的重要性排序完成后,首先用驗證集測試網(wǎng)絡原始精度,然后從第一個待剪枝的層開始,剪除重要性較低的60%的卷積核(將BN的縮放因子設置為0),對驗證集測試得到新的精度,根據(jù)得到精度差值,再除以該層60%的卷積核個數(shù)近似得到這些卷積核對網(wǎng)絡精度造成的平均損失對其他待剪枝層執(zhí)行相同的操作得到每層對網(wǎng)絡精度造成的平均損失的集合,將該層每個卷積核的平均損失精度稱為該層的剪枝敏感度。 首先根據(jù)平均損失集合和需要剪除的卷積核總數(shù),求解式(7)得到每一層剪除的卷積核個數(shù),其中式(7)的矩陣表示為式(8);然后執(zhí)行剪枝操作,按照得到的剪枝數(shù)量逐層進行剪枝;最后通過fine-tuning恢復網(wǎng)絡精度。 在式(7)中:k代表每一剪枝層通過計算得到的剪除的卷積核個數(shù),下標代表的是剪枝層的序號,共p個待剪枝層;N是所有剪枝層的卷積核總數(shù),K是本次剪枝期望的總體剪枝比率;第1 個等式代表各剪枝層所有剪除的卷積核總數(shù),與所有剪枝層的卷積核總數(shù)乘以期望的整體剪枝比率是相等的;第2 個等式用來確定不同剪枝層的剪除卷積核個數(shù)間的比率。為避免出現(xiàn)短板效應,假設每層在剪除一部分卷積核后剩下的卷積核對網(wǎng)絡性能的貢獻是相當?shù)?,不會出現(xiàn)明顯差異,否則會導致精度微調后恢復不到理想精度。由于不同剪枝層中的每個卷積核對性能的貢獻不同,逐次單獨測算一個卷積核對性能的貢獻又不現(xiàn)實,因此在實際剪枝時采用測試每一層剪枝排序靠后的60%的卷積核,經(jīng)過計算得到,該平均損失精度可以當作該層60%的卷積核的精度貢獻。為避免出現(xiàn)短板效應,需要使每一層剪枝時剪除的卷積核對網(wǎng)絡造成的精度損失是相等的,也就是剩下的卷積核對檢測精度的貢獻也是相等的,如圖6 所示。式(8)將式(7)寫成了矩陣形式,計算得到每一個剪枝層應剪除的卷積核個數(shù)。 圖6 基于敏感度的剪枝比率確定Fig.6 Determination of pruning ratio based on sensitivity 在實際操作過程中,每次剪除總數(shù)50%的卷積核,確保檢測得到的敏感度在適用范圍內(nèi)。為避免出現(xiàn)求得的解過大或者過小,對每一層設置最高剪枝閾值為60%、最低剪枝閾值為25%,經(jīng)過多次剪枝得到精簡模型。 通過稀疏卷積核多的層后進行集成剪枝,可避免集成剪枝算法無法處理冗余多的層及區(qū)分卷積核重要性的問題,使剪枝泛化能力更好,同時有利于獲得均勻模型和更高的剪枝精度?;诿舾卸鹊腨OLO 網(wǎng)絡集成剪枝步驟具體如下: 輸入VOC 數(shù)據(jù)集,YOLO 原始網(wǎng)絡的cfg 配置文件和初始化權重,期望剪枝比率K% 輸出剪枝的YOLO模型cfg配置文件及對應權重 1)預訓練YOLO 模型。 2)確定剪枝層,對YOLO 模型冗余多的剪枝層使用稀疏縮放因子方法進行稀疏訓練。 3)使用集成剪枝算法,基于3 種參數(shù)重要性評估方法對每一剪枝層的卷積核進行重要性排序,將每個卷積核的3 種排序相加得到卷積核的重要性得分。 4)在驗證集上測試得到原始精度,將每一個剪枝層的重要性低的K%的卷積核剪除,在驗證集上測試得到新精度,原始精度減去新精度,除以剪掉的卷積核個數(shù)得到剪除的每個卷積核對精度的貢獻。 5)求解式(7)得到每一剪枝層應剪除的卷積核個數(shù)。 6)對網(wǎng)絡模型按式(5)中的每一剪枝層應減卷積核個數(shù)進行逐層剪枝,得到精簡模型。 7)對精簡模型進行fine-tuning 操作恢復模型精度。 8)如果卷積核剪枝數(shù)目達不到期望值,則返回步驟4。 實驗對YOLOv3 網(wǎng)絡使用VOC 數(shù)據(jù)集剪枝,但僅對從VOC2007 和VOC2012 的train+val 數(shù)據(jù)中提取出的行人類別進行網(wǎng)絡剪枝,從模型大小、mAP、推理時間、參數(shù)量、卷積核個數(shù)和計算量6 個方面,對原始YOLOv3 模型與本文模型和文獻[17]模型進行對比。 實驗平臺CPU 為i5-9600KF,顯卡為RTX2060 Super。實驗利用VOC2007 和VOC2012 的train+val數(shù)據(jù)進行訓練,采用VOC2007 的test 數(shù)據(jù)進行測試。原始YOLOv3 模型與兩種輕量化模型性能比較結果如表2 所示,其中計算量為每秒10 億次浮點運算。 表2 YOLOv3 與兩種輕量化模型性能比較Table 2 Performance comparison among YOLOv3 and two lightweight models 由表2 可以看出,文獻[17]模型和本文模型相比原始YOLOv3 模型,在mAP 上都有一定的下降,原因在于檢測網(wǎng)絡相較分類網(wǎng)絡不單需要識別,還要回歸以確定目標位置,在針對20 類目標時需要較高的網(wǎng)絡性能,剪枝在達到一定比率的閾值后精度會開始快速下降。兩種輕量化模型的模型大小、推理時間、參數(shù)量、剪枝層卷積核個數(shù)、剪枝層計算量分別縮減為原始YOLOv3 模型的19.7%和19.6%、60%和59%、19.7%和19.5%、15%和17.2%、12.5%和8.6%,由此可得本文模型的參數(shù)量縮減了80.5%,并且檢測精度相對文獻[17]模型提升了0.2%??梢姡褂没诿舾卸鹊募杉糁λ惴ǖ玫降木W(wǎng)絡模型相比文獻[17]基于網(wǎng)絡輕量化方法的網(wǎng)絡模型參數(shù)量、模型規(guī)模和計算量更小,推理速度更快且mAP 更高。 表3 比較了原始YOLOv3 模型與兩種輕量化模型對于20 個類別的檢測精度,原始YOLOv3 模型的檢測精度在所有類別中均是最高的,本文模型在各類別的檢測精度上相比文獻[17]模型更具優(yōu)勢。 表3 YOLOv3 與兩種輕量化模型精度比較Table 3 Accuracy comparison among YOLOv3 and two lightweight models 實驗環(huán)境設置同YOLOv3,由于YOLOv3-tiny網(wǎng)絡層數(shù)較少(23 層),因此網(wǎng)絡能力有限,實驗僅針對從VOC2007 和VOC2012 的train+val 數(shù)據(jù)中提取出的行人類別進行網(wǎng)絡剪枝,利用VOC2007 的test數(shù)據(jù)進行測試,并在模型大小、mAP、推理時間等方面,對YOLOv3-tiny 原始模型與本文模型和文獻[17]模型進行比較,如表4 所示。 由于YOLOv3-tiny 網(wǎng)絡較淺,GPU 的算力完全能夠滿足網(wǎng)絡需求,而算力較弱的NVIDIA Jetson TX2 開發(fā)平臺也能較好地展現(xiàn)剪枝后模型的速度提升情況。由表4 可以看出,文獻[17]模型和本文模型在精度輕微下降的情況下,得到的輕量化模型大小、前向推理時間、參數(shù)量、剪枝層卷積核個數(shù)、剪枝層計算量分別縮減為原始YOLOv3-tiny 模型的8.6%和7.5%、41.2%和28%、8.6%和7.4%、32.7%和21.9%、28.75%和13.47%,由此可得本文模型的參數(shù)量縮減了92.6%,并且檢測速度相比文獻[17]模型更快,檢測精度提升了0.2%。 表4 YOLOv3-tiny 與兩種輕量化模型性能比較Table 4 Performance comparison among YOLOv3-tiny and two lightweight models 表5 給出了原始YOLOv3-tiny 模型與兩種輕量化模型的各卷積層卷積核個數(shù),可以看出相比文獻[17]網(wǎng)絡輕量化方法,本文集成剪枝算法對各剪枝層的卷積核都有相當程度的剪除,說明對于網(wǎng)絡各剪枝層的能力貢獻判斷更加全面,得出的網(wǎng)絡卷積核分布更加均勻。文獻[17]網(wǎng)絡輕量化方法由于沒有在訓練中控制各剪枝層的稀疏比例,可能導致有些層稀疏程度較大,有些層稀疏程度較小,因此剪枝后各層之間的卷積核個數(shù)差異仍然較大,而卷積核多的層會對網(wǎng)絡有較大的貢獻,但是在卷積核總數(shù)一定時,可能會加重卷積核較少層的負擔,導致精度下降嚴重。 表5 YOLOv3-tiny 與兩種輕量化模型結構比較Table 5 Structure comparison among YOLOv3-tiny and two lightweight models 為進一步說明本文基于敏感度的集成剪枝算法對各剪枝層剪枝比率的選擇合理性,對直筒式架構的YOLOv3-tiny 網(wǎng)絡進行網(wǎng)絡性能貢獻實驗。YOLOv3-tiny 共10 個剪枝層,對每一個剪枝層利用集成剪枝算法剪去排序靠后的50%的卷積核,然后微調網(wǎng)絡100 代,得到最終的單層剪枝的精簡模型并測試其精度,比較剪枝前后的精度差。共做10 組實驗,將得到的10 個精度差作為該層對網(wǎng)絡整體性能貢獻的測度值,精度差越大說明該層對網(wǎng)絡性能的貢獻越大,反之越小。 在表6 中對10 個剪枝層分別做剪枝50%的實驗,微調精度是剪枝后微調網(wǎng)絡100 代得到的模型的檢測精度,使用原始精度剪去微調精度得到每一層剪枝50%后的損失精度。將每層的損失精度和同層的剪枝比率(本文基于敏感度的集成剪枝算法得到的最終剪枝模型的剪枝比率)進行分析,發(fā)現(xiàn)剪枝比率與損失精度呈負相關關系。因為前面的卷積層用于提取物體的邊緣特征,且卷積核個數(shù)較少,所以每個卷積核承擔的性能壓力較大,后面的卷積層處理的是高維度信息,卷積核個數(shù)較多,相比較而言每個卷積核承擔的性能壓力較小。 表6 YOLOv3-tiny 網(wǎng)絡性能貢獻和各層剪枝比率Table 6 The contribution of each layer to network performance and the pruning ratio of YOLOv3-tiny 剪枝比率與損失精度的關系如圖7 所示,其中,圓形點表示剪枝比率與損失精度呈負相關關系,方形點表示網(wǎng)絡最后一個剪枝層的剪枝比率,也就是第二個yolo 層前的第二個卷積層,該剪枝層前面一層將淺層和深層信息拼接后輸入,進行特征融合后輸入到這一層,在網(wǎng)絡剪枝時對于融合特征的卷積核的剪枝比率較大。 圖7 剪枝比率與損失精度的關系Fig.7 The relationship between pruning ratio and loss accuracy 本文基于敏感度的集成剪枝算法在YOLO 系列網(wǎng)絡的剪枝中,展現(xiàn)出優(yōu)于基于單一參數(shù)重要性評估方法和文獻[17]網(wǎng)絡輕量化方法的剪枝算法的性能,并且在實際操作中時間成本并沒有增加。為得到所需的L1 范數(shù)、激活值、梯度這3 種參數(shù),對256 張圖片進行單張輸入(batch size 設置為1),網(wǎng)絡訓練1 次即可獲取梯度和激活值的平均值,在加載權重后得到卷積核的L1 范數(shù),3 種參數(shù)的獲取耗時較短。在獲得每層的平均梯度損失后,需要對網(wǎng)絡的每一層偽剪枝后(某些核BN 層縮放因子置0)使用測試集測試獲得新的精度,這一操作相對耗時。但是,本文基于敏感度的集成剪枝算法只需在第一次剪枝之前做稀疏化訓練,解除特殊空間結構的限制,后面再重復剪枝、微調步驟時無需提前稀疏化訓練,相比文獻[17]網(wǎng)絡輕量化方法的剪枝算法每次剪枝前都要稀疏化訓練節(jié)省了很多時間。 為在算力有限的設備上部署YOLO 檢測網(wǎng)絡,本文提出基于敏感度的集成剪枝算法,通過結合3 種參數(shù)重要性評價方法得到每一層的卷積核重要性的最優(yōu)排序,并使用稀疏縮放因子方式將冗余多的層稀疏化后進行網(wǎng)絡剪枝。實驗結果表明,該算法相比基于單一參數(shù)重要性評估方法和網(wǎng)絡輕量化方法的剪枝算法有效提升了剪枝效果,解決了基于單一參數(shù)重要性評價方法的剪枝算法的片面性和泛化能力差問題。后續(xù)將針對檢測類別較多或者特征較復雜的數(shù)據(jù)集,結合TensorRT 對稱飽和量化等方法進一步加速網(wǎng)絡前向推理。1.3 基于敏感度的剪枝比率確定
1.4 基于敏感度的YOLO 網(wǎng)絡集成剪枝步驟
2 實驗與結果分析
2.1 YOLOv3 實驗效果對比
2.2 YOLOv3-tiny 實驗效果對比
2.3 網(wǎng)絡剪枝層對網(wǎng)絡性能的貢獻分析
2.4 YOLO 網(wǎng)絡集成剪枝算法耗時分析
3 結束語