天天看點

【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS

題目:EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS

日期:2018.6.5

連結:https://arxiv.org/abs/1801.06434v1

【摘要】

随着CNN在使用者産品應用上不斷增加,對模型能夠高效運作在嵌入式,移動硬體裝置上的需求也逐漸熱化。模型輕量化是以變為一個熱門研究話題,也湧現出如網絡二值化binary networks,改進卷積層設計revised convolution layers等方向的研究。本文研究的方式是後者,即提出一種新穎的卷積塊設計,能夠顯著減輕計算負擔,且性能遠勝目前的最好的模型(對比MobileNet,ShuffleNet)。我們的模型被稱為:EffNet

關鍵詞:CNN、計算高效、實時inference

【介紹】

近些年出現許多用于在小的硬體平台上做實時推斷的方法研究。例如,對訓練後的網絡進行修剪【1】【2】【3】;

還有一種是将32bit的網絡值轉為二值化模型;【4】

最新的一種方式則是關注于神經元的互聯性和普通卷積層vanilla convolution layers的自然特性。

普通卷積層構成核心是它的四維張量,它會在輸入信号上以[h,w,Cin,Cout]的格式做掃描,是以産生四個分量上的乘法操作,導緻計算基本擴了4倍。

3x3的卷積核尺寸設計目前作為一個标準卷積結構,稱為很多優化方案的選擇。MobileNet和ShuffleNet的做法是在4維tensor的不同的次元上對計算進行分離,進而來解決計算量大的問題,但這兩個網絡仍存在兩個未解決的問題。第一個問題是,兩個模型在大型網絡模型上表現突出,能使模型減小以及更加高效,然而在小的網絡結構中結果卻不是這般。第二個問題,兩個模型結構對流入網絡的資料會産生較大的瓶頸,這種瓶頸在高度備援的網絡中可能被認為是無關緊要的,但如我們實驗顯示,它可能會對小的模型産生較大影響。而我們設計的網絡能夠部署大的網絡結構到低容量的硬體,也能增強現有模型的效率。

【相關工作】

超參數優化,【8】提出一種CNN和SVM的貝葉斯優化架構,通過最大化增加模型精度的機率。這種方法需要初始化合适,且受限于搜尋空間【10】。基于增強學習【11】的LSTM【12】來優化超參數來改進速度和精度,這類方法不受搜尋空間限制,但需要額外步驟。

另一類方法是對模型進行後處理,即模型剪枝。【1】【2】【3】提出基于精度損失代價最小化的修剪算法。這類方法的問題是:開發的pipeline需要額外的階段用于特定超參數的優化。此外,當網絡結構發生變化,模型需要額外的fine-tuning.

另外一種模型後處理壓縮的方式是固定點模型參數量化,即數值精度小于正常的32bit float型【14】【15】【16】,或者是直接二值化網絡【4】。這類方法的問題是:盡管模型推斷快了,但對比它的baseline,精度下降了較多,是以這類方法的訴求性不高。

最近與本文相似的工作,文獻參考【17】【5】【6】都探尋了正常卷積操作的本質。其中包含次元級的卷積操作分離【18】。相比原始操作,FLOPs顯著減少。【7】将3x3卷積分離成3x1和1x3,.【5】MobileNet做了進一步延伸,将分離用在了通道級,顯著減少了FLOPs,主要計算量轉到了pointwise層。最後ShuffleNet【6】通過同【9】類似的方法将pointwise層進行分組來處理pointwise層的FLOPs裝載,是的精度損失相當小。

【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS

【建構塊來增加模型效率】

提出的結果有助于改進之前技術的識别不足問題,且構造了一種通用的EffNet block這種合适的解決方案形式。對于有競争力的成本要求和嚴格的模型大小限制需求,常常采用傳統計算機視覺算法來解決特定任務的工業應用問題【20】。

Bottleneck 結構

對輸入通道縮減系數8倍(即baseline中最原始輸入是32通道,最後輸出的256通道)。一個ShuffleNet塊使用的縮減系數是4。而窄的模型沒有足夠的通道做大幅減少。我們實驗證明精度的損失與較适度的縮減成比例。是以,我們提出瓶頸系數用2. 此外我們發現使用空間卷積是有效的(看下圖),其深度乘法器為2,第一個depthwise卷積層數量也翻了一番。

【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS

Strides 和 Pooling

MobileNet和ShuffleNet的子產品中depthwise空間卷積層采用的步長為2.我們實驗表明這種操作有兩個問題。第一個問題:我們多次實驗證明與最大池化相比,stride=2有精度下降。

此外,給空間卷積層添加最大池化不允許在它縮減到輸入尺寸4分之1前給資料進行編碼。然而,越早的最大池化意味後續計算開銷更小。為了維持早些最大池化的優勢,且避免資料壓縮過嚴重,我們提出采用可分離的池化(separable pooling)。同可分離卷積類似,首先在第一次dw 1x3的卷積後用2x1的池化核(相應的stride,我的了解是2x1,其中的1d mp指的是一維的mp操作,即1x2或2x1,而非2x2),然後是3x1的depthwise卷積,接下來是2x1xch的卷積來替代1x1xch的pointwise卷積,stride是1d的,這麼做的好處是應用了池化可以減少計算量,且由避免資料壓縮嚴重,精度下降更少。

Separable Convolutions

這個idea是文章【7】提出的,本文采取它的用連續的3x1和1x3替代3x3卷積的思想,并結合我們的可分離池化卷積核的思想。

Residual Connnections

最初由【22】提出,後被其他網絡廣泛應用,尤其在較深的網絡中很有用。本文分析了使用這個連接配接對小網絡中高壓縮率精度損失的影響。

Group Convolutions

本文未使用,考慮精度損失的問題,盡管它在減少計算量上有很大優勢。

Addressing the First Layer

MobileNet和ShuffleNet都未對第一個層做替換更改,他們認為第一個層産生的計算代價不高。我們認為每個地方的優化都有意義,在優化完其他層後,發現第一層顯得有點大,我們将第一層替換成EffNet block,結果減少了約30%的計算量。

【EffNet 模型】

4.1 資料壓縮

我們建構了個對資料壓縮比較明顯的網絡結構來做實驗。實驗發現大的bottleneck對精度影響比較大,Table 1列出了在Cifar10上網絡的資料次元資訊。

4.2 EffNet Block

我們設計的efficient 卷積block作為基本子產品來替代之前的普通卷積層,且不再局限于slim網絡。将3x3的depthwise卷積分割成兩個線性層,1x3和3x1. 在對第一個空間層後進行池化,為第二層減少了計算量。見Table1和圖1,在第一個depthwise卷積後應用1x2最大池化核,在第二次下采樣時,我們使用2x1的卷積核來替代正常的pointwise,該步操作的FLOPs可能相當,但得到的精确度更好些。

【實驗】

【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS
【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS
【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS
【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS
【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS
【論文解讀】EffNet: AN EFFICIENT STRUCTURE FOR CONVOLUTIONAL NEURAL NETWORKS

繼續閱讀