天天看點

輕量化神經網絡(1):SqueezeNet

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

    SqueezeNet追求的是在最少的參數量、最少的運算量即模型最小size下的高效神經網絡,其性能可以達到State_of_art的效果。

1. 小網絡的優勢

  • 更有效的分布式訓練
  • 部署到新的終端時更少的開銷
  • 對硬體十分友好,易于FPGA或者ASIC形式的硬體實作

2. SqueezeNet為實作更少的模型參數所提出的政策

  • 将3x3卷積用1*1卷積替換掉
  • 減少3*3卷積的輸入通道數
  • 下采樣的位置盡量往網絡模型後部分靠,以使網絡的卷積層獲得盡可能大的feature map(作者說是一種直覺,Our intuition is that large activation maps (due to delayed downsampling) can lead to higher classification accuracy, with all else held equal. )

是以,提出SqueezeNet的基本Module,如下

3. Fire module

輕量化神經網絡(1):SqueezeNet

  作者根據提到的減少參數量的思路設計了Fire Module,Fire Module包括squeeze層和expand層。顧名思義,squeeze就是來壓縮通道數的,以便竟如expand層的輸入可以有更少的輸入通道,進而減少參數量;而expand再将通道數擴張,expand包括了1x1的濾波器和3x3的濾波器,将兩者的輸出Concat在一起作為下一個Module的輸入,3x3卷積是加了zero_padding=1,stride=1剛好是的feature map的大小沒有變。expand采用了兩種濾波器應該是借鑒了Inception系列網絡的思想,進行多特征的融合以提高網絡的精度。Fire Module引入了三個參數s1、e1、e3,即squeeze層的1x1濾波器的數量和expand層的1x1濾波器和3x3濾波器的數量,文章在後面以這三個參數實驗了對于CNN網絡微架構的一些思考,後面再詳述。

4. SqueezeNet網絡結構

  網絡結構圖示如下:

輕量化神經網絡(1):SqueezeNet

  左圖是沒有Shortcut連接配接的網絡結構,中間是加簡單的Shorcut連接配接的SqueezeNet,右邊是加複雜Shortcut(complex bypass)的模型。網絡在conv1、fire4,fire8和conv10後加了stride為2的max-pooling層進行下采樣。在conv10後進行Global avgpool生成一維向量進行Softmax回歸分類。

  文章還給了多種架構實作SqueezNet的代碼連結。

5. SqueezeNet在ILSVRC2012上的結果
輕量化神經網絡(1):SqueezeNet

  文章标題SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size,model size小于0.5MB是因為采用的韓松等人的Deep Compression技術,未壓縮的模型大小應該是4.8MB,但是這也相比較于AlexNet小了50倍。從表中看,有意思的是采用Deep Compress對于SqueezeNet進行的8bit和6bit壓縮的top1與top5的精度盡然沒有一點下降。

5. 作者對于CNN微架構與宏觀架構的探索與思考
  • 微架構:前面提到Fir Module定義了三個超參數s1、e1、e3,然後8個Module就有24個超參數。在此部分,定義了SR(squeeze層濾波器數量與expand層所有濾波器總數量)和pct3x3(expand層3x3濾波器數量與expand層濾波器總數的比值),采用特定政策去Sweep搜尋,得到如下結果:
    輕量化神經網絡(1):SqueezeNet
  • 宏觀架構:作者借鑒ResNet網絡的Shortcut連接配接,在基礎SqueezeNet網絡架構的基礎引入了Simple Bypass和Complex Bypass,如前面網絡結構部分示意。
    輕量化神經網絡(1):SqueezeNet
    可以看到引入ShortCut連接配接是有用的,ShortCut的連接配接方式對于網絡的性能也有很大影響。

  輕量化網絡還有MobileNet,MobileNet v2,ShuffleNet,ShuffleNet v2,後續筆者會進一步學習整理,大家一起共同探讨學習。

PS:筆者後續會整理實作SqueezeNet的相關pytorch代碼,請關注