天天看點

網絡結構(1)ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile DevicesShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

論文目錄

  • ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
    • 引言
    • 相關工作
      • 高效模型設計
      • 組卷積
      • 通道混洗
      • 模型加速
    • 實作
      • 針對組卷積的通道混洗
      • ShuffleNet 網絡單元
      • 網絡結構
    • 實驗

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

本文針對計算資源非常有限(10-150 MFLOPs)的移動裝置,提出了一種極端高效計算的CNN網絡結構ShuffleNet。為了在保證精度的情況下減少大量計算,使用了兩種新的操作:group convolution和channel shuffle。在ImageNet分類和MS COCO檢測上都展現出了極好的結果。如:ImageNet上top-1 error比MobileNet低7.8%(同40MFLOPs),而同精度時比AlexNet快13倍。

引言

現在的神經網絡趨向于用大而深的網絡來解決大型視覺任務,然而在實際需求上則是要在有限的計算負擔下來獲得最高的準确率,注重于移動平台。許多工作側重于在基礎網絡結構上剪枝、壓縮,而我們則希望設計出一種高效的基本結構。

我們發現現在的模型如Xception和ResNetXt因為1x1的卷積而變得低效。我們使用pointwise group convolution來減少1x1的總面積。為了克服其副作用,我們設計了channel shuffle操作使資訊可以在特征通道之間流動。基于以上兩點設計的ShuffleNet,與以往的結構相比在相同的計算量下可以有更多的特征通道,進而編碼更多資訊提升性能。

相關工作

高效模型設計

GoogleLeNet在增加深度時有着比簡單堆疊更低的複雜度;SqueezeNet保留精度同時減少了參數量和計算;ResNet使用了bottleneck結構來高效獲得性能;SENet引入了一個用小消耗提升性能的結構單元。與我們類似,NASNet用強化學習與模型檢索去探索高效模型設計,但是并沒有在極小網絡上進行測試。

組卷積

最早在AlexNet中提出、用于将模型分布到2塊GPU上的方法,在ResNetXt中展現出了其高效性。Xception提出的Depthwise separable convolution

通道混洗

這種想法目前在模型設計中很少被提到,即使CNN庫支援"random sparse convolution"層,相當于通道混洗後接一個組卷積。這種通道混洗有各種目的,并且很少被探讨過。

模型加速

實作

針對組卷積的通道混洗

一般卷積神經網絡包含有相同結構的重複,在其中,Xception和ResNeXt引入了高效的深度可分享卷積(DWConv)或組卷積(GConv)。然而,我們發現這些設計都沒有充分考慮1x1卷積(逐點總面積)大量的計算,比如在ResNeXt中隻有3x3的卷積層用上了組卷積,使得1x1卷積的乘-加操作占了整個網絡的93.4%。尤其是在小網絡中,逐點卷積的計算量常常使通道數受到限制,進而損害精度。

一種解決這個問題的方案是通道間稀疏連接配接,如組卷積。然而,如果許多組卷積層疊在一起,就會産生副作用:某一通道的輸出隻從一小部分輸入通道中得到。這使得通道間的資訊流動被阻塞,表征能力變弱。

如果我們允許GConv去擷取不同組的輸入,那麼輸入輸出就會被完全關聯上。特别是對于前一層生成的特征圖,我們可以先把這一層的每一組通道分小組,然後給下一層的每一組輸送不同小組的通道。通道混洗即是實作的一種辦法。若前一層有g組,我們先把前一層的輸出劃分為gxn個小組,然後将其轉置、再壓平變成下一層輸入——即使下一層分組數不同這個方案也是可行的。同時,通道混洗是可微的,就可以在端到端訓練中使用。

網絡結構(1)ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile DevicesShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

ShuffleNet 網絡單元

由于通道混洗的優勢,我們為小網絡設計了一個嶄新的ShuffleNet單元(參考ResNet的單元結構)。

  1. bottleneck處将3x3的總面積改為DWConv。
  2. 把1x1卷積改為GConv+通道混洗。
  3. 第二個1x1的目的是恢複通道數以比對短路連接配接,為簡單起見我們就不在這裡加入通道混洗了,反正差不多。
  4. BN和非線性的使用同ResNet和ResNeXt相似,除了我們不再在DWConv後接ReLU。
  5. 對于帶有步長的單元,我們做如下兩處修改:(1)在短路上加一個3x3的Average Pooling(2)将相加改為通道相接,使通道數增加時的計算量減少。

比較三種結構的FLOPS,同樣是 x × h × w x \times h \times w x×h×w,然後瓶頸處的通道數為 m m m,三種結構的FLOPS分别為:

  • ResNet: h w ( 2 c m + 9 m 2 ) hw(2cm+9m^2) hw(2cm+9m2)
  • ResNeXt: h w ( 2 c m + 9 m 2 / g ) hw(2cm+9m^2/g) hw(2cm+9m2/g)
  • ShuffleNet: h w ( 2 c m / g + 9 m ) hw(2cm/g+9m) hw(2cm/g+9m)

可以看出ShuffleNet計算量小。同樣的計算資源下,ShuffleNet也就可以有更多的特征圖,這對小網絡的性能是十分重要的。

另外,DWConv僅僅在瓶頸特征圖上實作,雖然理論上它有很低的複雜度,但是在低功耗移動裝置上實作卻不高效,可能是因為其糟糕的計算/存儲通路比。是以我們隻在瓶頸上使用這個技術。

網絡結構

然後我們給出了一個完整的網絡結構,是由一系列單元結構堆疊而成。三個stage,每個stage第一個unit步長為2,stage内超參數都一樣,然後到下一個stage通道翻倍。我們将bottleneck的通道數設定為1/4。我們的結構隻是一個參考,是以可能有更好的超參數。

分組數決定了連接配接的稀疏性。我們也發現在同樣的FLOPS下,分組數越多的話就可以有更多的通道數,進而編碼更多資訊。

我們将網絡标準化到一個期望的複雜度,對于表格中的網絡命名為“ShuffleNet 1x”,而将濾波器數量翻s倍之後稱為"ShuffleNet sx",計算量約有s2倍。

實驗

繼續閱讀