1. 程式人生 > >論文筆記:ShuffleNet v1

論文筆記:ShuffleNet v1

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

ShuffleNet v1

1、四個問題

  1. 要解決什麼問題?
    • 為算力有限的嵌入式場景下專門設計一個高效的神經網路架構。
  2. 用了什麼方法解決?
    • 使用了兩個新的操作:pointwise group convolution(組卷積)和channel shuffle。
    • 根據這兩個操作構建了ShuffleUnit,整個ShuffleNet都是由ShuffleUnit組成。
  3. 效果如何?
    • 在ImageNet分類和MS COCO目標檢測任務上取得了比其他輕量化模型更高的準確率,如MobileNet v1。
    • 在ARM裝置上,ShuffleNet的速度比AlexNet快了13倍。
  4. 還存在什麼問題?
    • 超引數如組卷積的組數以及通道壓縮比率等需要根據實際情況決定,不同任務下需要自行調整。
    • 網路實時性並不能單純以浮點計算量來衡量,還存在memory access cost(MAC)等因素的干擾,並不能僅僅根據計算量就認為ShuffleNet是最快的。

2、論文概述

2.1、簡介

  • 作者發現,一些state-of-the-art的模型架構,如Xception、ResNeXt等,使用在小型網路模型中效率都比較低。這是因為使用大量的 1 × 1 1 \times 1 卷積會消耗大量計算資源。為此,提出了pointwise group convolution來減少計算複雜度。
  • 使用組卷積也會帶來一些副作用,因為組卷積切斷了組內通道與組外通道之間的聯絡,僅僅能從組內通道提取特徵資訊。為此,論文中又提出了 channel shuffle,來幫助資訊在各通道之間流通。

2.2、相關工作

  • 高效模型設計:
    • GoogLeNet
    • SqueezeNet
    • ResNet
    • SENet
    • NASNet
  • 組卷積(group convolution):
    • 最初由AlexNet提出,應用在2塊GPU上並行處理。
    • Xception中提出了深度可分離卷積(depthwise separable convolution)。
    • MobileNet中也使用到了深度可分離卷積。
  • Channel Shuffle
    • 此前的文獻中較少提及channel shuffle操作。
  • 模型加速
    • 目標是再保證模型準確率的前提下儘可能加速前向推理過程。
    • 常見方法:
      • 網路剪枝。
      • 量化和分解。
      • 知識蒸餾。

2.3、Channel Shuffle for Group Convolutions

  • 在小型網路中,逐點卷積(pointwise convolution)不僅會佔用較多計算資源並且還會讓通道之間具有過多複雜的約束,這會顯著地降低網路效能。在較大的模型中使用pointwise convolution也許相對好一些,然而小模型並不需要過多複雜的約束,否則容易導致模型難以收斂,並且容易陷入過擬合。
  • 一個解決辦法是:通道間稀疏連線(channel sparse connections)。使用組卷積可以一定程度上解決這個問題。
  • 但是,使用組卷積也會帶來副作用:資訊只會在組內流通,組間不會有資訊互動。為此,還需要使用channel shuffle來解決資訊不流通的問題。

在這裡插入圖片描述

  • channel shuffle操作:
    1. 假設一個卷積層上有 g g 組,每組有 n n 個通道,最後輸出就有 g × n g \times n 個通道。
    2. reshape成 ( g , n ) (g, n)
    3. 轉置成 ( n , g ) (n, g)
    4. 展開(flatten),再分成 g g 組,作為下一層的輸入。

2.4、Shuffle Unit

在這裡插入圖片描述

  • 圖(a)是殘差卷積模組,標準 3 × 3 3 \times 3 卷積轉換為深度可分離卷積與 1 × 1 1 \times 1 卷積的組合。中間加上BN和ReLU,構成基本單元。
  • 圖(b)是Shuffle Unit,將圖(a)中的第一個 1 × 1 1 \times 1 卷積替換成 1 × 1 1 \times 1 組卷積(GConv)和channel shuffle組成的單元。
  • 圖©是用於降取樣的Shuffle Unit,深度可分離卷積的步長改為2,為了適配主分支的feature map,在shortcut上加上了步長也為2的平均池化(AVG Pool 3 × 3 3 \times 3 )。
  • 雖然深度可分離卷積可以減少計算量和引數量,但在低功耗裝置上,與密集的操作相比,計算/儲存訪問的效率更差。故在ShuffleNet上只在bottleneck上有使用深度可分離卷積,儘可能的減少開銷。

2.5、網路架構

在這裡插入圖片描述

2.6、實驗

  • Pointwise Group Convolutions
    • 從結果來看,有組卷積的一致比沒有組卷積(g=1)的效果要好。注意組卷積可獲得更多通道間的資訊,我們假設效能提高受益於更多的feature map通道數,這也有助於我們對更多資訊進行編碼。並且,較小的模型的feature map通道也更少,這意味著能更多地從增加feature map上獲益。

在這裡插入圖片描述

  • Channel Shuffle vs. No Shuffle

在這裡插入圖片描述

  • Comparison with Other Structure Units

在這裡插入圖片描述

  • Comparison with MobileNets and Other Frameworks

在這裡插入圖片描述

在這裡插入圖片描述

  • Generalization Ability
    • 在MS COCO目標檢測任務上測試ShuffleNet的泛化和遷移學習能力,以Faster RCNN為例:

在這裡插入圖片描述

  • Actual Speedup Evaluation

在這裡插入圖片描述

3、參考資料

  1. https://blog.csdn.net/u011974639/article/details/79200559
  2. https://www.cnblogs.com/heguanyou/p/8087422.html