深度學習方法(七):最新SqueezeNet 模型詳解,CNN模型引數降低50倍,壓縮461倍!

NO IMAGE

歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。


繼續前面關於深度學習CNN經典模型的整理,之前介紹了CNN網路Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning(點選檢視)的網路結構。

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

設計原則

(1)替換3×3的卷積kernel為1×1的卷積kernel

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

(2)減少輸入3×3卷積的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層裡面全是1×1的卷積kernel,數量記為S11;在expand層裡面有1×1和3×3的卷積kernel,數量分別記為E11和E33,要求S11 < input map number即滿足上面的設計原則(2)。expand層之後將1×1和3×3的卷積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