SqueezeNet模型參數降低50倍,壓縮461倍

DenseNet

CNN網絡從Lenet,Alexnet,Googlenet,VGG,Deep Residual LearningFractalNet,DenseNet 。網絡越來越深,越來越寬。參數越來越大。12G的顯存都不夠。在保存精度的同時,儘量減少參數很重要。這裏有很多方法,模型剪枝等,這裏從網絡設計上介紹。


本文講一下最新由UC Berkeley和Stanford研究人員一起完成的SqueezeNet[1]網絡結構和設計思想。SqueezeNet設計目標不是爲了得到最佳的CNN識別精度,而是希望簡化網絡複雜度,同時達到public網絡的識別精度。所以SqueezeNet主要是爲了降低CNN模型參數數量而設計的。OK,下面直奔主題了。

設計原則

(1)替換3x3的卷積kernel爲1x1的卷積kernel

卷積模板的選擇,從12年的AlexNet模型一路發展到2015年底Deep Residual Learning模型,基本上卷積大小都選擇在3x3了,因爲其有效性,以及設計簡潔性。本文替換3x3的卷積kernel爲1x1的卷積kernel可以讓參數縮小9X。但是爲了不影響識別精度,並不是全部替換,而是一部分用3x3,一部分用1x1。具體可以看後面的模塊結構圖。

(2)減少輸入3x3卷積的input feature map數量 
如果是conv1-conv2這樣的直連,那麼實際上是沒有辦法減少conv2的input feature map數量的。所以作者巧妙地把原本一層conv分解爲兩層,並且封裝爲一個Fire Module。

(3)減少pooling 
這個觀點在很多其他工作中都已經有體現了,比如GoogleNet以及Deep Residual Learning。

Fire Module

Fire Module是本文的核心構件,思想非常簡單,就是將原來簡單的一層conv層變成兩層:squeeze層+expand層,各自帶上Relu激活層。在squeeze層裏面全是1x1的卷積kernel,數量記爲S11;在expand層裏面有1x1和3x3的卷積kernel,數量分別記爲E11和E33,要求S11 < (E11+E33)即滿足上面的設計原則(2)。expand層之後將1x1和3x3的卷積output feature maps在channel維度拼接起來。

這裏寫圖片描述

總體網絡架構

直接上圖說(左邊的狗狗很憂傷啊): 
這裏寫圖片描述

看圖就很明朗了,總共有9層fire module,中間穿插一些max pooling,最後是global avg pooling代替了fc層(參數大大減少)。在開始和最後還有兩層最簡單的單層conv層,保證輸入輸出大小可掌握。

下圖是更詳細的說明:非常清楚,就不再囉嗦了。 
這裏寫圖片描述

實驗結果

主要在imagenet數據上比較了alexnet,可以看到準確率差不多的情況下,squeezeNet模型參數數量顯著降低了(下表倒數第三行),參數減少50X;如果再加上deep compression技術,壓縮比可以達到461X!還是不錯的結果。不過有一點,用deep compression[2]是有解壓的代價的,所以計算上會增加一些開銷。

這裏寫圖片描述

思考

SqueezeNet之前我就在研究如果降低網絡規模,SqueezeNet印證了小得多的網絡也可以到達很好的CNN識別精度。相信以後會出現更多小網絡,做到state-of-the-art的精度。好,本篇就介紹到這裏,希望對大家有啓發,有的話請支持一下我博客哈!~謝謝!

參考資料

[1] SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size,2016 
[2] Deep compression: Compressing DNNs with pruning, trained quantization and huffman coding, 2015


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章