董 燕,劉小輝,湯水利,劉洲峰,李春雷+
(1.中原工學院 電子信息學院,河南 鄭州 450007;2.恒天重工股份有限公司 技術開發(fā)中心,河南 鄭州 450000)
近年來,卷積神經(jīng)網(wǎng)絡(convolutional neural network,CNN)在計算機視覺領域表現(xiàn)出了顯著的優(yōu)勢,如分類[1-5]、檢測[6]及分割[7]等。在卷積神經(jīng)網(wǎng)絡性能提高的同時,高存儲與高功耗使其難于部署在資源受限的邊緣設備上。因此,構建輕量級的卷積神經(jīng)網(wǎng)絡,提高模型的推理速度,具有重要的理論及應用研究價值。
參數(shù)剪枝受哺乳動物大腦發(fā)育過程的啟發(fā)[8],通過修剪不重要的網(wǎng)絡連接來生成最優(yōu)的子網(wǎng)絡,具有較高的模型性能及自適應性。濾波器剪枝不僅能實現(xiàn)精細化的修剪[9],而且可以運行在通用硬件平臺或BLAS庫上,因此成為當前參數(shù)剪枝的重要研究方向。
然而,現(xiàn)有濾波器剪枝算法通常是逐層固定比率的修剪,不易尋找到最優(yōu)子網(wǎng)絡。因此,本文提出了一種基于稀疏約束的濾波器剪枝方法。首先從訓練樣本中自動學習BN層比例因子[10],將其作為特征圖及濾波器的重要性權重,并通過反向傳播進行動態(tài)更新。然后對其進行稀疏正則化訓練,經(jīng)排序計算出全局最優(yōu)閾值,從而修剪出最優(yōu)子網(wǎng)絡。為了解決因修剪率較大而導致斷層的問題,提出了全局-局部閾值策略。最后利用過參數(shù)化的卷積替換傳統(tǒng)卷積方法,在不增加模型尺寸的前提下,提升剪枝模型性能。
為了更好地描述濾波器剪枝過程,本文首先介紹卷積神經(jīng)網(wǎng)絡及其卷積方式。卷積神經(jīng)網(wǎng)絡由多個卷積層與全連接層組成,如圖1所示。其中卷積層通過卷積計算、正則化、非線性變換及池化操作實現(xiàn)對輸入圖像的特征抽取,全連接層通過矩陣運算及非線性變換生成類別得分。卷積神經(jīng)網(wǎng)絡這種分層處理結構,通過對低層、中層及高層特征的提取,顯著提升了對圖像的特征表示能力。
圖1 卷積神經(jīng)網(wǎng)絡
卷積運算的輸入由多個被稱為通道的2D特征圖組成,與3D卷積核進行卷積計算后,生成下一層的特征圖。其中,第l層卷積計算可以表述如下
(1)
對濾波器剪枝來講,卷積核Kl被分為重要的與非重要的兩類。濾波器剪枝通過移除非重要的卷積核,實現(xiàn)對模型的壓縮。而卷積核粒度上的修剪,與特征圖通道剪枝本質上是一致的,即當移除某個卷積核時,對應的特征圖被刪除。同樣,如果某個特征圖被移除,那么相對應的濾波器也會被修剪。因此,本文從特征圖的重要性評估出發(fā),實現(xiàn)卷積神經(jīng)網(wǎng)絡的濾波器剪枝。
針對現(xiàn)有逐層固定比率的濾波器剪枝算法不易尋找到最優(yōu)子網(wǎng)絡的問題,本文提出了一種基于稀疏約束的濾波器剪枝方法。該方法通過搜索網(wǎng)絡模型中最優(yōu)的特征圖通道配置,實現(xiàn)網(wǎng)絡模型中冗余參數(shù)修剪,具體包括稀疏正則化訓練、全局-局部閾值策略及過參數(shù)化卷積,整體流程如圖2所示。
圖2 稀疏約束濾波器剪枝框架流程
濾波器剪枝算法通過移除不重要的特征通道進行模型壓縮。其中,特征通道重要性的評估對模型剪枝至關重要。BN層廣泛存在于卷積神經(jīng)網(wǎng)絡中,因此選取對應通道激活程度的BN層比例因子,作為特征圖的重要性衡量標準,可增加提出剪枝方法的普適性。然而該比例因子通過反向傳播動態(tài)更新生成,層與層之間的尺度不一致。本文引入稀疏正則化訓練,迫使不重要特征圖的比例因子趨近于0,從而移除對應的特征圖,進行安全的修剪,剪枝過程如圖3所示。
圖3 剪枝
首先利用式(2)對BN層進行歸一化處理,但是該變換操作丟失了從底層網(wǎng)絡學習到的參數(shù)信息。因此,本文通過引入了兩個可學習(learnable)的參數(shù)γ和β, 利用式(3)對規(guī)范化后的數(shù)據(jù)進行線性變換,恢復數(shù)據(jù)本身的表達能力
(2)
(3)
其中,zin、zout為BN層的輸入與輸出特征圖,B為最小的批圖像數(shù)據(jù),μB和σB是B特征圖的平均值和標準偏差,γ為比例因子,β是偏置項。
BN層比例因子γ分布均衡,難以直接用于特征圖重要性判定指標。因此,本文提出稀疏正則化訓練方法,通過對損失函數(shù)中的比例因子施加l1正則項,使不重要特征圖對應的比例因子趨近或者等于0。其中,基于稀疏正則化訓練的損失函數(shù)為
L′=L+λRs(γ)
(4)
L是損失函數(shù),γ∈n表示BN層的比例因子,λ為懲罰因子,Rs(·) 表示在BN層比例因子上施加的稀疏正則化函數(shù)。
通過式(4)對比例因子進行稀疏正則化訓練,使得不重要特征圖對應的比例因子趨近或者等于0。因此,可對特征圖重要性指標γ∈n排序,根據(jù)預設的剪枝率,刪除較小的比例因子對應的特征圖。其中剪枝閾值θ表示如下
θ=Sortp(γ)
(5)
式中:Sort(·) 表示對稀疏正則化訓練后的比例因子排序操作,p表示預設的特征圖及濾波器的剪枝率。
由于對所有比例因子進行統(tǒng)一排序,在刪除低于剪枝閾值θ對應的特征圖過程中,會出現(xiàn)由于某一層全部被修剪而引起的斷層現(xiàn)象。為此,本文提出了全局-局部閾值的防斷層機制,當某一層的所有尺度因子均低于設定的全局閾值時,對該層所有尺度因子進行排序,選取最大和次大因子的平均值作為該層的局部閾值,保留比例因子大于該閾值所對應的特征圖,從而可以防止斷層現(xiàn)象。
剪枝操作通過刪除非重要的特征圖實現(xiàn)對模型的壓縮,由于損失部分特征信息,可能會導致模型精度下降。因此,本文采用過參數(shù)化卷積去替換網(wǎng)絡模型中的普通卷積,在保持模型大小的前提下,加速模型訓練并提升被修剪模型的性能。該計算方式由普通卷積和深度卷積組成[11]。
普通卷積操作基于一組卷積核對輸入特征圖進行滑動窗口處理。假設第i層的滑動窗口表示為張量Pi∈(ki×ki)×ni-1, 其中ki是核大小,ni-1是第i-1層中特征圖的通道數(shù)。則卷積操作可表示為特征圖張量P與權值W的乘積,計算公式如下
(6)
式中:t表示特征圖滑動窗口號。對于ki、ni-1和ni分別取2、3和2時,一個普通卷積的運算如圖4所示。
圖4 普通卷積計算
深度卷積將上一層的多通道特征圖拆分為單個通道的特征圖,分別對它們進行單通道卷積并重新堆疊在一塊。其中拆分操作只是對上一層的特征圖做了尺寸的調(diào)整,而通道數(shù)沒有發(fā)生變化,因此降低了參數(shù)量。深度卷積核表示為3D張量Wi∈Dmul×(ki×ki)×ni-1, 其中i為卷積層數(shù),ki是核大小,ni-1是第i-1層中特征圖的通道數(shù),Dmul被稱為深度乘子。則深度卷積算子‘°’可以描述為卷積核Wi與特征圖張量Pi的乘積,輸出為Dmul×ni-1維特征圖計算公式如下
(7)
式中:t表示特征圖滑動窗口號。對于ki、Dmul和ni分別取2、2和3時,一個深度卷積的運算如圖5所示。
圖5 深度卷積計算
過參數(shù)化卷積由帶有可訓練核Di∈Dmul×(ki×ki)×ni-1的深度卷積和帶有可訓練核Wi∈ni×Dmul×ni-1的普通卷積組成,其中Dmul≥(ki×ki)。 與普通卷積相同,過參數(shù)化的卷積輸出也是一個ni維特征圖過參數(shù)化卷積表示為卷積核 (Di,Wi) 與特征圖張量P的乘積。該過程可通過兩種等價方式實現(xiàn),特征圖組合(a)和卷積核組合(b),具體計算公式如下
(8)
對于ki、Dmul、ni-1和ni分別取2、4、3和2時,一個過參數(shù)化卷積的運算如圖6所示。
圖6 過參數(shù)化卷積計算
為了驗證所提方法的有效性,本文基于PyTorc[12]框架,選用VGG、ResNet[13]及DenseNet在不同的基準圖像數(shù)據(jù)集上進行實驗。實驗環(huán)境為Intel(R)Xeon(R)CPU E5-2650 v4@2.20 GHz,兩塊NVIDIA Quadro M5000 GPUs、32 GB RAM、64位Windows 10版本。
卷積神經(jīng)網(wǎng)絡模型輕量化領域最常用的數(shù)據(jù)集有MNIST、CIFAR-10/100、ImageNet。MNIST數(shù)據(jù)集過小,ImageNet對于機器硬件要求極高,CIFAR有兩種不同規(guī)模的數(shù)據(jù)集,可適用于不同的應用場景,因此本文采用CIFAR數(shù)據(jù)集用于評測算法有效性。該數(shù)據(jù)集圖像分辨率為32×32的彩色圖像,CIFAR-10由10個不同類別的6萬張圖像數(shù)據(jù)構成,其中訓練圖像5萬張(每類5千張),測試圖像1萬張(每類1千張)。而CIFAR-100由100個不同類別的圖像數(shù)據(jù)構成,其中訓練圖像5萬張(每類500張),測試圖像1萬張(每類100張)。
本文采用隨機梯度下降法進行網(wǎng)絡權重參數(shù)的尋優(yōu),其中Batch大小設為64,總周期(epoch)為160,初始學習率設為0.1,在訓練總周期數(shù)的50%和75%處調(diào)整學習率為原來的十分之一。另外,采用文獻[14]的權值初始化方式,權重衰減為10-4,動量為0.9,通道縮放因子初始化為0.5。當對施加通道稀疏正則化的網(wǎng)絡模型進行訓練時,不同的網(wǎng)絡模型采用不同的權衡因子λ。 選用的VGG、ResNet與DenseNet的λ取值分別設為10-4、10-5和10-5。
3.3.1 CIFAR-10實驗結果與分析
本文基于小規(guī)模的CIFAR-10數(shù)據(jù)集,在VGG、ResNet和DenseNet這3種典型的神經(jīng)網(wǎng)絡架構上評估了所提出方法的有效性。為了與現(xiàn)有SOTA方法Liu et al[9]對比,本文實驗采用VGG的改進版本(https://github.com/szagoruyko/cifar.torch),ResNet采用了164層預激活瓶頸結構的ResNet(ResNet-164),DenseNet使用生長率(growth rate)為12的40層網(wǎng)絡(DenseNet-40)。3種網(wǎng)絡架構的參數(shù)量,F(xiàn)LOPs及其分類精度所對應數(shù)值作為衡量剪枝后模型性能的基準,實驗結果見表1。
表1 基準網(wǎng)絡模型在CIFAR-10上的參數(shù)數(shù)量、FLOPs與分類準確率(Top-1)
首先給出了VGG-16在CIFAR-10上的實驗結果對比,如表2所示。當70%的通道被修剪時,參數(shù)量減少了79.43%,F(xiàn)LOPs為基準值的40.24%,此時被剪枝模型精度與原始模型精度相當。當80%通道被修剪時,參數(shù)量與FLOPs分別減少了80.83%與55.55%,在保持模型識別精度相似的前提下,本文提出方法的FLOPs減少量明顯優(yōu)于Liu et al[9]。因此,所提方法在普通的神經(jīng)網(wǎng)絡壓縮中表現(xiàn)出了優(yōu)越的性能,實現(xiàn)了較大的壓縮和加速比。
表2 CIFAR-10上VGG-16的剪枝效果
在ResNet-164上的實驗結果見表3。當40%的通道被修剪時,相對基準網(wǎng)絡模型,參數(shù)量下降19.41%,F(xiàn)LOPs降低了17.85%。與Liu et al[9]相比,參數(shù)量與FLOPs有明顯的降低,且模型性能提升0.54%。當60%的通道被修剪時,模型參數(shù)量及FLOPs分別降低了35.88%與33.93%,與Liu et al[11]相比,參數(shù)量與FLOPs有明顯的降低,且模型精度提升0.36%。同具有大量冗余權重參數(shù)的VGG網(wǎng)絡相比,由于瓶頸結構(bottleneck)的存在,ResNet-164參數(shù)與FLOPs下降不明顯,但仍取得了令人滿意的效果。
表3 CIFAR-10上ResNet-164的剪枝效果
由于DenseNet層與層之間的復雜連接,本文引入通道選擇層使得卷積與恒等連接的通道數(shù)保持一致,剪枝效果見表4。當40%的通道剪枝時,模型參數(shù)與FLOPs分別下降35.23%、19.04%,與Liu et al[9]相比,本文所提方法參數(shù)量與FLOPs有明顯降低,且識別精度相當。當60%的通道被修剪時,模型參數(shù)量與FLOPs分別有86.67%和79.74%的下降,與Liu et al[9]相比,本文提出算法壓縮與加速優(yōu)勢明顯,同時相對原始的基線模型,仍有0.28%的精度提升。因此,本文所提方法對于具有密集連接的網(wǎng)絡同樣十分有效。
表4 CIFAR-10上DenseNet-40的剪枝效果
3.3.2 CIFAR-100實驗結果與分析
為進一步驗證提出方法的有效性,本文選用3種典型網(wǎng)絡VGG-16、ResNet-164與DenseNet-40在較大數(shù)據(jù)集CIFAR-100上進行了實驗。其中3種基準網(wǎng)絡模型的參數(shù)量,F(xiàn)LOPs及其分類精度見表5。
表5 基準網(wǎng)絡模型在CIFAR-100上的參數(shù)量、FLOPs與分類準確率(Top-1)
由于CIFAR-100數(shù)據(jù)集較大,需要較多的參數(shù)量用于模型的表征,區(qū)別于CIFAR-10,在CIFAR-100上,VGGNet的修剪比例不易過大,調(diào)整為50%、60%,實驗結果見表6。當50%的通道被剪枝時,所提方法模型參數(shù)下降54.23%,F(xiàn)LOPs下降29.56%,與Liu et al[9]相比,所提算法的精度提升0.39%。當剪枝率增至60%時,所提方法的參數(shù)量與FLOPs分別下降65.64%和40.50%,此時所提算法仍具有較高的分類精度。由于FLOPs主要由卷積層決定,所提方法主要針對卷積層進行的修剪,因此導致VGG-16在較大數(shù)據(jù)集CIFAR-100上的剪枝效果出現(xiàn)參數(shù)量與FLOPs下降不一致的現(xiàn)象,但所提方法在較大數(shù)據(jù)集上對于普通卷積仍表現(xiàn)出了優(yōu)越性。
表6 CIFAR-100上VGG-16的剪枝效果
對于帶有殘差塊的ResNet-164,本文所提方法在CIFAR-100上分別進行了40%與60%粒度的通道修剪,其剪枝結果見表7。當40%的通道被修剪時,模型參數(shù)量下降了13.95%,F(xiàn)LOPs下降了26.94%,與Liu et al[9]相比,所提方法具有更好的識別精度。當60%的通道被修剪時,參數(shù)量與FLOPs分別下降了26.74%和46.42%,與Liu et al[9]相比,本文所提算法的下降精度更小。因此在較大的數(shù)據(jù)集CIFAR-100上,本文所提剪枝方法對于帶有殘差塊的網(wǎng)絡也有良好的性能。
表7 CIFAR-100上ResNet-164的剪枝效果
最后,本文在較大數(shù)據(jù)集CIFAR-100上,對有密集連接塊的DenseNet-40進行了剪枝操作,實驗結果見表8。當40%的通道被修剪時,模型參數(shù)量與FLOPs分別下降37.27%和26.89%,與Liu et al[9]相比,所提算法的精度提升了0.25%。在60%的通道被修剪時,參數(shù)量與FLOPs下降55.45%和42.61%,Liu et al[9]識別精度下降了0.36%,但本文所提方法反而有0.03%的精度提升。實驗結果表明,在較大的數(shù)據(jù)集CIFAR-100上,本文所提方法對帶有密集連接塊網(wǎng)絡仍具有較好的剪枝性能。
表8 CIFAR-100上DenseNet-40的剪枝效果
卷積神經(jīng)網(wǎng)絡的性能會受很多因素的影響。為了驗證過參數(shù)化卷積對改善被修剪模型性能的有效性,本文選用VGG-16、ResNet-164與DenseNet-40在小圖像數(shù)據(jù)集CIFAR-10上進行了系列實驗,只用過參數(shù)化卷積代替?zhèn)鹘y(tǒng)卷積層,而不改變其它設置。這保證了觀察到的性能變化是由于過參數(shù)化卷積的應用,而不是其它因素造成的。此外,這也意味著沒有超參數(shù)調(diào)優(yōu)以有利于使用過參數(shù)化卷積的模型,實驗結果如圖7所示??梢钥吹?,無論任意組合的FLOPs剪枝率與網(wǎng)絡模型,加入過參數(shù)化卷積的網(wǎng)絡在精度上始終優(yōu)于傳統(tǒng)的卷積方式。另外,由于ResNet-164網(wǎng)絡模型的緊致性,使得其剪枝率不宜過大,否則易導致精度下降明顯,但是其剪枝網(wǎng)絡模型與在性能上始終優(yōu)于VGG-16與DenseNet-40。此外,雖然VGG-16與DenseNet-40具有相似的性能,但由于密集連接的存在,DenseNet-40網(wǎng)絡的參數(shù)量與FLOPs下降最多。同時,VGG-16模型的FLOPs下降不是最多,但經(jīng)過修剪后模型的精度反超DenseNet-40,這也間接表明,VGG-16內(nèi)存存在大量的冗余,通過本文提出方法能夠找到更好的子網(wǎng)絡。
圖7 普通卷積與過參數(shù)化卷積的性能對比
本文提出了一種基于稀疏約束的濾波器剪枝算法,通過對批處理歸一化層比例因子引入稀疏正則化,在全局-局部閾值策略的約束下,使得網(wǎng)絡模型可以自動識別與修剪不重要的特征圖通道。此外,在保持網(wǎng)絡模型大小的前提下,采用過參數(shù)卷積改善被剪枝網(wǎng)絡模型的性能。在CIFAR-10和CIFAR-100上,我們選用VGG-16、ResNet164與DenseNet40這3種典型的網(wǎng)絡進行了剪枝實驗。實驗結果表明,在較大的壓縮比下,相比SOTA方法,本文提出方法的參數(shù)量與FLOPs下降明顯,且保持了較高的識別精度。同時,提出方法訓練成本小且模型較易部署。