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

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


繼續前面關於深度學習CNN經典模型的整理,以前介紹了CNN網絡Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning(點擊查看)的網絡結構。markdown

本文講一下最新由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。.net

(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 < input map number即知足上面的設計原則(2)。expand層以後將1x1和3x3的卷積output feature maps在channel維度拼接起來。blog

這裏寫圖片描述

整體網絡架構

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

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

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

實驗結果

主要在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

相關文章
相關標籤/搜索