蒲 亮,石 毅
(華中光電技術(shù)研究所-武漢光電國家研究中心,武漢 430223)
隨著現(xiàn)代戰(zhàn)爭對無人化和智能化需求的增加,基于深度神經(jīng)網(wǎng)絡(luò)的人工智能技術(shù)在目標(biāo)檢測和目標(biāo)跟蹤等領(lǐng)域得到了廣泛的應(yīng)用[1-2]。但是,隨著深度學(xué)習(xí)模型越來越復(fù)雜,參數(shù)和層數(shù)越來越多,巨大的存儲成本和計(jì)算成本嚴(yán)重阻礙了深度學(xué)習(xí)模型在嵌入式設(shè)備上的部署[3-4]。因而,對網(wǎng)絡(luò)模型的壓縮裁剪是完成卷積神經(jīng)網(wǎng)絡(luò)模型部署的重要步驟之一[5-6]。
模型壓縮剪枝一般分為結(jié)構(gòu)化剪枝和非結(jié)構(gòu)化剪枝2 種[7-9]。在結(jié)構(gòu)化剪枝中,通過對BN 層的縮放因子施加L1 范數(shù)正則化訓(xùn)練后,使通道對應(yīng)的縮放因子產(chǎn)生稀疏化,裁剪符合條件的通道來達(dá)到模型壓縮,取得一定成效[10-11]。為了進(jìn)一步提高模型在嵌入式設(shè)備上的運(yùn)行速度,需要開展更加深入的神經(jīng)網(wǎng)絡(luò)模型壓縮裁剪技術(shù)的研究。本文通過新的優(yōu)化策略-加速近端梯度(APG)、輕量級網(wǎng)絡(luò)設(shè)計(jì)、非結(jié)構(gòu)化剪枝和神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索(NAS)等手段相結(jié)合,實(shí)現(xiàn)對目標(biāo)分類和目標(biāo)檢測等常見卷積神經(jīng)網(wǎng)絡(luò)模型的壓縮剪枝,并將壓縮剪枝后模型的推斷過程在嵌入式架構(gòu)中實(shí)現(xiàn),為深度學(xué)習(xí)技術(shù)在邊緣端設(shè)備平臺上的實(shí)現(xiàn)奠定了基礎(chǔ)。
本文采用神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索(NAS)技術(shù),基于數(shù)據(jù)和任務(wù)驅(qū)動的輕量級網(wǎng)絡(luò)設(shè)計(jì),首先訓(xùn)練出一個(gè)精度不低但相比常規(guī)CNN 參數(shù)量和計(jì)算量都較小的模型。將NAS 直接應(yīng)用于具有可變化channel數(shù)和層尺寸的網(wǎng)絡(luò),通過最小化剪枝后網(wǎng)絡(luò)的損失來學(xué)習(xí)channel 的數(shù)量,如圖1所示。這種剪枝方法包括3 個(gè)階段:
圖1 傳統(tǒng)剪枝范式和基于TAS 的剪枝范式Fig.1 Traditional pruning paradigm and TAS-based pruning paradigm
(1)用標(biāo)準(zhǔn)分類訓(xùn)練程序訓(xùn)練未剪枝的大型網(wǎng)絡(luò);
(2)通過可變換結(jié)構(gòu)搜索(transformable architecture search,TAS)搜索小型網(wǎng)絡(luò)的深度和寬度,TAS 的目標(biāo)是尋找一個(gè)網(wǎng)絡(luò)的最佳規(guī)模;
(3)利用簡單的知識蒸餾(knowledge distillation)方法,將未剪枝網(wǎng)絡(luò)中的信息遷移到搜索到的小型網(wǎng)絡(luò)中。
在完成NAS 剪枝與輕量化模型設(shè)計(jì)后,以該模型為baseline,為網(wǎng)絡(luò)中每一個(gè)group/block/channel等level(層級)的結(jié)構(gòu)都賦予一個(gè)對應(yīng)衡量其重要性的參數(shù)因子(或?yàn)榉奖阒苯硬捎肂N 層中的縮放因子),并對這些參數(shù)因子施加L1 范數(shù)正則化,同時(shí)采用加速近端梯度(APG)優(yōu)化算法,進(jìn)行稀疏化訓(xùn)練。即是在網(wǎng)絡(luò)的每個(gè)通道輸出上、每個(gè)殘差結(jié)構(gòu)卷積分支上以及一些group 卷積的非identity group 的輸出上乘以一個(gè)縮放因子。
由于L1 范數(shù)不可微,本文采用更好的針對L1范數(shù)正則化的近端梯度優(yōu)化方法,該優(yōu)化算法的解形式是軟閾值函數(shù)。根據(jù)推導(dǎo)過程發(fā)現(xiàn),要想使用該方法,要進(jìn)行兩次網(wǎng)絡(luò)前傳,代價(jià)太大。因此,可采用APG(accelerated proximal gradient)算法。其實(shí),APG 算法只不過比牛頓動量優(yōu)化算法多出一個(gè)投影函數(shù)(這個(gè)投影函數(shù)就是軟閾值函數(shù)),只需要在牛頓動量算法的優(yōu)化器中對縮放因子施加軟閾值函數(shù)即可,軟閾值函數(shù)的兩個(gè)參數(shù)是學(xué)習(xí)率和對應(yīng)縮放因子值。
目標(biāo)函數(shù)為
使用APG 算法更新λ,求解過程為
其中,g(λ)表示為
作進(jìn)一步的變換:
BN(batch normalization)層的計(jì)算公式為
BN 層的作用是解決訓(xùn)練過程中的內(nèi)部協(xié)變偏移。根據(jù)式(12),該操作會將卷積的輸出值減去一個(gè)均值再除以一個(gè)標(biāo)準(zhǔn)差,后面再做一個(gè)仿射變換,而且縮放因子γ 和偏移β 都是可學(xué)習(xí)參數(shù),這樣既能防止卷積的輸出值變化過大(導(dǎo)致不易收斂),同時(shí)又不會將學(xué)到的信息完全去除掉。
在CNN 中,卷積層的每一個(gè)通道對應(yīng)著一個(gè)縮放因子γ 和偏移β,如果縮放因子γ 很小的話,那么這個(gè)通道可以略去,對神經(jīng)網(wǎng)絡(luò)的最終輸出結(jié)果影響不會很大。就是說,γ 可以衡量每個(gè)通道的重要性,如果對這個(gè)γ 進(jìn)行優(yōu)化更新時(shí)采用L1 正則化,可以讓其產(chǎn)生稀疏解。
總的損失函數(shù)如下,第二項(xiàng)即為正則化項(xiàng):
L1 范數(shù)和L2 范數(shù)正則化。在模型的訓(xùn)練中,為了防止過擬合,一般都會添加正則化項(xiàng)。由于L2 范數(shù)是可微的,所以大多數(shù)模型訓(xùn)練都是采用L2 范數(shù)正則化,能得到比較平滑的解。
如圖2所示,基線模型訓(xùn)練好之后,會產(chǎn)生一些接近0 的縮放因子,這時(shí)就可以把與這些接近0的縮放因子對應(yīng)的通道直接去掉,同時(shí)與該通道對應(yīng)和相連的卷積核都去掉,就得到了剪枝后的模型。
圖2 基于BN 層的剪枝范式Fig.2 BN-based pruning paradigm
本文系統(tǒng)由訓(xùn)練數(shù)據(jù)庫、稀疏訓(xùn)練模塊和剪枝模塊組成,其中,訓(xùn)練數(shù)據(jù)庫存儲于上位機(jī)可訪問的存儲器上,稀疏訓(xùn)練模塊和剪枝模塊運(yùn)行在多GPU并行計(jì)算服務(wù)器上,目標(biāo)檢測模型運(yùn)行在FPGA 等邊緣端硬件上。如圖3所示。
圖3 系統(tǒng)組成Fig.3 Components of the experimental system
本文神經(jīng)網(wǎng)絡(luò)模型的稀疏化訓(xùn)練和模型的壓縮剪枝流程如圖4所示,主要可以分5 步:
圖4 算法流程Fig.4 Algorithm flow chart of the proposed method
(1)采用神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索(NAS)技術(shù)、基于數(shù)據(jù)和任務(wù)驅(qū)動的輕量級網(wǎng)絡(luò)設(shè)計(jì),首先訓(xùn)練出一個(gè)精度不低但相比常規(guī)CNN 參數(shù)量和計(jì)算量都較小的模型;
(2)以步驟(1)中的模型為baseline,為網(wǎng)絡(luò)中每一個(gè)group/block/channel 等level(層級)的結(jié)構(gòu)都賦予一個(gè)對應(yīng)衡量其重要性的參數(shù)因子(或?yàn)榉奖阒苯硬捎肂N 層中的縮放因子),并對這些參數(shù)因子施加L1 范數(shù)正則化,同時(shí)采用加速近端梯度(APG)優(yōu)化算法,進(jìn)行稀疏化訓(xùn)練;
(3)對于稀疏化訓(xùn)練完的模型,將模型中那些接近0 的參數(shù)因子對應(yīng)的channel/group/block 進(jìn)行裁剪;
(4)再微調(diào)剪枝后的模型,使其恢復(fù)性能;
(5)模型微調(diào)后如果能回到baseline 的精度或下降在5%以內(nèi),則返回到步驟(2),進(jìn)行下一輪模型壓縮剪枝,否則結(jié)束該程序。
本文目標(biāo)分類數(shù)據(jù)集有cifar、ImageNet,目標(biāo)檢測數(shù)據(jù)集有voc、coco 等。ImageNet 有超過1000 萬張圖片,一般使用經(jīng)過“修剪”后的1000 個(gè)非重疊類的列表。目標(biāo)分類常用Top-1 Accuracy 和Top-5 Accuracy 來評價(jià)模型的好壞。PASCAL VOC2007 和2012 數(shù)據(jù)集總共分4 個(gè)大類,總共20 個(gè)小類。目標(biāo)檢測模型的優(yōu)劣則一般使用mAP(平均精確率均值)這個(gè)指標(biāo)來進(jìn)行評價(jià)。
(1)上位機(jī)平臺
上位機(jī)網(wǎng)絡(luò)模型的訓(xùn)練需要利用大量數(shù)據(jù)樣本進(jìn)行迭代運(yùn)算,計(jì)算量巨大,故在配備了10 個(gè)計(jì)算GPU 的并行計(jì)算工作站上進(jìn)行,其配置如下:
CPU:2×Intel Xeon E5-2683 V3 2.0G;
GPU:10×NVIDIA GeForce1080ti;
內(nèi)存:512 G(32 G×16)DDR4 2400 RegECC(最大支持1.5 T);
硬盤:8×2 T SSD;
顯示器:27.9 英寸4 K;
網(wǎng)路:Intel I350 雙千兆網(wǎng)口+1×千兆管理網(wǎng)絡(luò)接口;
電源:2000 W 80PLUS 2+2 高效冗余電源。
(2)嵌入式平臺
神經(jīng)網(wǎng)絡(luò)模型的代碼在嵌入式平臺上運(yùn)行,主要包括:
①智能圖像處理SOC 平臺ARM 部件
Cortex-A53 4 核處理器;
典型工作頻率1.5 GHz;
A53 每個(gè)核中都包含32 KB 的指令cache 和32 KB 的數(shù)據(jù)cache,L2Cache 大小均為512 KB。
②智能SOC 硬件平臺
FPGA SOC:Xilinx XCZU9EG;
內(nèi)存:4 G 64 bit DDR4;
閃存:32 G。
在上位機(jī)上,輸入已有目標(biāo)檢測神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)文件和訓(xùn)練數(shù)據(jù)集,進(jìn)行稀疏訓(xùn)練和模型剪枝,運(yùn)行結(jié)果如圖5所示。對比壓縮剪枝后和壓縮剪枝前的模型準(zhǔn)確率、參數(shù)量和計(jì)算量壓縮率,壓縮剪枝前的模型準(zhǔn)確率為80.49%,模型參數(shù)文件大小為43.7 MB,計(jì)算量BFLOPS 為6.915。壓縮剪枝后模型準(zhǔn)確率為80.55%,模型參數(shù)文件大小為3.9 MB,計(jì)算量BFLOPS 為1.105。壓縮剪枝后模型準(zhǔn)確率提高0.06%,參數(shù)量下降91.1%,計(jì)算量下降84.0%。通過本文提出的壓縮剪枝算法,在參數(shù)量和計(jì)算量大幅下降的同時(shí)準(zhǔn)確率與壓縮前模型保持相同水平。
圖5 基于嵌入式硬件平臺剪枝后的目標(biāo)檢測模型運(yùn)行結(jié)果Fig.5 Experimental results of the target detection model with our proposed method,which was based on embedded hardware platform
進(jìn)一步,將壓縮剪枝后的模型部署在嵌入式硬件平臺中,用壓縮后的模型進(jìn)行前向推理。統(tǒng)計(jì)模型運(yùn)行時(shí)間,發(fā)現(xiàn)除去圖像預(yù)處理時(shí)間,單幀圖像處理時(shí)間(CNN 主干網(wǎng)絡(luò)處理時(shí)間與網(wǎng)絡(luò)后處理時(shí)間之和)最大值小于40 ms,處理速度達(dá)到25 幀以上。
本文通過研究基于BN 層的結(jié)構(gòu)化剪枝、基于加速近端梯度(APG)優(yōu)化的一般化結(jié)構(gòu)化剪枝、基于數(shù)據(jù)和任務(wù)驅(qū)動的輕量級網(wǎng)絡(luò)設(shè)計(jì)以及基于神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索(NAS)剪枝等關(guān)鍵算法技術(shù),完成了對目標(biāo)分類和目標(biāo)檢測等常見卷積神經(jīng)網(wǎng)絡(luò)模型的壓縮剪枝,實(shí)驗(yàn)表明壓縮剪枝后模型準(zhǔn)確率不變,參數(shù)量下降91.1%,計(jì)算量下降84.0%。最后將壓縮剪枝后模型的推斷過程在嵌入式架構(gòu)中實(shí)現(xiàn),為深度學(xué)習(xí)在邊緣端設(shè)備平臺上的實(shí)現(xiàn)奠定了基礎(chǔ)。