Squeez-Net
SqueezeNet于2016年提出,其主要目的是在保證當時已有的模型準確度的同時減少CNN模型中的參數。原文地址:SqueezeNet:AlexNet-Level accuracy with 50X fewer parameters and <0.5MB model size
1. Abstract
在深度卷積神經網絡的研究主要的關注點是提升其準確度。在給定準確度水平的條件下,通常可以識別多個達到該精度級別的CNN體系架構。在同等精度條件下,較小的CNN架構至少有三個優點:
(1) 在分布式訓練中小模型在服務器中的通信量更少,分布式訓練更加高效,因為在服務器間的通信是分布式CNN訓練的可擴展性的限制因素。
(2) 便于模型的更新,在從云端導入到客戶端時需求帶寬更少
(3) 小模型部署在FPGA硬件上更靈活,因為這些硬件內存有限。因為FPGA通常來講片上存儲器少于10MB,并且不具有片外存儲器或儲存器。
作者提出具備以上優點的小型模型:SqueezeNet。SqueezeNet在ImageNet數據集上實現了和AlexNet相當的準確度,但是少了50倍的參數。而且,SqueezeNet也采用了模型壓縮的方法,這樣就可以把SqueezeNet壓縮至0.5MB以下,這比AlexNet小了510倍。作者定義了CNN microarchitecture(CNN微觀架構)和CNN macroarchitecture(CNN宏觀架構)兩個概念,分別從單個圖層和模塊的組織和維度以及多個模塊的系統級組織整合為端到端CNN架構兩個角度對SqueezeNet進行深究。
2. Motivation
作者采用模型壓縮的方法。模型壓縮中一個相當直接的方法就是采用奇異值分解(singular value decomposition,SVD)來預訓練CNN模型,以此產生網絡剪枝(Network Pruning)。網絡剪枝主要是在預訓練模型的基礎上,設定一個閾值,低于閾值設為0,從而形成一個稀疏矩陣,最終在稀疏CNN上進行訓練。后來作者把網絡剪枝和量化(8 bits或者更少)以及哈夫曼編碼結合起來,稱為深度壓縮(Deep Compression)。
設計深層次的CNN主要為了提升網絡的準確度,當然也是現在的一種趨勢,只是為每個層手動選擇卷積核比較笨重。為了解決這個問題,已經提出了各種更高級別的building blocks或者module,其由具有特定固定組織的多個卷積層組成。比如GoogleNet提出了Inception modules,由眾多不同維度的卷積核組成,通常是1*1和3*3,而且也有一些5*5、1*3、3*1的卷積核。
近期在CNN宏觀架構中討論最多的研究最多的是網絡深度(depth)。VGG中有12-19層,而且也說明在ImageNet-1k數據集上網絡越深,準確度越高。在多個層或module之間的連接方式是CNN宏觀架構中的一個研究的新興領域。Residual Networks(ResNet)和Highway Networks均提出了跳過多個層的連接方式。這種方式稱為bypass connection。
神經網絡(Neural networks,NN)有很大的設計空間,在微觀架構、宏觀架構、解決方式以及其他超參數都有很多選擇。許多在神經網絡設計空間探索(design space exploration,DSE)的工作主要關注在找到能夠生成高準確度的神經網絡架構的自動化方法。這些自動化DSE方法包括bayesian optimization(Snoek et al., 2012)、simulated annealing(Ludermir et al., 2006))、randomized search(Bergstra & Bengio, 2012)和genetic algorithm(Stanley & Miikkulainen, 2002)。這些論文中提出過DSE方法生成NN架構高準確的實例。但是這些論文中并沒有給出NN設計空間的直觀理解。
3. Design
作者設計SqueezeNet主要是建立在Fire module上。Fire module是作者引入的一種建立CNN架構的新building block。
3.1 設計策略
1、 用1*1卷積核替代3*3卷積核。在一定卷積核數目的限制下,大量使用1*1卷積核,這樣比3*3的卷積核參數少9倍
2、 減少3*3卷積核的輸入通道數目。如果考慮一個都是3*3卷積核的卷積層,在這個層中的所有參數量是:(輸入通道數)*(卷積核數目)*3*3。使用squeeze layers減少3*3卷積核的輸入通道數目。
3、 延遲網絡中的下采樣以便于卷積層有較大的activation maps(文中是activation map,其實是feature map)。在ShuffleNet的論文中也有這個觀點,較大的特征圖可以提升準確度。在一個卷積網絡中,每一個卷積層都會輸出特定空間分辨率的activation map。這些activation map的高度和寬度由以下因素控制:輸入數據的大小(比如256*256的輸入圖片)和CNN架構中下采樣的層。通常CNN架構中下采樣一般在一些卷積層或者池化層中的stride>1。如果網絡中的大多數層stride為1,stride>1的層主要連接網絡的classifier,那么網絡中的許多層都會有較大的activation map。實驗證明延遲下采樣可以有較高的分類準確率。
3.2 Fire Module
Fire module是SqueezeNet設計的核心。一個Fire module由以下組成:一個squeeze layer(只有1*1卷積核)、一個expand layer(由1*1和3*3卷積核組合而成)。圖1中有顯示。很明顯squeeze layer經ReLU連接expand layer,expand layer后也緊接ReLU。在一個Fire module中有三個超參數:s1*1、e1*1、e3*3。s1*1是squeeze layer中的卷積核數目,e1*1是expand layer中1*1卷積核的數目,e3*3是expand layer中3*3卷積核數目。若設置s1*1小于(e1*1+e3*3),那么squeeze layer就限制了3*3卷積核的輸入通道數目。
SqueezeNet的CNN架構如圖2中Left,Middle是簡單bypass的SqueezeNet,Right是復雜bypass的SqueezeNet。沒有bypass的SqueezeNet由一個獨立卷積層(conv1)開始,緊跟8個Fire module(fire2-9),也以一個卷積層(conv10)結束。網絡中每個Fire module逐漸增加卷積核的數目,在conv1、fire4、fire8和conv10之后有一個stride為2的max-pooling層。
表1是完整的SqueezeNet架構。
SqueezeNet用到了dropout,值為50%,在fire9之后;在SqueezeNet中沒有使用FC layers;訓練SqueezeNet時,learning rate初始值是0.04,線性減少;在實現時使用Caffe框架,用兩個獨立的卷積層實現expand layer:一個1*1卷積核的層,一個3*3卷積核的層,然后把這些層的輸出在通道維度上串聯在一起。
4. Experiment
在評估SqueezeNet的性能的時候,作者使用AlexNet和相關的模型壓縮結果作為比較基礎。表2中是當時的一些模型壓縮結果。從表中可以看出,SVD的方法能在把一個預訓練的AlexNet模型壓縮5倍的同時實現56.0%的top-1準確度。網絡剪枝在ImageNet上實現了57.2%的top-1準確度和80.3%的top-5準確度,模型大小減小了9倍。深度壓縮在保證基礎的準確度水平的同時模型大小減小了35倍。而SqueezeNet與AlexNet模型相比縮小了50倍,top-1準確度較高(57.5%),top-5準確度相同(80.3%)。量化的深度壓縮方法在保證準確度的同時也使模型大小減少很多。在深度壓縮中用到了codebook技術,可把CNN參數優化為6 bits或8 bits精度。采用6 bits的壓縮,SqueezeNet模型大小壓縮了510倍,降到了0.47MB。對參數降低位數,比如從float32變成int8,訓練時采用高位浮點是為了梯度計算,而真正做inference時也許并不需要這么高位的浮點。
作者定義metaparameters控制在一個CNN中的所有Fire module的維度,然后從CNN微觀架構評測SqueezeNet。basee是第一個Fire module中expand filters的數目;每freq個Fire modules,expand filters增加incre,因而Fire module i,expand filers個數:
ei=ei,1*1+ei,3*3,定義pct3*3是expand filters中3*3卷積核的比例,則ei,3*3=ei*pct3*3,ei,1*1=ei*(1-pct3*3);squeeze ratio(SR)為一個Fire module中的squeeze layer中的卷積核比例,所有的Fire module中都相同,則si,1*1=SR*ei。這些都是metaparameter。SqueezeNet中,這些值如下:
basee=incre=128,pct3*3=0.5,freq=2,SR=0.125。
圖3(a)是改變SR的值,比較模型大小和準確度;圖3(b)是改變pct3*3的值,比較模型大小和準確度,來探究CNN中卷積核維度的作用。因為改變pct3*3就間接地改變了1*1卷積核和3*3卷積核的數目。
如圖2的Middle和Right所示,是采用bypass connection的SqueezeNet。通過比較不同bypass connection的SqueezeNet來評測其在CNN宏觀架構的性能。采用bypass connection的一個限制是輸入通道和輸出通道的數目要一致,因而只有一半的Fire module可以采用簡單bypass connection。如果不能滿足這個要求,作者定義了復雜 bypass connection,就是在每個bypass都有一個1*1卷積層,這種卷積層中的卷積核數目等于輸出通道數目。顯然復雜bypass connection需要額外的參數,而簡單bypass connection沒有。
增加bypass connection緩和了squeeze layer引入的bottleneck。因為squeeze layer減少了8倍的輸出通道,在squeeze layer之間的信息交流就減少了,但是bypass connection為squeeze layer之間的信息交流增加了新的通道。
從表3中看出,簡單bypass connection準確度比復雜的要高,模型大小也沒有增加。
5. Analysis
SqueezeNet是2016年提出的,結合了小模型的研究思路:結構優化和模型壓縮。論文中的很多思想都在之后的論文中有用到,比如較大的特征圖可以提升準確度,特征圖間的信息交流也可以提升準確度等等。論文探究了卷積核維度在提升網絡模型準確度的作用,實驗證明1*1卷積核和3*3卷積核比例相同時使小模型的模型大小和準確度的折中較好。1*1卷積核主要是減小模型尺寸,而3*3卷積核維持其準確度。在實驗中的一些trick也很有代表性,比如定義pct3*3。
總結
以上是生活随笔為你收集整理的Squeez-Net的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CreateJS 指南
- 下一篇: emeditor文本编辑器 秘钥