論文名稱: SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE

論文鏈接:arxiv.org/abs/1602.0736

摘要

最近對深度卷積神經網路(CNNs)的研究主要集中在提高精度上。對於給定的準確度級別,通常可以識別多個達到該準確度級別的CNN體系結構。在等效的精度下,較小的CNN體系結構至少有三個優點:(1)在分散式訓練期間,較小的CNN需要較少的伺服器間通信。 (2)較小的CNN需要較少的帶寬將新模型從雲端導出到自動駕駛汽車。 (3)較小的CNN更適合部署在FPGA和其他有限內存的硬體上。為了提供所有這些優勢,我們提出了一個名為SqueezeNet的小型CNN架構。SqueezeNet在ImageNet上實現了AlexNet級別的精度,參數減少了50倍。另外,使用模型壓縮技術,我們可以將SqueezeNet壓縮到小於0.5MB(比AlexNet小510倍)。SqueezeNet架構可以在這裡下載:https://github.com/DeepScale/Sq

引言和動機

近期關於深卷積神經網路(CNNs)的研究大都集中在提高準確性上。 對於給定的精度,通常存在多個能實現該精度水平的CNN架構。能實現同等精度的CNN架構中,較小的架構具有以下幾個優點:

近期關於深卷積神經網路(CNNs)的研究大都集中在提高計算機數據集的準確性上。 對於給定的精度水平,通常存在多個能實現該精度水平的CNN架構。(能實現)給定的同等精度(的CNN架構中),具有較少的參數量的架構擁有以下幾個優點:

1. 更高效的分散式訓練。伺服器間的通信是分散式CNN訓練的可擴展性的制約因素。對於分散式的數據並行訓練,通信開銷與模型中的參數數量成正比(Iandola等,2016)。簡言之,小模型需要較少的通信所以訓練得更快。

2. 傳輸模型到客戶端的耗費較少。 對於自動駕駛,有些公司,例如特斯拉公司,會定期將新模型從伺服器複製到客戶的汽車, 這種做法通常被稱作空中(OTA)升級。 消費者報告指出特斯拉Autopilot的半自動駕駛功能的安全性隨著近期的空中升級(消費者報告,2016)而逐漸增強。然而現今典型的CNN/DNN模型的空中升級需要大量的數據傳輸。 例如更新AlexNet模型,需要從伺服器傳輸240MB的通信量到汽車。較小的模型需要的通信更少,這樣使得頻繁的更新變得更可行。

3. 可行的FPGA和嵌入式部署。 FPGA通常僅有小於10MB的片上存儲器而且沒有片外存儲器。當FPGA實時地處理視頻流時,一個足夠小的模型能直接存放在FPGA上,而不會讓存儲帶寬成為它的瓶頸(Qiu等,2016)。當在專用集成電路(ASIC)上部署CNN時,一個足夠小的模型可以直接存儲在晶元上,並使ASIC有可能配得上更小的管芯。

如你所見,較小的CNN架構具有若干個優勢。鑒於此,我們把重心放在確定一個具有較少參數卻擁有與某些著名的模型同等精度的CNN架構的問題上。我們發現了這樣的一個架構,並稱之為SqueezeNet。 而且,我們還提出了一個更規範的方法,用來探索新的CNN架構的設計空間。

本文的餘下部分組織如下。 在第2節,我們回顧了相關的工作。然後,在第3節和第4節,我們描述並評估了SqueezeNet架構。在那之後,我們將注意力轉向理解CNN架構設計選擇是如何影響模型大小和精度的。 我們通過探索SqueezeNet類的架構的設計空間獲得這種認知。在第5節,我們把各個層和模塊的組織和維度定義為CNN微型架構,並在CNN微型架構上探索設計空間。在第6節,我們把CNN中的層的高級組織定義為CNN的宏架構,並在CNN宏結構上進行設計空間的探索。最後,我們在第7節總結。總之,第3節和第4節不僅對研究CNN的人員,而且對那些只想把SqueezeNet應用在新的應用程序的工作人員也很有用。其餘部分是針對那些有志於設計自己的CNN架構的高級研究員。

2. 相關工作

2.1 模型壓縮

我們工作的首要目標是確定一個具有少量參數卻同時能保持相當精度的模型。為了解決這個問題,一種明智的方法是以有損的方式去壓縮一個現有的CNN模型。實際上,已經出現了一個關於模型壓縮的研究社區,並且也已經提出了一些方法。Denton等人的一個很直接的方法是把應用奇異值分解(SVD)(Denton等人,2014)應用在預訓練好的CNN模型。Han等人提出了網路修剪,該演算法從預訓練模型開始,然後把低於某個閾值的參數替換為零,形成了稀疏矩陣,最後對稀疏的CNN模型做幾次迭代訓練(Han等人,2015b)。Han等人近期擴展了他們的工作,通過將量化(到8位或更少)和huffman編碼結合到網路修建,創造了一種叫做深度壓縮的方法(Han等人,2015a),並進一步設計了叫做EIE的硬體加速器(Han等人,2016a ),該加速器直接作用在壓縮過的模型上,獲得了大幅度的加速和節能。

2.2 CNN微結構

卷積已經被人工神經網路使用了至少25年; LeCun等人在20世紀80年代後期助力推廣用於數字識別應用的CNNs(LeCun等人,1989)。在神經網路,卷積濾波器通常是3D的,它有作為關鍵維度的高度,寬度和通道。當應用在圖像時,CNN濾波器的第一層通常有3個通道(例如RGB),並且在其後的每一層Li,Li層濾波器的通道數目與Li-1層的濾波器的數量相同。LeCun等人的早期工作(LeCun等人,1989)使用5x5x通道數的濾波器,而最近的VGG(Simonyan&Zisserman,2014)架構廣泛使用3x3的濾波器。Network-in-Network(Lin等人,2013)和GoogLeNet的體系架構(Szegedy等人,2014; Ioffe&Szegedy,2015; Szegedy等人,2015; 2016)的模型在一些層上使用1x1的濾波器。

隨著設計非常深的CNN的趨勢,手動選擇每層的濾波器尺寸變得麻煩。為了解決這個問題,已經出現了各種更高級別的構建塊或模塊,他們由具有特殊的固定組織的多個卷積層構成。例如,GoogLeNet論文提出了Inception模塊,該模塊的濾波器包括多個不同尺寸,通常有1x1和3x3,再加上有時是5x5(Szegedy等人,2014),有時是1x3和3x1(Szegedy等人,2015)。多個這樣的模塊,可能再加上ad-hoc層,組合起來,形成完整的網路。我們使用術語CNN微結構來指代各個模塊的特定的組織和尺寸。

2.3 CNN宏結構

CNN微繫結構指的是各層和各模塊,而我們將CNN宏結構定義由多個模塊的系統級組織形成的端到端CNN架構。

也許在最近的文獻中,最廣泛研究的CNN宏架構的主題是網路中的深度(也就是層數)的影響。Simoyan和Zisserman提出了具有12到19層的的VGG(Simonyan&Zisserman,2014)族,並指出更深的網路在ImageNet-1k數據集上產生更高的精度(Deng等人,2009)。K.He等人提出了具有多達30層的更深的CNN,獲得更高的ImageNet精度(He等人,2015a)。

跨越多個層或模塊的連接的設計選擇是CNN宏架構研究的新興領域。殘差網路(ResNet)(He等人。,2015b)和Highway Networks(Srivastava等人,2015)分別提出了使用跨越多層的連接,例如將第3層的激活和第6層的激活相加連接起來,我們將這些連接稱為旁路連接。ResNet的作者提供了一個使用了旁路連接的34層模型A和不使用旁路連接的34層模型B的比較; 添加了旁路連接的CNN在ImageNet的 Top-5的精度上提高2個百分點。

2.4 神經網路設計空間探索

神經網路(包括深度卷積神經網路)擁有具大的設計空間,微架構,宏架構,解算器和其它超參數的選擇可以有很多個。似乎自然而然人們會希望獲得關於這些因素如何影響神經網路的準確性(例如設計空間的形狀)的直觀認識。神經網路的設計空間探索(DSE)的大部分工作集中在設計一些自動化方法來尋找具有更高精度的神經網路架構。這些自動化DSE方法包括貝葉斯優化(Snoek等人,2012),模擬退火(Ludermir等人,2006),隨機搜索(Bergstra&Bengio,2012)和遺傳演算法(Stanley和Miikkulainen,2002)。這些論文各自都提出了一種情況,每篇論文所提出的DSE方法均生成了一個神經網路架構,每個架構與代表性的基準相比精度都更高。然而,這些論文沒有提供關於神經網路設計空間的形狀的直觀體現。在本文的後面,我們避開了自動化方法,相反,我們以這樣一種方式重構CNN,使得我們可以通過A/B模型的原理性比較,研究出CNN架構決策如何影響模型大小和準確性。

在以下部分,我們首先提出SqueezeNet架構,並評估比較有使用模型壓縮和沒有模型壓縮的SqueezeNet。然後,我們探討SqueezeNet類的CNN架構的微架構和宏構架的設計選擇。

3. SqueezeNet:少量參數,保持精度

在這一節,我們首先概述了僅有少量參數的CNN架構的設計策略。然後,我們介紹用於構建我們的CNN架構的新構建塊—Fire模塊。最後,我們使用我們的設計策略構建SqueezeNet,它主要由Fire模塊組成。

3.1 結構設計策略

我們在本文的主要目標是確定具有很少參數卻同時保持有競爭性的精度的CNN架構。為了實現這一點,我們在設計CNN架構時採用了三個主要策略:

策略1.用1x1過濾器代替3x3過濾器。給定卷積濾波器的數量的預算,我們使這些濾波器中的大多數為1x1,因為1x1濾波器比3x3濾波器少9倍的參數。

策略2.減少輸入到3x3過濾器的通道的數量。一個完全由3x3濾波器組成的卷積層,該層的參數總量為:(輸入通道的數量)?(濾波器的數量)?(3 * 3)。 因此,為了維持CNN的參數總數是少量的,不僅要減少3×3濾波器的數量(見上面的策略1),而且要減少3×3濾波器的輸入通道數。我們使用擠壓層將輸入到3x3個過濾器的通道數量減少。我們將在下一節描述擠壓層。

策略3.在網路後期下採樣,使得卷積層具有大的激活圖。卷積網路的每一層都會輸出一個激活圖,它的解析度最少是1X1,而更多時候是大於1X1 。激活圖的高度和寬度由以下因素控制:(1)輸入數據的大小(例如256X256)(2)在CNN架構的哪些層進行下採樣的選擇 。最常見的做法是,通過在一些卷積或池化層中設置(stride> 1),將下採樣應用到CNN架構(例如(Szegedy等人,2014;Simonyan&Zisserman,2014;Krizhevsky等人,2012)) 。如果在網路的早期的那些層使用較大的步幅,那麼大部分的層的激活圖都會較小。相反,如果大部分的層的步幅都是1,而步幅大於1的層都集中在末端,那麼網路中大部分的層都會有大的激活圖。我們的直覺是,在其他的因素不變的情況下,大的激活圖(由於延遲下採樣)會產生更高的分類精度(He&Sun,2015)。

策略1和2都是關於如何保持準確性的同時減少CNN的參數量。策略3是關於在有限的參數量預算上最大化精度。接下來,我們描述Fire模塊,它是我們的CNN架構的構建塊,使我們能夠成功地應用戰略1,2和3。

圖1:微結構視圖:在Fire模塊中組織卷積過濾器。 在這個例子中,s1x1 = 3,e1x1 = 4,e3x3 = 4。我們這裡展示的是卷積濾波器不是激活。

3.2 Fire模塊

我們對Fire模塊定義如下。Fire模塊包括擠壓卷積層(它僅有1x1濾波器),擴展層——擠壓層被輸入到該層,由1x1和3x3卷積濾波器的混合組合而成; 我們在圖1中說明了這一點。在fire模塊中自由使用1x1過濾器是第3.1節中策略1的一個應用。我們在Fire模塊中公開了三個可調整維度(超級參數): s_{1X1}e_{1X1}s_{3X3} 。在Fire模塊中, s_{1X1} 是擠壓層(所有1x1)的濾波器數量, e_{1X1} 是擴展層中1x1濾波器的數量, e_{3X3} 是擴展層中的3x3濾波器的數量。當我們使用Fire模塊時,我們將s1X1設置為小於( e_{1X1} + e_{3X3} ),擠壓層有助於限制3x3過濾器的輸入通道數,如第3.1節中的策略2所述。

3.3 SqueezeNet結構

現在我們描述SqueezeNet CNN架構。我們在圖2中說明SqueezeNet是以一個獨立的卷積層(conv1)為開端,跟著是8個fire模塊(fire2-9),最後以一個最終的卷積層(conv10)結束。 我們從網路的開始到結束逐漸增加每個fire模塊的過濾器數量。 SqueezeNet在層conv1,fire4,fire8和conv10之後使用步長為2的max-pooling; 這些相對較後的pooling安排是根據3.1節中的策略3。我們在表1中給出了完整的SqueezeNet架構。

圖2:我們的SqueezeNet架構的宏架構視圖。 左:SqueezeNet(3.3節); 中間:帶簡單旁路的SqueezeNet(第6節); 右圖:用複雜旁路的SqueezeNet(第6節)。

3.3.1 SequenceNet的其它細節

為了簡潔,我們在表1和圖2都省略了一些關於SqueezeNet的細節和設計選擇。我們在下面提供這些設計選擇。這些選擇背後的思想可以在下面引用的論文中找到。

1、為了使1x1和3x3濾波器的輸出激活具有相同的高度和寬度,我們給輸入到擴展模塊的3x3濾波器的數據,添加用零填充的1個像素的邊界。

2、ReLU(Nair&Hinton,2010)被應用於擠壓層和擴展層的激活。

3、 在fire9模塊之後使用比率為50%的dropout(Srivastava等人,2014)。

4、注意SqueezeNet沒有全連接層; 這個設計選擇是受到NiN(Lin et al。,2013)架構的啟發。

5、當訓練SqueezeNet的時候,從0.04的學習率開始,然後在訓練過程中線性地減少學習率,如(Mishkin et al。2016)所述。 關於訓練協議(如批量大小,學習率,參數初始化)的詳細信息,請參閱我們的Caffe兼容配置文件:github.com/DeepScale/Sq

6、Caffe框架本身並不支持包含多個濾波器解析度的卷積層(例如1x1和3x3)(Jia等人,2014)。為了解決這個問題,我們的擴展層由兩個獨立的卷積層實現:一個是濾波器為1x1的層和一個濾波器為3x3的層。然後,我們在通道維中將這些層的輸出連接在一起。這在數值上等同於實現一個包含1x1和3x3濾波器的層。

我們發布的SqueezeNet配置文件是以Caffe CNN框架定義的格式的。 但是除Caffe外還有其他一些CNN框架,包括MXNet(Chen等,2015a),Chainer(Tokui等,2015),Keras(Chollet,2016)和Torch(Collobert等, 2011)。它們每個都有自己的用於表示CNN架構的格式。雖然這樣,這些庫的大多數使用相同的底層計算後端,如cuDNN(Chetlur等,2014)和MKL-DNN(Das等,2016)。為了與其他的一些CNN軟體框架兼容,研究團體已經移植了SqueezeNet CNN架構:

MXNet (Chen et al., 2015a) 的SequeezeNet介面: (Haria, 2016)

Chainer(Tokui et al., 2015) 的SequeezeNet介面:(Bell, 2016)

Keras(Chollet, 2016)的SequeezeNet 介面:(DT42, 2016)

Torch(Collobert et al., 2011) 的SequeezeNet fire模型介面:(Waghmare, 2016)

4. SqueezeNet評估

現在我們把注意力轉向評估SqueezeNet。 在第2.1節中回顧的每一篇關於CNN模型壓縮的論文,目標都是壓縮AlexNet(Krizhevsky等人,2012)模型,該模型在ImageNet(Deng等人,2009)(ILSVRC 2012) 數據集上訓練,用於圖像分類。因此,在評估SqueezeNet時,我們用AlexNet和與之相關的模型壓縮結果作為比較的基礎。

表1:SqueezeNet架構尺寸。 (這張表的格式受到Inception2論文(Ioffe&Szegedy,2015)的啟發)

表2:比較SqueezeNet和模型壓縮方法。 這裡的模型大小是指在訓練模型中存儲所有參數所需的位元組數。

在表2,我們在近期的模型壓縮結果中審視SqueezeNet。 基於SVD的方法能把預訓練的AlexNet模型壓縮5倍,但top-1精度降低到56.0%(Denton等人,2014)。使用網路修剪方法,實現模型減少9倍,同時在ImageNet上保持了57.2%的top-1和80.3%的top-5精度的基準(Han 等人,2015b)。深度壓縮使模型尺寸減小35倍,同時仍然保持基準的精度水平(Han 等人,2015a)。與AlexNet相比,SqueezeNet實現了模型尺寸減少50倍,同時達到甚至超過AlexNet的top-1和top-5精度。 我們在表2總結了上述結果。

這樣看來,我們已經超過了模型壓縮社區的最先進的結果:即使使用未壓縮的32位值表示模型,在保持或超過基準精度下,SqueeezeNet的模型大小仍比模型壓縮社區的最好結果小1.4倍。 直到現在,一個尚未解決的問題是:是小模型適合被壓縮,還是小模型「需要」密集浮點值才能提供強大的表示能力? 為尋找這個問題的答案,我們應用深度壓縮(Han等,2015a),33%稀疏度和8位量化,對SqueezeNet進行壓縮。 這產生了與AlexNet精度相當的0.66MB模型(比32位AlexNet小363倍)。此外,在SqueezeNet上應用設置為6位和33%稀疏性的深度壓縮,我們生成具有同等精度的0.47MB模型(比32位AlexNet小510倍)。 我們的小模型確實適合壓縮。

此外,這些結果表明,深度壓縮(Han等人,2015a)不僅在具有大參數量(例如AlexNet和VGG)的CNN架構上表現良好,而且還能夠壓縮已經壓縮過的,全卷積的SqueezeNet架構。深度壓縮將SqueezeNet壓縮10倍,而且同時保持精度基準。 總言之:通過將創新的CNN架構(SqueezeNet)與最先進的壓縮技術(深度壓縮)相結合,我們實現了模型尺寸減少510倍,而且與基準相比精度並沒有降低。

最後,注意到深度壓縮(Han等人,2015b)架構使用codebook把CNN參數量化成6位或8位精度。 因此,在大多數商用處理器上,使用深度壓縮方案實現具有8位量化的32/8 = 4x或使用6位量化的32/6 = 5.3x的加速並不是沒有價值的。 然而,Han等人開發的定製硬體 - 高效推理機(EIE) - 可以更有效地用cookbook量化的CNN(Han等人,2016a)。此外,在我們發布SqueezeNet的幾個月後,P. Gysel開發了一種稱為Ristretto的策略,將SqueezeNet線性量化為8位(Gysel,2016)。具體的說,Ristretto確實用8位進行計算,並以8位數據類型存儲參數和激活。 在使用Ristretto的8位計算策略進行SqueezeNet推理過程中,Gysel發現當使用8位而非32位數據類型時,精度下降小於1個百分點。

5. CNN微結構設計空間探索

到目前為止,我們已經提出了小型模型結構設計策略,並遵循這些理論,創建了SqueezeNet,SqueezeNet比AlexNet小50倍卻具有與之同等的精度。 然而,SqueezeNet和其他模型仍然是一個廣泛並且大部分設計空間未被開發的CNN架構。 在第5和第6節,我們探討關於設計空間的幾個方面。 我們將架構探索分為兩個主題:微架構探索(每個模塊層的維度和配置)和宏架構探索(由模塊和其他層構成的高級的端到端組織)。

以我們在第3.1節中提出的設計策略為指引,以提供關於微結構設計空間的形狀的直觀認知為目的,我們在本節里設計並執行實驗, 注意,在這裡我們的目標不是最大化每個實驗的準確性,而是理解CNN架構選擇對模型大小和精度的影響。

(a)探索擠壓比(SR)對模型尺寸和精度的影響。

(b)探索擴展層中3x3過濾器比例(pct3x3)對模型大小和準確性的影響。

5.1 CNN微結構元參數

SqueezeNet的每個fire模塊都有我們在3.2節所定義的三維超參數: s_{1X1}e_{1X1}s_{3X3} 。 SqueezeNet有8個fire模塊,共24維超參數。為了對SqueezeNet類的架構的設計空間進行探討,我們定義了以下一組更高級別的元參數,用於控制CNN中所有fire模塊的尺寸。我們將 base_{e} 定義為CNN的第一個fire模塊的擴展過濾器數。在每個模塊 freq fire後,我們增加 incr_{e} 個擴展過濾器。也就是說,對於fire模塊i,擴展濾波器的數量是 e_{i}=base_{e}+(incr_{e}?frac{j}{freq}) 。在fire模塊的擴展層,一些過濾器是1X1,一些為3x3;我們定義 e_{i}=e_{i,1x1}+e_{i,3x3} (範圍[0; 1],被所有fire模塊共享)為3X3的擴展過濾器的百分比。換句話說, e_{i,3x3} = e_{i} ?pct_{3x3}e_{i,1x1} = e_{i} ?(1-pct_{3x3}) 。最後,我們使用稱作擠壓比(SR)(範圍是[0; 1],在所有Fire模塊共享)的元參數,定義fire模塊擠壓層中的過濾器數量: s_{i,1x1}=SR?e_{i} (或等價地 s_{i,1x1} = SR ? (e_{i,1x1} + e_{i,3x3}) 。 SqueezeNet(表1)是我們用上述的元參數集生成的示例體系結構。具體地說,SqueezeNet有以下元參數: base_{e} = 128, incr_{e} = 128, pct_{3x3} = 0.5, freq = 2,SR = 0.125

5.2 擠壓比

在3.1節中,我們提出通過使用擠壓層減少3X3濾波器的輸入通道數,從而減少參數量。 我們將擠壓比(SR)定義為擠壓層的過濾器數量與擴展層的過濾器數量之間的比率。 現在我們設計一個實驗,研究擠壓比對模型的大小和精度的影響。

在這些實驗中,我們使用SqueezeNet(圖2)作為起點。 跟SqueezeNet一樣,這些實驗使用以下元參數: base_{e} = 128, incr_{e} = 128, pct_{3x3} = 0.5, freq = 2 。我們訓練多個模型,每個模型有不同的擠壓比,擠壓比的範圍是[0.125,1.0]。 在圖3(a)中,我們展示了這個實驗的結果,圖上的每個點代表一個獨立的模型,這些模型都是從頭開始訓練的。SqueezeNet是這個圖中SR=0.125的點。從這個圖中,我們可以知道當SR的增量超過0.125時,可以使ImageNet的 top-5精確度大大提升,從80.3%(即AlexNet級別) 到86.0%,而模型大小從4.8MB增加到了19MB。 當SR=0.75(19MB模型)時,精度穩定在86.0%,而設置SR=1.0,即使進一步增加模型尺寸,精度也沒有提高。

5.3 關閉1X1和3X3濾波器

在3.1節,我們提議用1X1濾波器替換一些3X3濾波器來減少CNN的參數量。一個尚未解決的問題是,CNN過濾器的空間解析度有多重要?

VGG(Simonyan&Zisserman,2014)架構的大多數層的濾波器的解析度是3×3的; 而GoogLeNet(Szegedy等人,2014)和Network in Network(NiN)(Lin等人,2013)的一些層中有1X1濾波器。 在GoogLeNet和NiN中,作者只是單純地提出使用一定數量的1X1和3X3的濾波器,並沒有進一步分析。我們在這裡試圖闡明1X1和3X3的濾波器占的比例是如何影響模型的大小和精度。

在本實驗,我們使用以下元參數: base_{e} = incr_{e} = 128,freq = 2, SR = 0.500 ,我們將  pct_{3x3} 從1%變化到99%。 換句話說,每個Fire模塊的擴展層的過濾器數量都是預定義好的,而過濾器都是1x1或3x3的。在這裡我們將這些過濾器上的旋鈕從「大部分是1X1「轉換到」大部分是3X3。 與之前的實驗一樣,這些模型有8個Fire模塊,跟圖2所示的有相同的層次組織結構。我們顯示了圖3(b)中該實驗的結果。 注意,圖3(a)和圖3(b)的13MB模型有著相同的框架:SR=0.500和 pct_{3x3} =50%。 在圖3(b)中可以看到,使用比率為50%的3X3濾波器時,top-5精度穩定在85.6%,進一步增加3X3濾波器所佔的百分比會使模型尺寸變大,但是在ImageNet上的精度並沒有提高。

6. CNN宏框架設計空間探索

到目前為止,我們已經探討了微架構級別的設計空間,即CNN的單獨模塊的內容。 現在,我們在宏架構層面探討Fire模塊間的高級連接的設計決策。 受ResNet的啟發(He等人,2015b),我們研究了三種不同的架構:

1. 簡單純粹的 SqueezeNet(如前面的章節所述)。

2. 部分Fire模塊間有簡單旁路連接的squeezeNet。 (受(Srivastava等人,2015; He等人,2015b)的啟發。)

3. 其餘的Fire模塊間建立了複雜旁路連接的squeezeNet。

我們在圖2中說明了SqueezeNet的這三個變體。

我們的簡單旁路架構在fire模塊3,5,7,9間建立連接,這些模塊需要學習一個關於輸出和輸入的殘差方程。跟ResNet一樣,在Fire3建立旁路連接,我們設置Fire4的輸入為(fire2的輸出+fire3的輸出),前面式子的「+」號是元素級相加。這些操作改變了Fire模塊的參數的正規化,根據ResNet,能夠提高最後的精確度,或者改善整個模型的訓練能力。

一個限制是,有個簡單明了的情況,輸入的通道數量和輸出的通道數量必須相同; 因此,如圖2的中間圖所示,僅有一半的Fire模塊可以有簡單的旁路連接。當不能滿足「相同數量的通道」要求時,我們使用複雜的旁路連接,如圖所示 在圖2的右側。簡單的旁路是「僅有線」,而複雜旁路則包含1x1卷積層,該層的濾波器的數量等於所需的輸出通道的數量。 值得注意的是,複雜的旁路連接會給模型添加額外的參數,而簡單的旁路連接則不會。

除了改變正則化之外,對我們來說直觀的是,添加旁路連接將有助於減輕擠壓層引入的表示性瓶頸。 SqueezeNet的擠壓比(SR)為0.125,意味著每個擠壓層比其相應的擴展層的輸出通道少8倍。 由於這種嚴重的維度減少,可以通過擠壓層的信息量有限。 然而,通過在SqueezeNet的層間添加旁路連接,我們開闢了讓信息繞擠壓層流動的途徑。

我們按照圖2中的三個宏架構訓練SqueezeNet,而模型間的精度和模型大小比較在圖3。在探索宏架構時,我們按照圖1的squeezeNet固定了微結構。 無論是添加了複雜的還是簡單的旁路連接都比簡單的 SqueezeNet架構精度高。有趣的是,添加了簡單的旁路的模型比複雜旁路的模型的精度更高。添加了簡單的旁路連接的模型在不增加模型尺寸的情況下,top-1精度增加了2.9個百分點,top-5精度提高了2.2個百分點。

表3:使用不同的宏架構配置的SqueezeNet的精度和模型大小

7 結論

在本文中,我們提出了一個更嚴謹的方法來探索卷積神經網路的設計空間。 為實現這個目標,我們提出了SqueezeNet,這個CNN架構的參數比AlexNet少50倍,卻在ImageNet上保持著AlexNet級別的精度。 我們還將SqueezeNet壓縮到小於0.5MB,也就是比沒有壓縮過的AlexNet小510倍。 我們在2016年以技術報告發表本文後,Song Han和他的同事嘗試進一步研究SqueezeNet和模型壓縮。基於一種稱為密集稀疏密度(DSD)的新方法(Han等人,2016b),Han等人在訓練時使用模型壓縮作為正則化器,進一步提高精度。他們的研究生成了壓縮的SqueezeNet參數集,它們在ImageNet-1k上的精度提高了1.2個百分點,他們還生成了未壓縮的SqueezeNet參數集,與我們在表2中的結果相比高4.3個百分點 。

我們在本文開頭提到,小模型更適合應用在FPGA上。 自從我們發布了SqueezeNet模型,Gschwend開發一些SqueezeNet的變種並在FPGA上實現了(Gschwend,2016)。 正如我們的預期,Gschwend能夠將一個SqueezeNet類的模型的參數完全存儲在FPGA中,而無需用片外存儲存取模型參數。

在本文,我們將ImageNet作為目標數據集。 然而,將在ImageNet上訓練好的CNN模型用於日常的應用已成為常見的做法,如細粒度物體識別(Zhang等人,2013;Donahue等人,2013),圖像中的標誌識別(Iandola等人 ,2015),給看圖說話(Fang等人,2015)等。用ImageNet訓練過的CNN也被應用於很多與自主駕駛有關的應用,包括圖像(Iandola等人,2014; Girshick等人,2015; Ashraf等人,2016)和視頻(Chen等,2015b)的行人和車輛檢測,以及分割道路的形狀(Badrinarayanan等,2015)。 我們認為對各個領域的應用而言,SqueezeNet是一個很好的選擇,特別是那些對模型的「小」很看重的應用領域。

SqueezeNet 是我們在探索CNN架構設計空間時發現的幾個新的CNN之一。 我們希望SqueezeNet將激勵讀者以更系統的方式思考和探索CNN架構的設計空間的廣泛的可能性。


推薦閱讀:
相关文章