輕量化網路:SqueezeNet
SqueezeNet 發表於ICLR-2017,作者分別來自Berkeley和Stanford,SqueezeNet不是模型壓縮技術,而是 “design strategies for CNN architectures with few parameters”
創新點:
1. 採用不同於傳統的卷積方式( 類似於inception思想) ,提出fire module;fire module包含兩部分分:squeeze層+expand層
創新點inception的思想太接近,應該不算是突破性的。首先squeeze層,就是1*1卷積,其卷積核數要少於上一層feature map數,這個操作從inception系列開始就有了,並稱之為壓縮,但我覺得“壓縮”更為妥當。
Expand層用1*1 和3*3 分別卷積,然後concat,這個操作再inception系列裡面也有啊。。。
——————————————分割線————————————-
SqueezeNet的核心在於Fire module,Fire module 由兩層構成,分別是squeeze層+expand層,如下圖所示,squeeze層是一個1*1卷積核的卷積層,expand層是1*1 和3*3卷積核的卷積層,expand層中,把1*1 和3*3 得到的feature map 進行concat,具體操作如下圖2所示
Fire module輸入的feature map為H*W*M的,輸出的feature map為H*M*(e1+e3),可以看到feature map的解析度是不變的,變的僅是維數,也就是通道數,這一點和VGG的思想一致。
首先,H*W*M的feature map經過Squeeze層,得到S1個feature map,這裡的S1均是小於M的,以達到“壓縮”的目的,詳細思想可參考Google的Inception系列。
其次,H*W*S1的特徵圖輸入到Expand層,分別經過1*1卷積層和3*3卷積層進行卷積,再將結果進行concat,得到Fire module的輸出,為 H*W*(e1+e3)的feature map。
fire模組有三個可調引數:S1,e1,e3,分別代表卷積核的個數,同時也表示對應輸出feature map的維數,在本文提出的SqueezeNet結構中,e1=e3=4s1
接下來看squeezenet.網路結構:
首先經過conv1,之後是fire2-9,最後是一個conv10,最終採用global avgpool代替FC層進行輸出;
更詳細引數如下圖所示:
看看squeezenet與alexnet的對比:
這裡採用了deep compression技術,對squeezenet進行了壓縮,最終才會得到0.5M的模型,並且模型效能還不錯;
Deep compression是ICLR-2016 best paper!詳細見:
(https://arxiv.org/pdf/1510.00149.pdf)
看了上圖再回頭看一看論文題目:
SqueezeNet :AlexNet-level accuracy with 50x fewer parameters and <0.5MB
Squeezenet比alexnet引數少50倍,這個沒問題,上圖倒數第三行可見;但是, and < 0.5MB, 這個和squeezenet完全沒關係啊!是用了別的技術獲得的。很容易讓人誤以為squeezenet可以壓縮模型!!