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使用廣泛,但其架構思想和實驗結論還是可以值得借鑒的。

?
?
?

如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】

work-life balance.

posted @ 2020-07-02 10:38  曉飛的算法工程筆記  閱讀(95)  評論(0編輯  收藏
最新chease0ldman老人