1. 程式人生 > 實用技巧 >SqueezeNet/SqueezeNext簡述 | 輕量級網路

SqueezeNet/SqueezeNext簡述 | 輕量級網路

SqueezeNet系列是比較早期且經典的輕量級網路,SqueezeNet使用Fire模組進行引數壓縮,而SqueezeNext則在此基礎上加入分離卷積進行改進。雖然SqueezeNet系列不如MobieNet使用廣泛,但其架構思想和實驗結論還是可以值得借鑑的。



來源:曉飛的演演算法工程筆記 公眾號

SqueezeNet


論文: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

Introduction

  在深度學習嶄露頭角時候,很多研究都關注如何提高網路的準確率,而SqueezeNet則是早期開始關注輕量化網路的研究之一。論文的初衷是通過優化網路的結構,在與當前流行網路的準確率相差不大的情況下,大幅減少模型的引數。

SqueezeNet: Preserving Accuracy with Few Parameters

  • Architectural Design Strategies

  論文的輕量級網路設計主要包含以下策略:

  1. 替換$3\times 3$卷積為$1\times 1$卷積,由於$1\times 1$卷積比$3\times 3$卷積有9倍的引數減少。
  2. 減少$3\times 3$卷積的輸入維度,$3\times 3$卷積的總引數量為(number of input channels)(number of filters)
    (3*3),使用squeeze layers降低輸入維度,能夠降低整體的計算量。
  3. 下采樣操作儘量安排在網路較後的階段,這樣卷積層能夠有較大的特徵圖,儲存更多的資訊,從而提高準確率。

  策略1和策略2主要為了減少網路的引數但保持準確率,策略3則是為了在有限的引數下最大化準確率。

  • The Fire Module

  SqueezeNet的核心模組為Fire模組,結構如圖1所示,輸入層先通過squeeze卷積層($1\times 1$卷積)進行維度壓縮,然後通過expand卷積層($1\times 1$卷積和$3\times 3$卷積混合)進行維度擴充套件。Fire模組包含3個引數,分別為squeeze層的$1\times 1$卷積核數$s_{1x1}$、expand層的$1\times 1$卷積核數$e_{1x1}$和expand層的$3\times 3$卷積核數$e_{3x3}$,一般$s_{1x1}<(e_{1x1}+e_{3x3})$

  • The SqueezeNet Architecture

  SqueezeNet的結構如表1所示,在conv1、fire4、fire8和conv10後新增池化層進行池化操作,網路中逐步提高輸出維度。每個squeeze層和expand層的輸出都通過ReLU啟用,而fire9模組後面會接50%的Dropout。

Evaluation of SqueezeNet

  與AlexNet相比,相同準確率下,SqueezeNet僅需要1/50的引數量,量化後,最多可以縮小到1/510的引數量。

CNN Microarchitecture Design Space Exploration

  論文對Fire模組的設定進行了探索實驗,主要對比squeeze層的壓縮比例以及expand層中的$3\times 3$卷積佔比。

CNN Macroarchitecture Design Space Exploration

  論文對網路的微架構進行了探索實驗,主要是研究短路連線對網路的影響,對比的網路結構如圖2所示。

Conclusion

  SqueezeNet作為早期的輕量級網路研究工作,雖然準確率對比的是AlexNet,但其網路壓縮比是相當可觀的,Fire模組的設計也十分新穎。

SqueezeNext


論文: SqueezeNext: Hardware-Aware Neural Network Design

Introduction

  SqueezeNext是SqueezeNet實戰版升級,直接和MobileNet對比效能。SqueezeNext全部使用標準卷積,分析實際推理速度,優化的手段集中在網路整體結構的優化。

SqueezeNext Design

  SqueezeNext的設計沿用殘差結構,沒有使用當時流行的深度卷積,而是直接使用了分離卷積,設計主要基於以下策略:

  • Low Rank Filters

      低秩分解的核心思想就是將大矩陣分解成多個小矩陣,這裡使用CP分解(Canonical Polyadic Decomposition),將$K\times K$卷積分解成$K\times 1$和$1\times K$的分離卷積,引數量能從$K^2$降為$2K$。

  • Bottleneck Module

      引數量與輸入輸出維度有關,雖然可以使用深度卷積來減少計算量,但是深度卷積在終端系統的計算並不高效。因此採用SqueezeNet的squeeze層進行輸入維度的壓縮,每個block的開頭使用連續兩個squeeze層,每層降低1/2維度。

  • Fully Connected Layers

      在AlexNet中,全連線層的引數佔總模型的96%,SqueezeNext使用bottleneck層來降低全連線層的輸入維度,從而降低網路引數量。

  基礎的1.0-SqNxt-23結構如圖3所示,中間的block均為SqueezeNext block,第一個block為正常的卷積,最後兩個block分別為bottleneck模組以及全連線層。

Result

  論文對比了不同網路以及不同版本的SqueezeNext,包括不同的網路長度,以及加入不同的結構。表中的1.0代表基礎的層維度設定,G代表卷積的group size設定為2,後面的數字為總層數,IDA代表使用Iterative Deep Aggregation,融合多層進行輸出。

  另外論文也對比了更寬的網路的效能,對維度進行了倍數放大。

  v5的結構如圖9,在模擬硬體效能實驗結果中發現,維度越低,計算效能也越低效,於是將更多的層操作集中在維度較高的block。

Conclusion

  SqueezeNext在SqueezeNet的壓縮思想上,結合分離卷積進行引數壓縮改進,文中的模擬硬體推理效能的實驗做的很精彩,可以看到作者如何一步一步地改進網路的整體結構,有興趣的可以去看看原文。

CONCLUSION


  SqueezeNet系列是比較早期且經典的輕量級網路,SqueezeNet使用Fire模組進行引數壓縮,而SqueezeNext則在此基礎上加入分離卷積進行改進。雖然SqueezeNet系列不如MobieNet使用廣泛,但其架構思想和實驗結論還是可以值得借鑑的。





如果本文對你有幫助,麻煩點個贊或在看唄~

更多內容請關注 微信公眾號【曉飛的演演算法工程筆記】