1. 程式人生 > >深度學習模型壓縮與加速演算法之SqueezeNet和ShuffleNet

深度學習模型壓縮與加速演算法之SqueezeNet和ShuffleNet

自從AlexNet一舉奪得ILSVRC 2012 ImageNet影象分類競賽的冠軍後,卷積神經網路(CNN)的熱潮便席捲了整個計算機視覺領域。CNN模型火速替代了傳統人工設計(hand-crafted)特徵和分類器,不僅提供了一種端到端的處理方法,還大幅度地重新整理了各個影象競賽任務的精度,更甚者超越了人眼的精度(LFW人臉識別任務)。CNN模型在不斷逼近計算機視覺任務的精度極限的同時,其深度和尺寸也在成倍增長。

                  表1 幾種經典模型的尺寸,計算量和引數數量對比

Model Model Size(MB) Mult-Adds Million Parameters
AlexNet[1] 200 720 60
VGG16[2] 500 15300 138
GoogleNet[3] ~50 1550 6.8
Inception-v3[4] 90-100 5000 23.2

隨之而來的是一個很尷尬的場景:如此巨大的模型只能在有限的平臺下使用,根本無法移植到移動端和嵌入式晶片當中。就算想通過網路傳輸,但較高的頻寬佔用也讓很多使用者望而生畏。另一方面,大尺寸的模型也對裝置功耗和執行速度帶來了巨大的挑戰。因此這樣的模型距離實用還有一段距離。

在這樣的情形下,模型小型化與加速成了亟待解決的問題。其實早期就有學者提出了一系列CNN模型壓縮方法,包括權值剪值(prunning)和矩陣SVD分解等,但壓縮率和效率還遠不能令人滿意。

近年來,關於模型小型化的演算法從壓縮角度上可以大致分為兩類:從模型權重數值角度壓縮和從網路架構角度壓縮。另一方面,從兼顧計算速度方面,又可以劃分為:僅壓縮尺寸和壓縮尺寸的同時提升速度。

本文主要討論如下幾篇代表性的文章和方法,包括SqueezeNet[5]、Deep Compression[6]、XNorNet[7]、Distilling[8]、MobileNet[9]和ShuffleNet[10],也可按照上述方法進行大致分類:

                      表2 幾種經典壓縮方法及對比

Model Compression Approach Speed Consideration
SqueezeNet architecture No
Deep Compression weights No
XNorNet weights Yes
Inception-v3[4] 90-100 5000
MobileNet architecture Yes
ShuffleNet architecture Yes

一、SqueezeNet

1.1 設計思想

SqueezeNet是F. N. Iandola,S.Han等人於2016年的論文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and < 0.5MB model size》中提出的一個小型化的網路模型結構,該網路能在保證不損失精度的同時,將原始AlexNet壓縮至原來的510倍左右(< 0.5MB)。

SqueezeNet的核心指導思想是——在保證精度的同時使用最少的引數。

而這也是所有模型壓縮方法的一個終極目標。

基於這個思想,SqueezeNet提出了3點網路結構設計策略:

策略 1.將3x3卷積核替換為1x1卷積核。

這一策略很好理解,因為1個1x1卷積核的引數是3x3卷積核引數的1/9,這一改動理論上可以將模型尺寸壓縮9倍。

策略 2.減小輸入到3x3卷積核的輸入通道數。

為了保證減小網路引數,不僅僅需要減少3x3卷積核的數量,還需減少輸入到3x3卷積核的輸入通道數量,即式中C的數量。

策略 3.儘可能的將降取樣放在網路後面的層中。

在卷積神經網路中,每層輸出的特徵圖(feature map)是否下采樣是由卷積層的步長或者池化層決定的。而一個重要的觀點是:解析度越大的特徵圖(延遲降取樣)可以帶來更高的分類精度,而這一觀點從直覺上也可以很好理解,因為解析度越大的輸入能夠提供的資訊就越多。

上述三個策略中,前兩個策略都是針對如何降低引數數量而設計的,最後一個旨在最大化網路精度。

1.2 網路架構

基於以上三個策略,作者提出了一個類似inception的網路單元結構,取名為fire module。一個fire module 包含一個squeeze 卷積層(只包含1x1卷積核)和一個expand卷積層(包含1x1和3x3卷積核)。其中,squeeze層借鑑了inception的思想,利用1x1卷積核來降低輸入到expand層中3x3卷積核的輸入通道數。如圖1所示。

                這裡寫圖片描述

其中,定義squeeze層中1x1卷積核的數量是s1x1,類似的,expand層中1x1卷積核的數量是e1x1, 3x3卷積核的數量是e3x3。令s1x1 < e1x1+ e3x3從而保證輸入到3x3的輸入通道數減小。SqueezeNet的網路結構由若干個 fire module 組成,另外文章還給出了一些架構設計上的細節:

為了保證1x1卷積核和3x3卷積核具有相同大小的輸出,3x3卷積核採用1畫素的zero-padding和步長 squeeze層和expand層均採用RELU作為啟用函式 在fire9後採用50%的dropout 由於全連線層的引數數量巨大,因此借鑑NIN[11]的思想,去除了全連線層而改用global average pooling。

1.3 實驗結果

表3 不同壓縮方法在ImageNet上的對比實驗結果[5]                 這裡寫圖片描述

上表顯示,相比傳統的壓縮方法,SqueezeNet能在保證精度不損(甚至略有提升)的情況下,達到最大的壓縮率,將原始AlexNet從240MB壓縮至4.8MB,而結合Deep Compression後更能達到0.47MB,完全滿足了移動端的部署和低頻寬網路的傳輸。

此外,作者還借鑑ResNet思想,對原始網路結構做了修改,增加了旁路分支,將分類精度提升了約3%。

1.4 速度考量

儘管文章主要以壓縮模型尺寸為目標,但毋庸置疑的一點是,SqueezeNet在網路結構中大量採用1x1和3x3卷積核是有利於速度的提升的,對於類似caffe這樣的深度學習框架,在卷積層的前向計算中,採用1x1卷積核可避免額外的im2col操作,而直接利用gemm進行矩陣加速運算,因此對速度的優化是有一定的作用的。然而,這種提速的作用仍然是有限的,另外,SqueezeNet採用了9個fire module和兩個卷積層,因此仍需要進行大量常規卷積操作,這也是影響速度進一步提升的瓶頸。

二、ShuffleNet

ShuffleNet是Face++今年提出了一篇用於移動端前向部署的網路架構。ShuffleNet基於MobileNet的group思想,將卷積操作限制到特定的輸入通道。而與之不同的是,ShuffleNet將輸入的group進行打散,從而保證每個卷積核的感受野能夠分散到不同group的輸入中,增加了模型的學習能力。

6.1 設計思想

我們知道,卷積中的group操作能夠大大減少卷積操作的計算次數,而這一改動帶來了速度增益和效能維持在MobileNet等文章中也得到了驗證。然而group操作所帶來的另一個問題是:特定的濾波器僅對特定通道的輸入進行作用,這就阻礙了通道之間的資訊流傳遞,group數量越多,可以編碼的資訊就越豐富,但每個group的輸入通道數量減少,因此可能造成單個卷積濾波器的退化,在一定程度上削弱了網路了表達能力。

6.2 網路架構

在此篇工作中,網路架構的設計主要有以下幾個創新點:

提出了一個類似於ResNet的BottleNeck單元 借鑑ResNet的旁路分支思想,ShuffleNet也引入了類似的網路單元。不同的是,在stride=2的單元中,用concat操作代替了add操作,用average pooling代替了1x1stride=2的卷積操作,有效地減少了計算量和引數。單元結構如圖10所示。

提出將1x1卷積採用group操作會得到更好的分類效能 在MobileNet中提過,1x1卷積的操作佔據了約95%的計算量,所以作者將1x1也更改為group卷積,使得相比MobileNet的計算量大大減少。

提出了核心的shuffle操作將不同group中的通道進行打散,從而保證不同輸入通道之間的資訊傳遞。 ShuffleNet的shuffle操作如圖11所示。                 這裡寫圖片描述                     圖10 ShuffleNet網路單元[10]

                這裡寫圖片描述                  圖11 不同group間的shuffle操作[10]

6.3 實驗結果

             表8 ShuffleNet與MobileNet在ImageNet上精度對比 [10]

                這裡寫圖片描述

上表顯示,相對於MobileNet,ShuffleNet的前向計算量不僅有效地得到了減少,而且分類錯誤率也有明顯提升,驗證了網路的可行性。

6.4 速度考量

在ARM平臺上對網路效率進行了驗證,鑑於記憶體讀取和執行緒排程等因素,作者發現理論上4x的速度提升對應實際部署中約2.6x。給出了與原始AlexNet的速度對比,如下表。

            表9 ShuffleNet與AlexNet在ARM平臺上速度對比 [10]                 這裡寫圖片描述

結束語

近幾年來,除了學術界湧現的諸多CNN模型加速工作,工業界各大公司也推出了自己的移動端前向計算框架,如Google的Tensorflow、Facebook的caffe2以及蘋果今年剛推出的CoreML。相信結合不斷迭代優化的網路架構和不斷髮展的硬體計算加速技術,未來深度學習在移動端的部署將不會是一個難題。