輕量級網(wǎng)絡之ShuffleNet
原論文——ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
介紹
目前深度學習網(wǎng)絡已經(jīng)取得很大的成功,但是模型參數(shù)巨大,計算量以GFLOPs計,導致難以應用到手機等嵌入設(shè)備中。因此有許多學者研究如何在適當?shù)腗FLOPs下取得好的效果,大致有幾個方向:剪枝(pruning),量化(quantization,低維表達),蒸餾(distill)和網(wǎng)絡結(jié)構(gòu)的優(yōu)化,而shufflenet旨在優(yōu)化網(wǎng)絡基礎(chǔ)結(jié)構(gòu)。
論文提出了一種新的輕量級網(wǎng)絡架構(gòu)ShuffleNet,包括了兩個新的操作operations: pointwise group convolution and channel shuffle,減少計算的同時保持好的準確率。
方法
在講shufflenet前先回顧下深度可分離卷積和分組卷積:
Depthwise Separable Convolution (Preliminary)
深度可分離卷積由MobileNet提出,主要用于降低傳統(tǒng)卷積的計算復雜度。如下圖,(a)為標準卷積操作,(a) (c) 為深度可分離卷積,它將標準卷積分為了兩步:
(1) Depthwise Convolution, 用跟輸入的channel一樣大小的M個卷積核,分別于輸入的map對應的channel進行卷積操作;
(2) Pointwise Convolution,標準的1×1卷積,做通道融合變換。

Group Convolution (Preliminary)
論文中提到的分組卷積有ResNeXt和Xception,這里就不列出來了,本質(zhì)就是將channel通道分組,分別做卷積,以減少計算復雜度(后面會涉及)。
Channel Shuffle for Group Convolution
如下圖,(a)是分組卷積,分為三組,然后分別卷積。這里就會出現(xiàn)一個問題,每個組之間是獨立的,沒有信息交流,傳遞的,因此,基于此問題論文提出了channel shuffle的操作,將組之間的特征進行交換(shuffle),使得每個組包含了其他組的特征,如圖(b)和(c)所示。

實現(xiàn):假設(shè)一個g個group的卷積層輸出為g x n個channels, 首先reshape為大小(g, n),然后轉(zhuǎn)置為(n, g),最后reshape為gn維。這樣每個組的n channels里就會有其他組的特征。這種實現(xiàn)非常簡單,可適用于不同channel大小,并且是可導的。
ShuffleNet Unit
圖(a)是resnet的bottleneck block,其中3x3卷積被替換為depthwise conv (DWConv);(b) 1x1卷積替換為group conv(GConv), 加channel shuffle;(c) 為下采樣時采用的結(jié)構(gòu)。
復雜度:c × h × w, bottleneck channel 為m的Resnet Block, 復雜度為 . shufflenet為
FLOPs,可見很大地減少了計算量。

Architechture
下圖為shufflenet結(jié)構(gòu),并列舉了在140MFLOPs下的不同group g 的channel大小,可見g越大,有較大的channels去保存信息,從而提高準確率。

Experiment
論文首先驗證group conv帶來的作用,如下圖所示,g=8/7時分類誤差是最小的。

接著驗證shuffle的作用,如下表,可見channel shuffle起到了一個很大的作用。

和其他結(jié)構(gòu)如vgg,resnet等的對比:

和mobilenet對比

在目標檢測任務上:

總結(jié)
論文使用了channel shuffle的group conv,降低了計算量,提高了精度。但是,作者在shufflenet v2把group conv給否定了,為什么呢?答案就在我的下一篇解讀輕量級網(wǎng)絡之ShuffleNet v2。