ShuffleNetV1 論文閱讀

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

ShuffleNetV1 於 2017 年提出,目的是為了改善 MobileNetV1 的逐點卷積 (Pointwise Convolution) 對於計算量的消耗。看到這邊可能覺得很奇怪,MobileNetV1 是使用深度可分離卷積 (Depthwise Separable Convolution) 來降低計算量的啊? 但由於輸入及輸出的通道數通常較大,所以大部分的計算量都會落在 Pointwise Convolution。

作者發現當時的 SOTA 模型 — 提出深度可分離卷積的 Xception 及提出組卷積 (Group Convolution) 的 ResNeXt 都沒有充分的使用 Pointwise Convolution,這是因為他需要相當大的計算複雜度,例如: ResNeXt 的 Pointwise Convolution 就佔了 93.4% 的 multiplication-adds。並且在小型網路中,大量的 Pointwise Convolution 會有明顯的效能下降。

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

Pointwise Group Convolutions with Channel shuffle

為了解決上述的問題,ShuffleNet 提出了 Pointwise Group Convolutions,就是指將 Pointwise Convolution 與 Group Convolution 進行融合,但是這樣的方法會導致另一個問題產生:通道之間的訊息只會在組內交流,而降低了通道間的流通造成準確度下降。因此 ShuffleNet 引入 channel shuffle 的機制。

從下圖1 可以看到 ShuffleNet 的兩種 channel shuffle 機制。圖 (a) 是傳統的組卷積架構;圖 (b) 為將前一個輸出的通道進行分配輸入到不同的組卷積中;而圖 (c) 則是更為高效優雅的操作機制。

再來講解一下圖 (c) 更為高效優雅的機制是怎麼進行的。假設卷積層分為 g 組,每組有 n 個通道,總共就會有 gxn 個通道輸出,接著將其 reshape 成 (g, n),再轉置為 (n, g),最後再進行 flatten 後分為 g 組做為下一層的輸入。此外,這樣的操作是可微的,能夠讓模型進行 end-to-end 訓練。

Shuffle Unit

接著來介紹 Shuffle Unit 的組成有哪些吧~ 看下圖 2 有兩種不同的 Shuffle Unit 結構。圖 (a) 是有 Depthwise Convolution (DwConv) 的 bottleneck unit;圖 (b) 是用於 stride=1 的 Shuffle unit,將第一層改為 Pointwise Group Convolutions (GConv),再接上 Channel shuffle,以及最後一層也改為 GConv (為了調整通道數與輸入通道數相同),且最後兩層都只使用 BN 層而不使用 ReLU;圖 © 則是 stride=2 的 Shuffle unit,用於特徵圖的降採樣,與 (b) 不同的地方為在 shortcut 中加入 3x3 平均池化層,以及將 DwConv stride 值改為 2,最後一層改使用 concat 來增加通道數 (只會增加少部分的計算量)

ShuffleNet 架構比起 ResNet 和 ResNeXt 具有更高效的運算,並且在相同的設置下,有較低的複雜度,可由下圖看到各自的 FLOPs。此外,ShuffleNet 中的 DwConv 只在 bottleneck feature maps 使用,因為作者發現在低功率的邊緣設備上較難有效率的實現。

Network Architecture

下表 1 為 ShuffleNet 的架構,由 3 個不同 stage 的 Shuffle unit 所組成。每個 stage 的第一個 block 都是使用 stride=2 的 Shuffle unit,且 bottleneck channels 設置為輸出通道的 1/4。

另外,作者將複雜度固定於大約 140 MFLOPs 時,可以看到組數越多的模型擁有更多的輸出通道,有利於網路獲得更多訊息 (這對於輕量模型來說很重要,因為輕量模型通常缺乏足夠的通道傳遞訊息)。

ShuffleNet 也跟 MobileNet 一樣可以設置縮放因子 s 來控制通道數。下表 2 中可以知道有組卷積比沒有組卷積 (g=1) 的結果還要好,並且對於特別小的網路來說,有越多的組數 (會有越多的通道數) 能獲得更好的效果,如 ShuffleNet 0.25x。

雖然組數越多通常能得到較好的結果,但還是有可能會有例外,如 ShuffleNet 0.5x。原因可能是因為分組太多會導致每個組卷積的輸入通道太少。

Experiment Result

作者在實驗中比較了有無使用 Channel shuffle、ShuffleNet unit 與其他架構的 units、在 ImageNet 分類上的結果。下表 5 為 ShuffleNet 與 MobileNet 在 ImageNet 分類的表現結果比較,由表中可知 ShuffleNet 的表現優於 MobileNet。

此外,作者也將 ShuffleNet 在 MS COCO 目標檢測上進行測試,表現結果還是優於 MobileNet。

作者在 ARM 上評估 ShuffleNet 的推理速度,雖然組數越多的模型通常可以得到越好的效果,但實現的效率較低,因此後來在準確率與速度之間 trade-off 選擇使用 g=3。由下表 8 得知 ShuffleNet 比其他模型的 FLOPs 低,速度還更快。另外,對於不同的通道縮放因子,降低約 4 倍的 FLOPs 可以提升約 2.6 的速度。

--

--