李巖,孟令軍
(中北大學(xué), 電子測(cè)試技術(shù)國防科技重點(diǎn)實(shí)驗(yàn)室, 山西, 太原 030051)
隨著深度神經(jīng)網(wǎng)絡(luò)目標(biāo)檢測(cè)算法的發(fā)展,神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)越來越復(fù)雜,權(quán)重參數(shù)量大幅度增加。當(dāng)網(wǎng)絡(luò)被部署到移動(dòng)端設(shè)備時(shí),龐大的模型導(dǎo)致加載時(shí)間長,參數(shù)占用計(jì)算機(jī)資源較多,對(duì)目標(biāo)預(yù)測(cè)推理較慢,達(dá)不到實(shí)時(shí)性的要求。因此對(duì)模型壓縮和加速的研究有重大意義[1]。對(duì)模型的壓縮研究主要分為2個(gè)方向。
(1) 壓縮已有網(wǎng)絡(luò),如HOWARD A G等[2]在模型構(gòu)建階段選擇緊湊網(wǎng)絡(luò)設(shè)計(jì)。MAO H Z等[3]利用1、2 bit代替來32 bit所表示的權(quán)重位數(shù),犧牲精度降低模型權(quán)重大小。LIN X F等[4]刪除網(wǎng)絡(luò)不重要的權(quán)值,重新微調(diào)整個(gè)網(wǎng)絡(luò)。
(2) 構(gòu)建新的小網(wǎng)絡(luò),如HINTON G等[5]利用復(fù)雜的網(wǎng)絡(luò)模型指導(dǎo)簡單網(wǎng)絡(luò)的訓(xùn)練,得到精度較高的簡單模型結(jié)構(gòu)。
本文采用壓縮已有網(wǎng)絡(luò)的方法,將YOLO v3-SPP[6-7]目標(biāo)檢測(cè)算法應(yīng)用于行人圖像的目標(biāo)檢測(cè)任務(wù)中,為了能夠?qū)⒛P透玫牟渴鸬揭苿?dòng)端設(shè)備,對(duì)網(wǎng)絡(luò)進(jìn)行初始訓(xùn)練,得到預(yù)稀疏模型。將預(yù)稀疏模型進(jìn)行稀疏訓(xùn)練,得到稀疏模型,對(duì)模型冗余的卷積層通道和殘差結(jié)構(gòu)剪枝,減少模型的權(quán)重,降低模型的運(yùn)浮點(diǎn)算次數(shù),提高模型的推理速度,得到一個(gè)輕量化的行人檢測(cè)模型。
如圖1所示,YOLO v3-SPP由卷積層和殘差結(jié)構(gòu)堆疊而成,殘差結(jié)構(gòu)包括卷積層和殘差層[8]。在模型訓(xùn)練階段,將數(shù)據(jù)集中行人圖像送入網(wǎng)絡(luò),經(jīng)過不同大小卷積核的卷積層和殘差結(jié)構(gòu),訓(xùn)練網(wǎng)絡(luò)中參數(shù)權(quán)重,輸出3個(gè)不同尺度的特征圖[9],利用錨框匹配的方法在3個(gè)特征圖對(duì)行人目標(biāo)位置、類別、置信度進(jìn)行預(yù)測(cè),獲取行人目標(biāo)預(yù)測(cè)框與真實(shí)框的交并比,回歸行人目標(biāo)的位置損失和分類損失,調(diào)整神經(jīng)網(wǎng)絡(luò)中卷積層的權(quán)重,經(jīng)過行人數(shù)據(jù)集的多次迭代,得到一個(gè)精度較高的行人檢測(cè)模型[10]。在行人預(yù)測(cè)階段,將待檢測(cè)行人目標(biāo)送入訓(xùn)練好的網(wǎng)絡(luò)權(quán)重,得到3個(gè)不同尺度的特征圖。通過錨框匹配特征圖,得到行人目標(biāo)的預(yù)測(cè)框,過濾置信度低的預(yù)測(cè)框,將置信度最高預(yù)測(cè)框的位置、精度、類別輸出,得到行人目標(biāo)檢測(cè)的結(jié)果[11]。
神經(jīng)網(wǎng)絡(luò)經(jīng)過稀疏性訓(xùn)練,可以為卷積層中每個(gè)通道培訓(xùn)比例因子,描述卷積層通道的重要性。對(duì)YOLO v3-SPP來說,卷積層后的歸一化層可以對(duì)卷積特征進(jìn)行歸一化,提高模型的收斂和泛化能力[12],公式為
圖1 YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)圖
(1)
(2)
當(dāng)f(γ)=|γ|時(shí),表示L1正則化,α表示平衡兩個(gè)損失項(xiàng)的懲罰因子。實(shí)驗(yàn)中使用次梯度方法來優(yōu)化非平滑L1的懲罰項(xiàng)。
稀疏訓(xùn)練通過α給模型添加額外的梯度,大的α一般稀疏較快且精度下降較快,小的α一般稀疏較慢且精度下降緩慢。當(dāng)神經(jīng)網(wǎng)絡(luò)設(shè)置較大的學(xué)習(xí)率,模型梯度下降的較快,可以加快稀疏過程。在模型稀疏后期可以通過設(shè)置小的學(xué)習(xí)率,使模型精度上升。稀疏訓(xùn)練就是平衡精度和稀疏度的關(guān)系,通過稀疏訓(xùn)練我們可以得到卷積層中各個(gè)通道的比例因子γ[14],如圖2所示。
經(jīng)過稀疏訓(xùn)練得到每一個(gè)卷積層通道的γ絕對(duì)值,將γ絕對(duì)值進(jìn)行排序,通過設(shè)置通道剪枝率,得到需要剪枝的通道數(shù)量,剪掉γ絕對(duì)值較低的通道[15],如圖3所示。
同理,我們將所有殘差結(jié)構(gòu)中3×3卷積層后歸一化層γ的絕對(duì)平均值進(jìn)行排序,設(shè)置剪枝數(shù)量,剪掉γ絕對(duì)平均值較低的殘差結(jié)構(gòu)[16],如圖4所示。
圖2 稀疏網(wǎng)絡(luò)
圖3 通道剪枝網(wǎng)絡(luò)
圖4 層剪枝網(wǎng)絡(luò)
模型剪枝的算法流程,如圖5所示。初始網(wǎng)絡(luò)經(jīng)過權(quán)重訓(xùn)練得到訓(xùn)練模型,訓(xùn)練模型經(jīng)過稀疏訓(xùn)練得到各個(gè)卷積層及殘差結(jié)構(gòu)γ分布情況,設(shè)置通道剪枝率和需要剪掉殘差結(jié)構(gòu)的個(gè)數(shù),得到剪枝后的模型,將剪枝模型進(jìn)行微調(diào)訓(xùn)練得到壓縮模型,將不同壓縮率的剪枝模型進(jìn)行對(duì)比分析,得到最優(yōu)剪枝模型[17]。
圖5 模型剪枝算法流程
為了驗(yàn)證剪枝后的模型在行人數(shù)據(jù)集的預(yù)測(cè)效果,全部實(shí)驗(yàn)在顯卡為GTX1080Ti的平臺(tái)上進(jìn)行,該平臺(tái)搭有PyTorch深度學(xué)習(xí)框架、CUDA加速庫(GPU)。
實(shí)驗(yàn)中輸入圖像尺寸為608×608,采用SGD優(yōu)化器調(diào)節(jié)學(xué)習(xí)率?;A(chǔ)和稀疏訓(xùn)練的情況如圖6所示,基礎(chǔ)訓(xùn)練由于加載了初始權(quán)重,模型收斂較快,在中段已經(jīng)出現(xiàn)過擬合現(xiàn)象,經(jīng)過100Epochs迭代,最終得到基礎(chǔ)模型的AP為0.891;稀疏訓(xùn)練加載基礎(chǔ)訓(xùn)練模型權(quán)重,每次反向傳播前,始終以恒定α0.001將L1正則化產(chǎn)生的梯度添加到歸一化層的梯度中,并在epoch為210、290時(shí)降低學(xué)習(xí)率,設(shè)置γ為0.1??梢钥吹皆谀P拖∈璧倪^程中,精度曲線波動(dòng)較大,在學(xué)習(xí)率降低后,梯度下降減緩,模型精度得到了提高,最終經(jīng)過稀疏訓(xùn)練的模型AP為0.866。
圖6 基礎(chǔ)和稀疏訓(xùn)練AP變化曲線
利用TensorBoard可視化工具,我們可以查看歸一化層在基礎(chǔ)和稀疏訓(xùn)練的情況。如圖7所示,在基礎(chǔ)訓(xùn)練的過程中γ分布在1左右,類似正態(tài)分布;在稀疏訓(xùn)練的過程中,隨著稀疏訓(xùn)練次數(shù)的增加,γ分布在0附近,接近0的通道輸出值近似于常量,可以將接近0的通道剪掉。
(a) 基礎(chǔ)模型γ分布
(b) 稀疏模型γ分布
實(shí)驗(yàn)采用卷積層和通道同時(shí)剪枝的方式,將所有歸一化層(不包括殘差結(jié)構(gòu))通道的γ絕對(duì)值進(jìn)行排序,設(shè)置剪枝率剪掉卷積層的通道。同理,對(duì)殘差結(jié)構(gòu)中3×3卷積層后BN層中所有通道γ的絕對(duì)平均值進(jìn)行排序,剪掉平均值較低的殘差結(jié)構(gòu)。
選取0.95、0.93、0.85、0.75、0.65五種剪枝率對(duì)模型通道進(jìn)行剪枝,同時(shí)剪掉16個(gè)殘差結(jié)構(gòu)(32個(gè)卷積層,16個(gè)殘差層)。模型經(jīng)歷不同剪枝率的剪枝后,權(quán)重大小分別壓縮到了3.69 MB、5.295 MB、9.66 MB、15.5 MB、26.8 MB;參數(shù)量分別減少了98.5%、97.9%、96.2%、93.6%、88.8%;推理時(shí)間從18.3 ms降低到8.5 ms;但是模型精度出現(xiàn)了不同程度的下跌,分別為0.004、0.000、0.360、0.168、0.365,如表1所示。
表1 不同剪枝策略測(cè)試結(jié)果
稀疏訓(xùn)練后,對(duì)不同剪枝率下的模型通過,50Epochs的微調(diào),模型精度分別回升到0.808、0.847、0.868、0.866、0.868,如圖8所示。
圖8 微調(diào)模型后的準(zhǔn)確率
通過表4和圖8可以看到,當(dāng)剪枝率為0.95和0.93時(shí),剪枝模型的初始精度接近于0,但是通過50Epochs的微調(diào)后,精度依然可以回升到0.808和0.848,我們可以得出結(jié)論,經(jīng)過通道和殘差結(jié)構(gòu)剪枝得到的模型是相對(duì)于數(shù)據(jù)集和初始模型得到的合理結(jié)構(gòu),保留的權(quán)重可以讓剪枝模型快速接近這個(gè)結(jié)構(gòu)的上限。同時(shí),提高模型的剪枝率可以大幅度減少模型參數(shù)量,加快模型的推理速度;降低模型的剪枝率可以提高模型的精度,加快模型的推理速度。
通過5種不同剪枝率模型的比較,當(dāng)剪枝率在0.75~0.93區(qū)間內(nèi)有較高的精度,且模型權(quán)重較小。在區(qū)間內(nèi)進(jìn)行間隔取樣,并進(jìn)行模型微調(diào)后得到如表2和圖9測(cè)試結(jié)果。
表2 0.75~0.93剪枝策略微調(diào)測(cè)試結(jié)果
圖9 0.75~0.93區(qū)間內(nèi)微調(diào)模型后的準(zhǔn)確率
當(dāng)剪枝率為0.88時(shí),剪枝模型在區(qū)間內(nèi)較高的精度,同時(shí)推理速度相接近且較剪枝前降低了近一半,權(quán)重大小僅為8.82 MB。平衡了模型權(quán)重大小、精度和推理速度的關(guān)系,歸一化層γ也趨近于正態(tài)分布,如圖10所示。
圖10 0.88剪枝率模型微調(diào)后γ分布
圖11是剪枝率為0.88的模型結(jié)構(gòu),同剪枝前的模型進(jìn)行比較,可以看到模型的輸出通道大幅度減少,16個(gè)殘差結(jié)構(gòu)被剪掉,模型大部分壓縮。
通過表3對(duì)0.88剪枝率模型與原始模型的復(fù)雜度進(jìn)行比較分析,可以看到剪枝后的模型浮點(diǎn)運(yùn)算量減少了98.8 GFLOPS,提高了模型的運(yùn)行速度;當(dāng)行人圖像輸入GPU顯存占用相同時(shí),模型前后向傳播顯存占用降低了1 170.34 MB,模型權(quán)重顯存占用減少了230 MB,減少了資源占用,降低了移動(dòng)端硬件部署的限制,更符合實(shí)際要求。
圖11 0.88剪枝率的模型結(jié)構(gòu)
表3 復(fù)雜度對(duì)比
為了更好的將行人檢測(cè)模型部署到移動(dòng)端設(shè)備,本文通過對(duì)卷積層通道和殘差結(jié)構(gòu)重要性進(jìn)行分析,剪掉相應(yīng)的通道和結(jié)構(gòu),降低硬件部署要求,減少計(jì)算機(jī)資源限制。實(shí)驗(yàn)結(jié)果表明,行人檢測(cè)模型通過模型剪枝后,精度僅僅降低了2.2%,浮點(diǎn)運(yùn)算次數(shù)降低了84.5%,前后向傳播顯存占用降低了54%,推理時(shí)間降低了50.4%,模型參數(shù)量減少了96.3%。下一步工作將利用TensorRT推理優(yōu)化器,進(jìn)行快速的部署和推理。