ShuffleNetV2 論文閱讀

李謦伊
謦伊的閱讀筆記
8 min readApr 15, 2021

ShuffleNetV2 是基於 ShuffleNetV1 做改進的,目的是為了改善模型的推理速度,收錄於 ECCV2018。當時的模型設計主要是根據計算複雜度,而複雜度常用的標準為 FLOPs,但對於推理速度只是一種間接指標,並不能作為速度的評判標準。

📝 Paper: https://arxiv.org/abs/1807.11164

接下來看一下 ShuffleNetV2 與其他模型的表現圖~ 從圖 1 中可看到 ShuffleNetV2 優於其他模型,以及在相同 MFLOPs 下模型的速度會有所差異,在不同的硬體架構上速度也不同。由此得知僅使用 FLOPs 作為設計模型的指標是不夠的。

作者指出間接指標 FLOPs 與直接指標 speed 存在的差異可能有兩種原因:

1. FLOPs 沒有考慮到可能對速度影響的重要因素

  • MAC (memory access cost): 像是組卷積 (group convolution) 的架構會佔了大量的運行時間。
  • 平行度 (degree of parallelism): 指電腦可同時執行多少個運算操作的度量。在相同 FLOPs 下,具有高平行度模型的速度可能比低平行度的模型快。

2. 在不同的硬體架構上運行: 在相同 FLOPs 下,不同的硬體平台速度也會有所差異。

因此作者將會遵循這兩種原因對各個模型進行評估。

Practical Guidelines for Efficient Network Design

作者針對上述的兩種原因提出了四個對高效能的網路設計 Guidelines

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

G1 是指將輸入與輸出通道數保持相同即可最小化 MAC。假設有一 1x1 卷積層, 輸入通道為 c1, 輸出通道為 c2, 特徵圖高寬分別為 h, w,其 FLOPs: B = h x w x c1 x c2,MAC = h x w x (c1+c2) + c1 x c2

藉由算幾不等式得到以下式子,

代入 MAC

由 1 式可知,當輸入與輸出通道數相等時,即 c1 = c2,MAC 最小。以下實驗結果也驗證當 c1:c2 = 1:1 時,MAC 變小,推理速度也較快。

📌 G2) Excessive group convolution increases MAC

G2 是指使用過多的組卷積反而會增加 MAC。在說明為何會增加 MAC 之前,先來複習一下: 使用組卷積的好處是能夠降低大量的 FLOPs。並且在固定 FLOPs 的情況下,可增加更多的通道數以提升網路準確率。但是增加通道數可能導致產生更多的 MAC

接下來一樣用數學式來表示,假設有一 1x1 卷積層, 輸入通道為 c1, 輸出通道為 c2, 特徵圖高寬分別為 h, w, 分組數為 g

由 2 式可知,假設 h, w, c1, B 固定的情況下,g 與 MAC 成正比,因此 MAC 會隨著分組數的增加而變大。

以下實驗結果也驗證當使用更大的組數會降低推理速度,因此作者建議組數應根據應用的硬體平台來選擇。

📌 G3) Network fragmentation reduces degree of parallelism

G3 是指網路的碎片化 (Fragmentation) 會降低平行度,對於強大平行化運算的設備不友好。Fragmentation 指在多個分支結構上使用許多的小型運算符 (卷積層或池化層等),類似 Inception 架構。雖然 Fragmentation 能提升準確率,但在高平行化運算下會降低效率。

作者做了一些實驗來評估不同碎片化程度的網路,其中 series 為卷積層疊加,parallel 為卷積層併行。結果表明在 GPU 上採用 parallel 的效率會大幅降低,而在 ARM 上降低效率的程度較小。

📌 G4) Element-wise operations are non-negligible

G4 是指 Element-wise 的操作也會帶來 MAC 的增加,其中 Element-wise 包括 ReLU, AddTensor, AddBias 等。

下圖 2 是 ShuffeNetV1 和 MobileNetV2 在 GPU, ARM 上的 Runtime,可以注意到 FLOPs 指標僅考慮到卷積運算,雖然大部分的時間都消耗在卷積運算,但在 Element-wise 操作上也需要花費相當多的時間,尤其是使用 GPU。

以下實驗是對於 ResNet bottleneck 進行有無 ReLU, shortcut 的效率比較。可觀察到刪除 ReLU, shortcut 後,在 GPU, ARM 上能夠獲得 20% 的加速。

Shuffle V2 Unit

基於上述的四種分析,作者基於 ShuffleNetV1 進行改進。

下圖 (a), (b) 為 ShuffleNetV1 的結構,pointwise group convolutions 和 bottleneck 違反了 G1, G2,並且有太多的組數 (違反 G3),以及 shortcut 的 element-wise add 運算也可以刪除 (違反 G4)。

接下來看改進後的 ShuffleNetV2,如圖 (c)

  • 首先引入 Channel Split,將輸入分為兩個部分,一半的輸入通道 (channels = c’) 送進卷積層,另一半 (channels = c-c’) 則是一般的 shortcut,其中為了簡單表示,c’ 設定為 c/2。如此一來可滿足 G2 減少分組數 (由 Channel Split 先進行分組),也滿足 G3 減少小型運算符 (在 shortcut 中不做任何事情)。
  • 右邊分支的卷積運算具有相同的輸入輸出通道,滿足 G1。
  • 分支合併採用 concat 取代 element-wise add 且刪除 ReLU (把 ReLU 移至右邊分支的最後一層卷積),滿足 G4。
  • 最後再進行Channel Shuffle,且 Channel Shuffle, Channel Split 及 concat 都被合併為單一的元素操作,滿足 G4。

圖 (d) 為 ShuffleNetV2 針對空間下採樣的部分進行修改,並沒有加入 Channel Split 的部分,因此輸出的通道數會是兩倍。此外,右邊分支的組卷積也改為一般的卷積層,左邊分支也替換為 Depthwise Convolution (DwConv) 和 1x1 卷積層。

Network Architecture

下表 5 為 ShuffleNetV2 的架構,整體與 ShuffleNetV1 類似,差別在於 GlobalPool 前多了一個 1x1 卷積層。

Experiment Result

作者將 ShuffleNetV2 用於大型網路上進行比較 (FLOPs ≥ 2G),或是用於非常深的模型 (超過 100 layers),由以下結果可看到 ShuffleNetV2 在相同或是更少的 FLOPs 下,能實現較低的 Top-1 error。

也有比較與 ShuffleNetV1, MobileNetV2, Xception, DenseNet 等模型的 MFLOPs, 在 ImageNet 分類上的結果以及不同硬體平台的推理速度,詳細結果可參考論文的表 8。

此外,也在 MS COCO 目標檢測上進行測試,ShuffleNetV2 的表現優於其他模型。

--

--