超輕量級網絡SqueezeNet網絡解讀


SqueezeNet網絡模型非常小,但分類精度接近AlexNet。

 

這里復習一下卷積層參數的計算

輸入通道ci,核尺寸k,輸出通道co,參數個數為:

以AlexNet第一個卷積為例,參數量達到:3*11*11*96=34848

 

基礎模塊

包含三個卷積層(藍色),步長為1,分為squeeze和expand兩部分,分別壓縮和擴展數據(灰色矩形)的通道數

expand部分中,兩個不同核尺寸的結果通過串接層(黃色)合並輸出

fire模塊有三個可調參數:

- s1:squeeze部分,1x1卷積層的通道數

- e1:expand部分,1x1卷積層的通道數

- e3:expand部分,3x3卷積層的通道數

輸入輸出尺寸相同。輸出通道數不限,輸出通道數為e1+e3

在本文提出SqueezeNet結構中,

 

網絡結構

整個網絡包含10層

第1層為卷積層,縮小輸入圖像,提取96維特征

第2到9層為fire模塊,每個模塊內部先減少通道數(squeeze)再增加通道數(expand)。每兩個模塊之后,通道數會增加

在1、4、8層之后加入降采樣的max pooling,縮小一般尺寸

第10層又是卷積層,為小圖的每個像素預測1000類分類得分

最后用一個全圖average pooling得到這張圖的1000類得分,使用softmax函數歸一化為概率

 

這是一個全卷積網絡,避免了如今越來越不受待見的全連接層。由於最后一層提供了全圖求平均操作,可以接受任意尺寸的輸入。當然,輸入還是需要歸一化大致相當的尺寸,保持統一尺度

全連接層的參數多,對性能提升幫助不大,現在往往被pooling代替

這個網絡達到了和AlexNet相當的分類精度,但模型縮小了50倍

architecture model size top-1 accuracy top-5 accuracy
AlexNet 240MB 57.2% 80.3%
SqueezeNet 4.8MB 57.5% 80.3%

網絡設計的要點

1. 為了使1x1和3x3filter輸出的結果有相同的尺寸,在expand modules中,給3x3filter的原始輸入添加一個像素的邊界(zero-padding)

2. squeeze和expand layers中都是用ReLU作為激活函數

3. 在fire9 module之后,使用Dropout,比例取50%

4. 訓練過程中,初始學習率設為為0.04,在訓練過程中線性降低學習率

5. 由於caffe中不支持使用兩個不同尺寸的filter,在expand layer中實際上使用了兩個單獨的卷積層(1x1filter和3x3filter),最后將這兩層的輸出連接在一起,這在數值上等價於使用單層但是包含兩個不同尺寸的filter

 

當然SqueezeNet還可以繼續壓縮,使模型更小。SqueezeNet采用了一些deep-compression的方法,比如裁剪,量化和編碼

裁剪:設置閾值,對於小於閾值的參數直接寫0,然后用非零參數再次訓練

量化:對參數做聚類,然后每個類別的參數的梯度值相加,作用在聚類中心上

編碼:Huffman編碼進一步壓縮存儲

參考:

超輕量級網絡SqueezeNet算法詳解

SqueezeNet詳細解讀

輕量化模型:SqueezeNet,MobileNet,ShuffleNet以及Xception

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM