ShuffleNet_v1模型解讀

導言

shuffleNet_v1在MobileNet_v1後,MobileNet_v2前提出。ShuffleNet系列也是針對移動端部署而提出的模型。ShuffleNet_v1結合了depthwise separable convolution和group convolution,提出了包含pointwise group convolution 和channel shuffle兩項操作的ShuffleNet Unit。其中depthwise separable convolution來源於Xception,group convolution概念來源於AlexNet, 在ResNeXt和DeepRoots中得到很好的應用。

在Xception和ResNeXt中使用了depthwise separable convolutions或group convolution來構建Block,以便平衡模型的表示能力和計算量。但這兩者都沒有完全考慮1x1卷積,因為它需要比較大的複雜性。例如,ResNeXt中group convolution只使用了3x3,這導致ResNeXt中的residual單元中的點卷積佔了93。4%。在小網路中,由於記憶體限制,昂貴的點卷積只能使用有限的通道數,這可能會影響精度。

為了解決這個問題,shufflenet提出了通道稀疏連線。即在卷積過程中將通道數分成g組,每組只在子組內部進行連線。如下左圖所示為正常的通道上的連線,右圖為分組後的通道連線。

ShuffleNet_v1模型解讀

這樣的分組會出現一個問題,如果分組太多,將導致輸出層的每層通道都直接從上一層某一個或幾個通道卷積而來(如下左圖所示),這將會阻止通道組之間的資訊流動並削弱模型的表示能力。解決的辦法就是讓不同組進行連線(如下圖中所示),讓不同通道組的資訊充分流動。

ShuffleNet_v1模型解讀

而shuffleNet中提出更好的辦法就是直接將組的順序打亂(如上圖右所示),再進行按組連線。注意:這樣打亂順序後仍然是可微的,因此這中結構可嵌入網路模型進行端到端訓練。

ShuffleNet Unit

ShuffleNet中使用了殘差連線,ShuffleNet Unit在殘差連線的基礎上調整而來。

ShuffleNet_v1模型解讀

左圖為殘差單元,shuffleNet Unit將1x1 卷積替代為1x1分組卷積,並在shortcut path上添加了3x3平均池化,並將逐元素相加代替為通道拼接,這樣可以擴大通道數尺寸而不用增加計算成本。此外,shuffleNet Unit取消了Depthwise convolution後的ReLU, 最早是Xception中提出只能使用線性變換,而MobileNet_v2中解釋了在Depthwise conv後使用ReLU會丟失較多的資訊。因此,最終的ShuffleNet Unit如右圖所示。

ShuffleNet Unit相比於ResNet和ResNeXt,計算量減少了很多,因此在同樣的計算量下,ShuffleNet可使用更寬的feature map。

如給定通道數為C, feature map大小為H x W, bottleneck channels為M, 則ResNet的計算量為HW( 2CM + 9M^2) FLOPs,ResNeXt的計算量為 HW( 2CM + 9M^2/g),而ShuffleNet Unit的計算量為 HW( 2CM/g + 9M) FLOPs,這裡g是分組的數量。這裡計算量可根據上方三個圖來計算,如仍不知怎樣得來的,可看FLOPS與FLOPs的區別,介紹瞭如何計算FLOPs。

此外,即便depthwise conv在理論上有較低的複雜性,但實際上它很難在低功耗移動裝置上有效實施,這可能是由於與其他密集操作相比,計算/記憶體訪問比更差。因此,在ShuffleNet Unit中depthwise conv僅僅在bottleneck上使用,以儘可能地減少開銷。

ShuffleNet結構

ShuffleNet_v1模型解讀

最後一欄的Complexity是FLOPs,在Stage2,在第一個點卷積層沒有使用分組卷積,這是因為輸入通道數相當小。每一Stage都在上一Stage的通道數上加倍。g越大表示在有限的計算量中編碼資訊越多,但不能太大,否則會出現前面提到的問題。

結構

ShuffleNet_v1模型解讀

這裡ShuffleNet後的數字表示卷積核數的比例因子s。這個比例因子s可用來控制模型大小。計算量會是原來的s^2倍。

ShuffleNet_v1模型解讀

實驗證明分組數越多,錯誤率會越低,且有shuffle比沒有shuffle錯誤率更低。

ShuffleNet_v1模型解讀

ShuffleNet比同計算量的其他模型錯誤率更低。

ShuffleNet_v1模型解讀

ShuffleNet2x比MobileNet_v1效果更好(計算量更少,且錯誤率更低)。