楊民杰,梁亞玲,杜明輝
(華南理工大學(xué)電子與信息學(xué)院,廣州 510641)
自2012年AlexNet[1]獲得ImageNet大型視覺識別比賽(ImageNet Large Scale Visual Recognition Competition,ILSVRC)冠軍以來,以AlexNet為代表的基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)受到廣泛關(guān)注并得到深入發(fā)展,一系列深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)相繼出現(xiàn),例如用于分類任務(wù)的Vgg[2]、GoogleNet[3]和ResNet[4]等網(wǎng)絡(luò)以及用于目標(biāo)檢測任務(wù)的Rcnn[5]、FastRcnn[6]、FasterRcnn[7]、YOLOv3[8]和SSD[9]等網(wǎng)絡(luò)。隨著神經(jīng)網(wǎng)絡(luò)逐漸加深,其應(yīng)用于視覺任務(wù)的網(wǎng)絡(luò)精度已逐漸接近甚至超過人類的視覺識別水平[10],而網(wǎng)絡(luò)模型占據(jù)的存儲空間、計算時長和計算量等均不斷增加,對嵌入式設(shè)備的計算性能提出更高要求,所需設(shè)備成本與電量能耗均增大。然而嵌入式設(shè)備在計算能力、存儲能力以及電量能耗等方面均有一定限制[10],為了在嵌入式設(shè)備中成功部署相關(guān)的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),需在保持神經(jīng)網(wǎng)絡(luò)分類或檢測精度的同時對其進(jìn)行壓縮。
神經(jīng)網(wǎng)絡(luò)壓縮算法主要包括低秩近似算法、剪枝算法、量化算法、知識蒸餾算法和緊湊型網(wǎng)絡(luò)設(shè)計算法等。低秩近似算法是將稠密的滿秩矩陣表示為若干低秩矩陣的組合,低秩矩陣又分解為小規(guī)模矩陣的乘積,從而達(dá)到簡化的目的。文獻(xiàn)[11]提出一種線性組合卷積核基底算法,用f×1+1×f卷積核替代f×f卷積核進(jìn)行低秩近似。剪枝算法是通過修剪神經(jīng)網(wǎng)絡(luò)中冗余濾波器進(jìn)行網(wǎng)絡(luò)優(yōu)化,刪除神經(jīng)網(wǎng)絡(luò)權(quán)重矩陣中不重要的部分權(quán)重,僅保留有用部分,再重新對網(wǎng)絡(luò)進(jìn)行微調(diào)。量化算法是用低精度參數(shù)權(quán)值代替神經(jīng)網(wǎng)絡(luò)中32 bit的浮點型參數(shù)權(quán)值,目前大多數(shù)低精度的方案采用INT8型參數(shù)代替FP32型參數(shù),通過犧牲部分精度降低占用空間。知識蒸餾算法是指通過遷移學(xué)習(xí)將預(yù)先訓(xùn)練好的復(fù)雜網(wǎng)絡(luò)的輸出作為監(jiān)督信號去訓(xùn)練簡單的網(wǎng)絡(luò),以達(dá)到壓縮網(wǎng)絡(luò)的目的。緊湊型網(wǎng)絡(luò)設(shè)計算法是重新構(gòu)建可達(dá)到原精度的小型網(wǎng)絡(luò),例如MobileNet和ShuffleNet網(wǎng)絡(luò)。
由于剪枝算法無需考慮應(yīng)用領(lǐng)域、網(wǎng)絡(luò)架構(gòu)和部署平臺,符合神經(jīng)網(wǎng)絡(luò)應(yīng)用于嵌入式平臺的實際需求,因此本文采用剪枝算法壓縮網(wǎng)絡(luò)?,F(xiàn)有關(guān)于剪枝算法的研究大部分基于圖像分類網(wǎng)絡(luò),但在人工智能應(yīng)用場景中,目標(biāo)檢測網(wǎng)絡(luò)的應(yīng)用領(lǐng)域更廣泛,在該網(wǎng)絡(luò)上進(jìn)行剪枝更困難。YOLO網(wǎng)絡(luò)是一種端到端的目標(biāo)檢測網(wǎng)絡(luò),屬于One-stage網(wǎng)絡(luò),One-stage網(wǎng)絡(luò)包括特征提取和訓(xùn)練分類器2個階段,而Two-stage網(wǎng)絡(luò)目標(biāo)檢測方法包括區(qū)域選擇、特征提取和訓(xùn)練分類器3個階段,該網(wǎng)絡(luò)進(jìn)行區(qū)域選擇后產(chǎn)生大量冗余的候選區(qū)域,會耗費較多推理時間。與Two-stage網(wǎng)絡(luò)相比,One-stage網(wǎng)絡(luò)耗時更短,因此YOLO網(wǎng)絡(luò)推理速度更快。在嵌入式設(shè)備端,推理速度是評價實用性的重要參考指標(biāo),YOLO網(wǎng)絡(luò)中的YOLOv3網(wǎng)絡(luò)與同樣作為Onestage的SSD網(wǎng)絡(luò)準(zhǔn)確率相同,但是其運算速度比SSD網(wǎng)絡(luò)快3倍[8],因此,本文選擇YOLOv3網(wǎng)絡(luò)來設(shè)計剪枝算法。
剪枝算法分為結(jié)構(gòu)化剪枝算法和非結(jié)構(gòu)化剪枝算法。結(jié)構(gòu)化剪枝算法是通過從深度神經(jīng)網(wǎng)絡(luò)中剪去整個濾波器對網(wǎng)絡(luò)進(jìn)行簡化來減少推理時間。非結(jié)構(gòu)化剪枝是單獨對每一層參數(shù)剪枝,這會造成不規(guī)則內(nèi)存訪問情況,從而降低推理效率。文獻(xiàn)[12]利用二階泰勒公式展開并選擇參數(shù)進(jìn)行剪枝,將剪枝看做正則項來改善訓(xùn)練和泛化能力。文獻(xiàn)[13]根據(jù)神經(jīng)元連接權(quán)值大小修剪訓(xùn)練后網(wǎng)絡(luò)中不重要的連接,以減少網(wǎng)絡(luò)參數(shù)。上述研究均采用非結(jié)構(gòu)化剪枝算法基于單個權(quán)重進(jìn)行剪枝,剪枝后的網(wǎng)絡(luò)需配置專門的軟件或硬件來加速運行。為使剪枝后的網(wǎng)絡(luò)能在普適平臺上運行,文獻(xiàn)[14]引入結(jié)構(gòu)化稀疏性,每個卷積單元根據(jù)其對網(wǎng)絡(luò)在驗證數(shù)據(jù)集上準(zhǔn)確率的影響程度分配分值,通過去除分值低的卷積單元進(jìn)行剪枝,然而該方法耗時較長,僅適用于小模型。文獻(xiàn)[15]通過移除網(wǎng)絡(luò)中權(quán)重值在0附近的濾波器及其連接特征圖來降低計算成本,且無需稀疏卷積庫支持,但當(dāng)網(wǎng)絡(luò)的權(quán)重值的分布非常集中或者權(quán)重值大部分不在0附近時,該方法剪枝效果較差。
文獻(xiàn)[16]利用批量歸一化(Batch Normalization,BN)層縮放因子γ在訓(xùn)練過程中衡量通道的重要性,去除不重要的通道壓縮模型提升計算速度。在此基礎(chǔ)上,本文提出一種利用參數(shù)子空間和縮放因子的YOLO剪枝算法,使用參數(shù)子空間避免卷積層濾波器權(quán)重剪枝范數(shù)標(biāo)準(zhǔn)差過大,采用雙準(zhǔn)則剪枝策略分別利用卷積層和BN層對YOLOv3網(wǎng)絡(luò)進(jìn)行剪枝。
剪枝算法的核心思想是尋找一種合適的評價指標(biāo)去除冗余濾波器?,F(xiàn)有剪枝算法大部分基于濾波器范數(shù)的大小,如果濾波器所產(chǎn)生對應(yīng)特征圖的L2范數(shù)接近0,則表明濾波器范數(shù)較小,該特征圖對網(wǎng)絡(luò)貢獻(xiàn)較少,即該濾波器對網(wǎng)絡(luò)的重要性較低。根據(jù)上述原理可對網(wǎng)絡(luò)中濾波器按照重要性排序,并刪除重要性較低的濾波器。該做法的前提是濾波器符合兩個理想條件:1)濾波器范數(shù)標(biāo)準(zhǔn)差較大;2)濾波器最小范數(shù)接近0。但是大部分濾波器不符合上述條件,特別是目標(biāo)檢測網(wǎng)絡(luò)濾波器。為此,本文提出基于參數(shù)子空間和BN層縮放因子雙準(zhǔn)則的剪枝算法,其具體流程如圖1所示。
圖1 本文剪枝算法流程Fig.1 Procedure of the proposed pruning algorithm
參數(shù)子空間是采用k均值聚類算法將卷積層濾波器聚類得到的不同子空間,在其中進(jìn)行剪枝可避免濾波器范數(shù)標(biāo)準(zhǔn)差較大以及濾波器最小范數(shù)接近0。k均值聚類算法是一種迭代求解的聚類分析算法,也是基于樣本集合劃分的聚類算法。該算法將樣本集合劃分為k個子集并構(gòu)成k個類,將n個樣本分到k個類中,每個樣本與其所屬類中心的距離最小且僅屬于1個類。k均值聚類算法的復(fù)雜度為O(mnk),m為樣本維數(shù)。k均值聚類算法的步驟為:1)隨機選取k個樣本作為k個類的中心,將樣本逐個指派到與其最近中心的類中,得到1個聚類結(jié)果;2)更新每個類的樣本均值作為新的類中心;3)重復(fù)步驟1和步驟2,直到收斂或符合停止條件(沒有(或最少)樣本被重新分配給不同的聚類、沒有(或最少)聚類中心發(fā)生變化、誤差平方和局部最?。橹?。
k均值聚類算法以n個樣本集合X為輸入,以樣本集合的聚類C*為輸出,具體過程如下:
4)如果迭代收斂或者符合停止條件,則輸出C*=C(t);否則令t=t+1,返回步驟2。
在剪枝過程中,本文使用的YOLOv3網(wǎng)絡(luò)有較多連續(xù)的殘差結(jié)構(gòu),如果對殘差結(jié)構(gòu)的每一層進(jìn)行剪枝,則會造成部分網(wǎng)絡(luò)層的通道數(shù)不同,無法通過捷徑(shortcut)進(jìn)行相加運算,導(dǎo)致網(wǎng)絡(luò)不能正常運行。因此,本文避開殘差結(jié)構(gòu)中相連的卷積層進(jìn)行剪枝,但是這些卷積層參數(shù)量仍會隨著1×1卷積(conv)層通道數(shù)的減少而降低,如圖2和圖3所示。圖2為未剪枝的殘差結(jié)構(gòu),其中第一層參數(shù)量為128×256×1×1+128=32 896,第二層參數(shù)量為256×128×3×3+256=295 168。圖3為已剪枝的殘差結(jié)構(gòu),其中第一層參數(shù)量為37×256×1×1+37=9 509,第二層參數(shù)量為256×37×3×3+256=85 504??梢钥闯觯诒荛_相連卷積層進(jìn)行剪枝后,未剪枝的卷積層參數(shù)量會出現(xiàn)明顯下降,從而簡化算法并減少計算量。
圖2 未剪枝的殘差結(jié)構(gòu)Fig.2 Residual structure without pruning
圖3 剪枝后的殘差結(jié)構(gòu)Fig.3 Residual structure after pruning
選擇非殘差結(jié)構(gòu)需要相加的卷積層,對每個卷積層的濾波器進(jìn)行k均值聚類分析,使用肘部法則確定每個卷積層的k值。k均值聚類是以最小化樣本與質(zhì)點平方距離誤差(loss)作為目標(biāo)函數(shù),若將各簇質(zhì)點與簇內(nèi)樣本點的平方距離誤差和稱為畸變程度,則一個簇的畸變程度越低表明簇內(nèi)結(jié)構(gòu)越緊密,一個簇的畸變程度越高表明簇內(nèi)結(jié)構(gòu)越松散?;兂潭韧ǔkS聚類類別的增加而減小,但對于有一定區(qū)分度的數(shù)據(jù)樣本,在k值達(dá)到某個臨界點時畸變程度將急劇減小,此時聚類性能較好?;诨兂潭鹊淖兓?,YOLOv3不同卷積層可訓(xùn)練不同k均值聚類模型,從而得到每個卷積層最適合的聚類類別數(shù)。圖4和圖5分別表示第63層和第103層卷積層在不同k值下各簇質(zhì)點與簇內(nèi)樣本點的平方距離誤差。
圖4 第63層卷積層的聚類loss曲線Fig.4 Cluster loss curve of the 63rd convolution layer
圖5 第103層卷積層的聚類loss曲線Fig.5 Cluster loss curve of the 103rd convolution layer
由于本文在聚類分析前先將卷積層每個濾波器的權(quán)重進(jìn)行求和,再對求和后的權(quán)重進(jìn)行聚類分析,因此聚類分析針對單層網(wǎng)絡(luò)進(jìn)行,在單層網(wǎng)絡(luò)上使用肘部法則確定k值。使用該方法對每個卷積層用不同k值進(jìn)行聚類分析得到各卷積層聚類結(jié)果。計算卷積層每個聚類類別中濾波器的權(quán)重,將其按照由大到小排序,并根據(jù)一定比例去除權(quán)重較小的濾波器。本文使用基于參數(shù)子空間的方法對單層卷積層進(jìn)行剪枝實驗,剪枝率設(shè)置為50%,采用平均精準(zhǔn)度均值(Mean Average Precision,MAP)作為剪枝效果的評價指標(biāo)。圖6為第63層卷積層在不同k值下MAP的變化,可以看出,當(dāng)k為4時剪枝所得MAP值最大,k=4即為圖4中聚類loss曲線的畸變臨界點。圖7為第103層卷積層在不同k值下MAP的變化,可以看出,當(dāng)k為4時剪枝所得MAP值最大,k為4即為圖5中聚類loss曲線的畸變臨界點。由此可證明,使用肘部法則選出的k值有效。先用k均值聚類再根據(jù)權(quán)重排序進(jìn)行剪枝,可避免濾波器范數(shù)標(biāo)準(zhǔn)差較大以及濾波器最小范數(shù)接近0。
圖6 第63層卷積層在不同k 值下的MAP變化曲線Fig.6 MAP variation curve of 63rd convolution layer with different k values
圖7 第103層卷積層在不同k 值下的MAP變化曲線Fig.7 MAP variation curve of 103rd convolution layer with different k values
由于BN層可有效防止梯度爆炸并加速網(wǎng)絡(luò)收斂,因此其被應(yīng)用于各種卷積層神經(jīng)網(wǎng)絡(luò)中,位于卷積層之后,以對卷積層后的特征圖完成歸一化操作。然而若BN層僅在卷積層后進(jìn)行歸一化,再直接將數(shù)據(jù)送入下一層進(jìn)行卷積計算,則網(wǎng)絡(luò)將無法學(xué)習(xí)輸出的特征分布。由于BN層后有ReLu激活層,若BN層后的特征圖數(shù)據(jù)大部分小于0,那么其經(jīng)過ReLu激活層后將失去大部分特征值,因此,BN層需通過優(yōu)化縮放系數(shù)γ和偏移系數(shù)β對數(shù)據(jù)進(jìn)行歸一化處理,使網(wǎng)絡(luò)能學(xué)習(xí)到輸出的特征分布。
算法1BN層縮放因子剪枝算法
在算法1中,μB和分別為輸入的均值和方差。卷積層每個濾波器均會產(chǎn)生1個特征圖,每個特征圖BN層在歸一化時有唯一的縮放系數(shù)γ與其對應(yīng),通過縮放值可選擇冗余的特征圖,再由特征圖選出冗余的濾波器,從而根據(jù)縮放系數(shù)大小來判斷濾波器的重要性。本文利用縮放系數(shù)γ從BN層角度更全面地判斷濾波器的冗余程度。
雙準(zhǔn)則融合剪枝是結(jié)合參數(shù)子空間和BN層縮放因子兩種剪枝算法去除冗余的濾波器以實現(xiàn)最精簡的網(wǎng)絡(luò)結(jié)構(gòu)。參數(shù)子空間剪枝算法是從卷積層角度尋找網(wǎng)絡(luò)中冗余的濾波器,BN層縮放因子剪枝算法是從BN層角度尋找不重要的濾波器,本文將原始YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)通過上述兩種算法進(jìn)行剪枝,以最大化壓縮網(wǎng)絡(luò)。
算法2雙準(zhǔn)則融合剪枝算法
雙準(zhǔn)則融合剪枝算法將訓(xùn)練數(shù)據(jù)、原始YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)和初始化權(quán)重以及剪枝率P為輸入,以剪枝后網(wǎng)絡(luò)為輸出,具體過程如下:
1)原始YOLOv3網(wǎng)絡(luò)在訓(xùn)練數(shù)據(jù)上進(jìn)行訓(xùn)練。
2)選取可剪枝的網(wǎng)絡(luò)卷積層。
3)對選取的卷積層運用肘部法則,得到每個卷積層剪枝需要的k值。
4)對選取的卷積層進(jìn)行聚類操作,得到參數(shù)子空間。
5)在參數(shù)子空間進(jìn)行權(quán)重排序,根據(jù)剪枝率得到需要刪除的濾波器。
6)在步驟2后,對每個卷積層的BN層縮放因子進(jìn)行排序,根據(jù)剪枝率得到需去除的濾波器。
7)將步驟5和步驟6中得到的濾波器求并集。
8)在步驟2后去除步驟7中的濾波器總和,得到精簡的網(wǎng)絡(luò)結(jié)構(gòu)。
9)在訓(xùn)練數(shù)據(jù)上對新的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行微調(diào),得到最終需要的網(wǎng)絡(luò)模型。
10)若剪枝結(jié)果不理想,則重新選擇剪枝率并返回步驟5。
在上述過程中,剪枝率由實驗獲得,在保持網(wǎng)絡(luò)精度下結(jié)合參數(shù)子空間和BN層縮放因子兩種剪枝方法可最大限度地壓縮網(wǎng)絡(luò)。
將本文提出的基于參數(shù)子空間和BN層縮放因子的雙準(zhǔn)則剪枝算法(以下稱為本文雙準(zhǔn)則剪枝算法)與其他剪枝算法在CIFAR10分類數(shù)據(jù)集上的網(wǎng)絡(luò)精度和浮點計算量進(jìn)行對比,并將參數(shù)子空間剪枝算法、BN層縮放因子剪枝算法和本文雙準(zhǔn)則剪枝算法在YOLOv3網(wǎng)絡(luò)中得到的實驗結(jié)果進(jìn)行對比,以分析本文方法的剪枝性能。
將不同剪枝算法在CIFAR10數(shù)據(jù)集上實驗結(jié)果進(jìn)行對比,如表1所示(“—”表示數(shù)據(jù)不詳,60U40是雙準(zhǔn)則融合剪枝算法的剪枝率,其中60%的剪枝率屬于BN層縮放因子剪枝算法,40%的剪枝率屬于參數(shù)子空間剪枝算法)。可以看出,PF[17]算法的浮點計算量僅減少27.6%,網(wǎng)絡(luò)精度卻下降1.73%,這是因為該算法主要考慮濾波器權(quán)重的絕對值問題,默認(rèn)了權(quán)重分布需遵循濾波器范數(shù)標(biāo)準(zhǔn)差較大以及濾波器最小范數(shù)接近0這兩個條件,對剪枝網(wǎng)絡(luò)和數(shù)據(jù)有一定的限制。CP[18]算法采用LASSO回歸方式選擇剪枝通道,但由于是逐層剪枝,因此剪枝后的網(wǎng)絡(luò)精度下降較多。LCCT[19]算法由于在卷積結(jié)構(gòu)中加入LCCL加速卷積層,增加了訓(xùn)練難度,因此浮點計算量無明顯減少。SFP[20]算法采用動態(tài)剪枝方式,但由于其剪枝策略仍根據(jù)權(quán)重的范數(shù)并保留BN層的偏置系數(shù),因此造成剪枝精度隨機下降。AMFSF[10]算法引入注意力機制進(jìn)行剪枝,并采用范數(shù)計算注意力的重要性,但其會忽略部分剪枝細(xì)節(jié)從而降低網(wǎng)絡(luò)穩(wěn)定性。與其他算法相比,本文雙準(zhǔn)則剪枝算法從權(quán)重和BN層兩個角度進(jìn)行剪枝,在保證剪枝精度基本不變的情況下,其在ResNet56網(wǎng)絡(luò)中浮點計算量減少46.3%,在ResNet110網(wǎng)絡(luò)中浮點計算量減少45.6%。與其他剪枝算法相比,本文雙準(zhǔn)則剪枝算法在分類過程中具有較好的剪枝效果。
表1 不同剪枝算法在CIFAR10數(shù)據(jù)集上實驗結(jié)果的對比Table 1 Comparison of experimental results of different pruning algorithms on CIFAR10 dataset
本文以Ubuntu18.04軟件為實驗平臺,采用i9-9900K CPU和2080ti顯卡,使用Deer數(shù)據(jù)集,其中訓(xùn)練集有4 367張圖像,測試集有519張圖像。將參數(shù)子空間剪枝算法、BN層縮放因子剪枝算法和本文雙準(zhǔn)則融合剪枝算法在YOLOv3網(wǎng)絡(luò)中不同剪枝率下的剪枝效果進(jìn)行對比,結(jié)果如表2~表4所示(70U40是雙準(zhǔn)則融合剪枝算法的剪枝率,其中70%的剪枝率屬于BN層縮放因子剪枝算法,40%的剪枝率屬于參數(shù)子空間剪枝算法)??梢钥闯觯簠?shù)子空間剪枝算法可去除所選卷積層50%的濾波器,MAP值下降約0.029,計算時間從每張圖像0.010 3 s下降到每張圖像0.008 0 s,網(wǎng)絡(luò)參數(shù)量下降約50%;BN層縮放因子剪枝算法可去除所選卷積層80%的濾波器,MAP值僅下降約0.007,計算時間下降到每張圖像0.007 3 s,網(wǎng)絡(luò)參數(shù)量下降約80%;本文雙準(zhǔn)則剪枝算法的MAP值下降約0.032,計算時間下降到每張圖像0.006 6 s,網(wǎng)絡(luò)參數(shù)量下降約85%。
表2 YOLOv3網(wǎng)絡(luò)中參數(shù)子空間剪枝算法在不同剪枝率下的實驗結(jié)果Table 2 Experimental results of parameter subspace pruning algorithm in YOLOv3 network at different pruning rates
表3 YOLOv3網(wǎng)絡(luò)中BN層縮放因子剪枝算法在不同剪枝率下的實驗結(jié)果Table 3 Experimental results of BN layer scaling factor pruning algorithm in YOLOv3 network at different pruning rates
表4 YOLOv3網(wǎng)絡(luò)中本文雙準(zhǔn)則融合剪枝算法在不同剪枝率下的實驗結(jié)果Table 4 Experimental results of double criteria fusion pruning algorithm in YOLOv3 network at different pruning rates
為保證目標(biāo)檢測YOLOv3網(wǎng)絡(luò)在嵌入式設(shè)備上正常運行,本文提出一種結(jié)合參數(shù)子空間和BN層縮放因子的雙準(zhǔn)則剪枝算法。采用參數(shù)子空間剪枝算法避免權(quán)重分布過于集中,使用BN層縮放因子剪枝算法去除不重要的濾波器,同時利用卷積層和BN層進(jìn)行剪枝以最大化壓縮網(wǎng)絡(luò)。實驗結(jié)果表明,與PF、CP等剪枝算法相比,該算法可保持較高網(wǎng)絡(luò)精度且計算量更少。下一步將對網(wǎng)絡(luò)量化進(jìn)行研究,在保證網(wǎng)絡(luò)精度的同時進(jìn)一步壓縮網(wǎng)絡(luò)并提升計算速度。