【論文閱讀】【ICLR 2017】SqueezeNet AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size
SqueezeNet AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size
SqueezeNet
- 是一種網路結構,準確率與AlexNet相當(ImageNet資料集上),但引數量減少50倍。
- 同時,該網路通過壓縮技術可以小於0.5mb,比AlexNet小510倍
本文主要內容:
- 介紹related work
- 描述並評估SequeezeNet Architecture
- 介紹CNN結構的model size和accuracy的選擇
- 探索CNN巨集觀結構與微觀結構。(微觀:模型各層的組織和維度,巨集觀:CNN的所有層的高層組織)
Motivation
- 更小的模型在分散式訓練的時候更加高效
- 服務端與客戶端之間的模型傳輸更加方便快捷。
- 在FPGA等嵌入式環境下部署更加可行。
Related Work
- 要想模型引數少,最首要的工作就是模型壓縮:SVD、Network Pruning、DeepCompression、EIE
- CNN微觀結構:5x5 filters,VGG-3x3 filters,1x1 filters。隨著網路加深,手工為每個層選擇filter維度變得很麻煩,出現了許多block或者modules,如GooLeNet的Inception modules等
- 巨集觀上研究最多的應該是網路深度的影響,當然還有一些旁路連線的設計(bypass connections)。
SueezeNet
為了保證準確率且減少引數,本文設計CNN的時候的三個策略:
- 用1x1卷積核代替3x3 filters。這樣filters數目固定情況下,引數少了9倍
- 減少輸入通道至3x3 filters。一個完全由3x3卷積核組成的層,引數有(輸入通道數)x(filter數目)x(3x3).所以除了減少上一條說的3x3的卷積數(用1x1替代,那3x3就少了),還應該減少輸入通道。本文用squeeze layers來減少輸入通道。
- 在網路的後面層才Downsample,這樣卷積層(前面的)具有更大的啟用圖(特徵圖)。這個策略是出於準確率考慮的,更大的啟用圖通常都會有更好的分類效果。
Fire Module
Fire Module是本文實現上述三個策略的CNN結構的building block(網路結構塊)。
Fire Module = squeeze layer + expand layer
- squeeze layer:全部採用1x1,數目為S1x1個
- expand layer:存在e1x1個1x1的卷積核,e3x3個3x3的卷積核。
- 使用1x1的卷積核源於上述策略1,使s1x1<(e1x1 + e3x3),源於策略2,使得squeeze layer限制了3x3的filter的輸入通道。
SqueezeNet Architecture
結構:input —— conv1(max-pooling,stride=2)—— fire modules(2—9,且fire4,fire8後接max-pooling)—— conv10(avg-pooling,stride=2)—— softmax
遵照策略3,pooling僅在conv1和fire4,fire8和conv10之後存在。fire module中的filter數量逐漸增加。
下圖展示3中SqueezeNet結構,最左邊就是上述的結構,後兩種是with bypass的方案。
Other SqueezeNet Details
SqueezeNet結構設計中的其他細節和選擇如下表所示
details:
- 為了讓Fire Module中1x1和3x3的filter具有相同的輸出維度,在3x3filter的輸入資料上增加1畫素的zero-padding
- ReLU在squeeze和expand layer後都執行。
- 在fire9之後採用50%Dropout
- 沒有FC層
- 訓練時,初始lr=0.04,之後按照論文《Systematic evaluation of cnn advances on the imagenet》描述的方案進行線性減少學習率。具體細節檢視training protocol。solver.prototxt
- Caffe框架不支援包含多種卷積核的網路層,所以,本文通過兩個獨立的卷積層實現expand layer,之後再在channel維度上concatenate這兩個卷積層的輸出即可。這等同於一個層包含兩種(1x1、3x3)filter
Evaluation of SqueezeNet
該部分主要評估壓縮模型及其效能。本質上內容有些突兀。結論是想SqueezeNet這樣的小模型依然可以被壓縮。 by combining CNN architectural innovation (SqueezeNet) with state-of-the-art compression techniques (Deep Compression), we achieved a 510× reduction in model size with no decrease in accuracy compared to the baseline.
SqueezeNet + DeepCompression,得到比AlexNet小510倍同時保證準確度不變的模型!
CNN結構設計空間探索
SqueezeNet和其他的models仍然處在一個未知的CNN結構設計空間中(簡單說就是沒有什麼具體的設計準則,已有模型仍然在摸索中)。
本文就這個問題做出探索,分為兩部分
- 微觀結構:關注單個神經網路層的維度和配置
- 巨集觀結構:端到端的組織架構
MicroArchitecture (微觀)
-
Meta Parameters:結構探索時,設計了一些關於expand layer的filter數的變化的引數,1x1,3x3的filter的數量的係數,總之就是實驗時的結構變數。
-
Squeeze Ratio:squeeze layer的filters數目與expand filters的數目之比。關於不同SR與準確率及模型大小的實驗結果如下
-
Trading Off 1x1 and 3X3 filters:之前的模型,如VGG大量使用3x3卷積核,而GoogleNet和NiN使用1x1和3X3卷積核,但沒有進行分析原因。這裡我們對卷積核大小對模型大小和準確率影響做了闡述。
MacroArchitecture(巨集觀)
巨集觀結構上,借鑑ResNet,我們探討了3種結構
- SqueezeNet
- 帶有簡單旁路的SqueezeNet
- 帶有複雜旁路的SqueezeNet
三種結構如上圖2所示。
可見添加了旁路的結構準確率更高,作者認為:SqueezeNet通過Squeeze Layer減少8x的output channel(相比單純的expand layer),大量的引數減少意味著通過SqueezeNet的資訊受到限制,但是旁路的使用為資訊的傳遞開闢了道路。