Squeeze-and-Excitation Networks(SENet)是由自動駕駛公司Momenta在2017年公布的一種全新的圖像識別結(jié)構(gòu),它通過對特征通道間的相關(guān)性進(jìn)行建模,把重要的特征進(jìn)行強(qiáng)化來提升準(zhǔn)確率。這個結(jié)構(gòu)是2017 ILSVR競賽的冠軍,top5的錯誤率達(dá)到了2.251%,比2016年的第一名還要低25%,可謂提升巨大。這么大的提升是怎么來的呢?今天就來介紹下這個冠軍背后的原理細(xì)節(jié)。
一、結(jié)構(gòu)和原理

圖1是SENet的Block單元,圖中的Ftr是傳統(tǒng)的卷積結(jié)構(gòu),X和U是Ftr的輸入(C'xH'xW')和輸出(CxHxW),這些都是以往結(jié)構(gòu)中已存在的。SENet增加的部分是U后的結(jié)構(gòu):對U先做一個Global Average Pooling(圖中的Fsq(.),作者稱為Squeeze過程),輸出的1x1xC數(shù)據(jù)再經(jīng)過兩級全連接(圖中的Fex(.),作者稱為Excitation過程),最后用sigmoid(論文中的self-gating mechanism)限制到[0,1]的范圍,把這個值作為scale乘到U的C個通道上, 作為下一級的輸入數(shù)據(jù)。這種結(jié)構(gòu)的原理是想通過控制scale的大小,把重要的特征增強(qiáng),不重要的特征減弱,從而讓提取的特征指向性更強(qiáng)。下面來看下SENet的一些細(xì)節(jié):
先是Squeeze部分。GAP有很多算法,作者用了最簡單的求平均的方法(公式1),將空間上所有點(diǎn)的信息都平均成了一個值。這么做是因為最終的scale是對整個通道作用的,這就得基于通道的整體信息來計算scale。另外作者要利用的是通道間的相關(guān)性,而不是空間分布中的相關(guān)性,用GAP屏蔽掉空間上的分布信息能讓scale的計算更加準(zhǔn)確。

Excitation部分是用2個全連接來實(shí)現(xiàn) ,第一個全連接把C個通道壓縮成了C/r個通道來降低計算量(后面跟了RELU),第二個全連接再恢復(fù)回C個通道(后面跟了Sigmoid),r是指壓縮的比例。作者嘗試了r在各種取值下的性能 ,最后得出結(jié)論r=16時整體性能和計算量最平衡。
為什么要加全連接層呢?這是為了利用通道間的相關(guān)性來訓(xùn)練出真正的scale。一次mini-batch個樣本的squeeze輸出并不代表通道真實(shí)要調(diào)整的scale值,真實(shí)的scale要基于全部數(shù)據(jù)集來訓(xùn)練得出,而不是基于單個batch,所以后面要加個全連接層來進(jìn)行訓(xùn)練。可以拿SE Block和下面3種錯誤的結(jié)構(gòu)比較來進(jìn)一步理解:
圖2最上方的結(jié)構(gòu),squeeze的輸出直接scale到輸入上,沒有了全連接層,某個通道的調(diào)整值完全基于單個通道GAP的結(jié)果,事實(shí)上只有GAP的分支是完全沒有反向計算、沒有訓(xùn)練的過程的,就無法基于全部數(shù)據(jù)集來訓(xùn)練得出通道增強(qiáng)、減弱的規(guī)律。
圖2中間是經(jīng)典的卷積結(jié)構(gòu),有人會說卷積訓(xùn)練出的權(quán)值就含有了scale的成分在里面,也利用了通道間的相關(guān)性,為啥還要多個SE Block?那是因為這種卷積有空間的成分在里面,為了排除空間上的干擾就得先用GAP壓縮成一個點(diǎn)后再作卷積,壓縮后因為沒有了Height、Width的成分,這種卷積就是全連接了。
圖2最下面的結(jié)構(gòu),SE模塊和傳統(tǒng)的卷積間采用并聯(lián)而不是串聯(lián)的方式,這時SE利用的是Ftr輸入X的相關(guān)性來計算scale,X和U的相關(guān)性是不同的,把根據(jù)X的相關(guān)性計算出的scale應(yīng)用到U上明顯不合適。

圖3是兩個SENet實(shí)際應(yīng)用的例子,左側(cè)是SE-Inception的結(jié)構(gòu),即Inception模塊和SENet組和在一起;右側(cè)是SE-ResNet,ResNet和SENet的組合,這種結(jié)構(gòu)scale放到了直連相加之前。

二、測試
1、ImageNet測試
作者用ImageNet 2012數(shù)據(jù)集,比較了不同深度下、不同類型的SENet結(jié)構(gòu)和非SENet結(jié)構(gòu)的性能差異。圖4是測試結(jié)果,可以看到在所有的結(jié)構(gòu)上SENet要比非SENet的準(zhǔn)確率更高,而計算復(fù)雜度上只是略有提升。圖5是兩種不同深度的SE-ResNet和ResNet的訓(xùn)練曲線圖,圖6是ResNeXt和SE-ResNeXt、Inception-ResNet-v2和SE-Inception-ResNet-v2的收斂曲線,各種結(jié)構(gòu)、各種深度的測試都能看出SENet有很大優(yōu)勢。



2、場景分類測試
作者用Place365數(shù)據(jù)集進(jìn)行了場景分類測試,比較的結(jié)構(gòu)是ResNet-152和SE-ResNet-152,結(jié)果見圖7,可以看出SENet在ImageNet以外的數(shù)據(jù)集上仍有優(yōu)勢。

三、更多分析
論文還詳細(xì)分析了scale的分布特點(diǎn)。作者對訓(xùn)練好的結(jié)構(gòu)用以下4個分類的圖片做測試,每個分類50張圖片,統(tǒng)計SE-ResNet-50在5個不同層級上,excitation輸出的分布(圖9)。圖9中SE_2_3是按SE_stageID_blockID的方法取名的,縱坐標(biāo)是每個分類50張圖片scale的平均值。這個圖中越往后的圖的層級越靠后,all曲線是全部1000個分類的平均值,用來和4個分類的曲線作比較。

可以看出靠前的層級(SE_2_3和SE_3_4)各個分類的曲線差異不大,這說明了在較低的層級中scale的分布和輸入的類別無關(guān);隨著層級的加深,不同類別的曲線開始出現(xiàn)了差別(SE_4_6和SE_5_1),這說明靠后的層級的scale大小和輸入的類別強(qiáng)相關(guān);到了SE_5_2后幾乎所有的scale都飽和,輸出為1,只有一個通道為0;而最后一層SE_5_3的通道的scale基本相同。最后兩層的scale因為基本都相等,就沒有什么用處了,為了節(jié)省計算量可以把它們?nèi)サ簟?/p>

總結(jié):SENet把重要通道的特征強(qiáng)化,非重要通道的特征弱化,得到了很好的效果,這是一種全新的思路,在這個方向上將來可能會有更多的成果。