1. 程式人生 > >輕量化網路:ShuffleNet V2

輕量化網路:ShuffleNet V2

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

由Face++及清華的研究者共同發表,已被ECCV-2018收錄

該論文雖然以ShuffleNet V2打頭,但ShuffleNet V2 只是該論文的副產品,最亮眼的還是該論文提出的兩個原則,四個指導方針,這為輕量級模型的設計者提供了巨大的幫助。

創新點

兩個原則和四個指導方針

兩個原則:
1. 衡量模型執行速度,應採用如執行時間(speed\runtime)這樣的指標;
2. 應在具體的執行平臺上進行評估、衡量。
四個指導方針:


1. 卷積核數量儘量與輸入通道數相同(即輸入通道數等於輸出通道數);
2. 謹慎使用group convolutions,注意group convolutions的效率;
3. 降低網路碎片化程度;
4. 減少元素級運算。

至於ShuffleNet V2的結構,就不提了,都在後面呢

前言:

近幾年輕量化卷積神經網路設計都以浮點運算數flops為指導,網路設計時在保證精度的同時儘可能的獲得更小的flops。然而,在實際應用過程中,網路的耗時不僅看“軟體”上的設計,還要考慮到硬體實現的效率。軟硬兼併,雙管齊下,才能獲得更好的移動端網路模型。“軟體”上主要考慮權值引數數量(佔記憶體小)以及具體的運算方式(更小的flops),硬體上要考慮MAC(memory access cost ),並行度(degree of parallelis),資料的讀取方式等等,更多硬體上的討論可參考論文(

SqueezeNext: Hardware-Aware Neural Network Design)第三小節。

本文作者就是在“軟體”和硬體上綜合考慮之後,得出四點指導方針,再基於shufflenet-v1進行改動,就得到了shufflenet-v2 。

正文:

近幾年,輕量級模型的設計都是朝著 light-weight 結構進行設計,在 light-weight結構中,主要得益於 Group convolution 和 depth-wise convolution。為了衡量模型的是否是輕量級,通常都採用flops這一單一指標。但我們知道,flpos並不能等價於一個網路的速度,flops相同的網路模型,其運算速度也會存在差異,這種差異大多是由硬體的特性引起的。如圖1中的c,d所示,採用四種不同的網路設計思想,在具有相同的flops時,它們的運算速度卻不同。

這就值得思考了,之前僅通過指標flops“指導”設計輕量級卷積神經網路,是否完美?是否還需要考慮其他指標? 答案不言而喻。請接著往下看,到底還需要用什麼指標來衡量網路的輕呢?
這裡寫圖片描述

經本文分析,模型的flops不能直接代表其速度的原因有二:

  1. 影響模型執行速度還有別的指標,例如,MAC(memory access ),並行度(degree of parallelism)

  2. 不同平臺有不同的加速演算法,這導致flops相同的運算可能需要不同的運算時間。

基於上述發現,該文提出設計輕量級網路時需要考慮的兩個原則(指導方針):

1. 衡量模型執行速度,應採用如執行時間(speed\runtime)這樣的指標;
2. 應在具體的執行平臺上進行評估、衡量

Guideline 1-4:

先看看兩種輕量化模型的runtime分析
這裡寫圖片描述

可以發現,模型的runtime主要由卷積主導,但不是絕對主導,模型的runtime還受到 data I/O , data shuffle, element-wise operations(AddTensor, ReLU,etc)的影響,因此可知道要設計一個輕量模型,應該綜合考慮那些會影響runtime的因素。基於上述發現,該文從不同角度進行分析模型runtime,並提出四個設計輕量模型的guidelines

G1. Equal channel width minimizes memory access cost(MAC)

先理論分析,再試驗驗證:
基本假設與條件,假設記憶體足夠大一次性可儲存所有feature maps and parameters;卷積核大小為1*1 ;輸入通道有c1個;輸出通道有c2個;feture map的解析度為 h*w;
則 the flops of the 1*1 convolutions is
B=hwc1c2;
MAC=hw(c1+c2)+c1c2

從MAC公式,以及B的公式,以及均值不等式(c1c2)20 ,

可以推出: MAC2hwB+Bhw
推到過程如下
(c1c2)20(c1+c2)24c1c2

(c1+c2)2c1c2

hw(c1+c2)2hwhwc1c2

hw(c1+c2)+c1c22hwB+c1c2

MAC2hwB+Bhw

從公式中我們可以得出MAC的一個下界,即當c1==c2 時,MAC取得最小值。
試驗驗證,這僅是理論分析,實際情況中,記憶體是沒辦法達到要求的,因此需要用試驗來驗證是否當c1==c2時,MAC達到下限,從而較少runtime。
該文在flops相同,並採取4種不同的c1:c2比值分別在gpu 和 arm上進行試驗,試驗結果如下表:
這裡寫圖片描述

可以發現,當c1==c2時,無論在GPU平臺還是ARM平臺,均獲得了最快的runtime
(Ps: 丟擲一個疑問:從表中發現,隨著c1:c2值的增加,速度變快,那麼當c1 大於c2的情況下,是否會更快呢?
不過在實際應用中,我們輸出的feature maps數量還是會小於輸入的)
通過理論及試驗結果的分析,得出G1

G2 Excessive group convolution increases MAC
先理論分析,再試驗驗證:
同G1中一樣,假設 卷積核大小為1*1 ;輸入通道有c1個;輸出通道有c2個;feture map的解析度為 h*w;group 為g