ShuffleNet系列之ShuffleNet_v1

導言:微信

      shuffleNet_v1在MobileNet_v1後,MobileNet_v2前提出。ShuffleNet系列也是針對移動端部署而提出的模型。網絡

  ShuffleNet_v1結合了深度可分離卷積和分組卷積,提出了包含pointwise group convolution 和channel shuffle兩項操做的ShuffleNet Unit。其中depthwise separable convolution來源於Xception,分組卷積概念來源於AlexNet, 在ResNeXt和DeepRoots中獲得很好的應用。編碼

 

Shuffle channels for group convolution

        在Xception和ResNeXt中使用了depthwise separable convolutions或group convolution來構建Block,以便平衡模型的表示能力和計算量。但這二者都沒有徹底考慮1x1卷積,由於它須要比較大的複雜性。例如,ResNeXt中group convolution只使用了3x3,這致使ResNeXt中的residual單元中的點卷積佔了93.4%。在小網絡中,因爲內存限制,昂貴的點卷積只能使用有限的通道數,這可能會影響精度。3d

 

       爲了解決這個問題,shufflenet提出了通道稀疏鏈接。即在卷積過程當中將通道數分紅g組,每組只在子組內部進行鏈接。以下左圖所示爲正常的通道上的鏈接,右圖爲分組後的通道鏈接。blog

 

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

 

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

 

ShuffleNet Unit

ShuffleNet中使用了殘差鏈接,ShuffleNet Unit在殘差鏈接的基礎上調整而來。博客

      左圖爲殘差單元,shuffleNet Unit將1x1 卷積替代爲1x1分組卷積,並在shortcut path上添加了3x3平均池化,並將逐元素相加代替爲通道拼接,這樣能夠擴大通道數尺寸而不用增長計算成本。此外,shuffleNet Unit取消了Depthwise convolution後的ReLU, 最先是Xception中提出只能使用線性變換,而MobileNet_v2中解釋了在Depthwise conv後使用ReLU會丟失較多的信息,我在公衆號中詳細介紹了MobileNet_v2關於使用ReLU會丟失信息的內容,可關注公衆號瞭解。所以,最終的ShuffleNet Unit如右圖所示。it

 

    ShuffleNet Unit相比於ResNet和ResNeXt,計算量減小了不少,所以在一樣的計算量下,ShuffleNet可以使用更寬的feature map。io

    如給定通道數爲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結構

 

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

結論

 

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

 

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

 

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

 

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

 

若有錯誤或疑問,歡迎留言指出。

本文來源於微信公衆號「 CV技術指南 」 。如有錯誤或疑問,歡迎在公衆號中留言指出。

歡迎關注公衆號「CV技術指南」,主要進行計算機視覺方向的論文解讀,最新技術跟蹤,以及CV技術的總結。

原創文章第一時間在公衆號中更新,博客只在有空時間才更新公衆號文章

相關文章
相關標籤/搜索