解讀Squeeze-and-Excitation Networks(SENet)
Squeeze-and-Excitation Networks(SENet)是由自動駕駛公司Momenta在2017年公布的一種全新的圖像識別結構,它通過對特徵通道間的相關性進行建模,把重要的特徵進行強化來提升準確率。這個結構是2017 ILSVR競賽的冠軍,top5的錯誤率達到了2.251%,比2016年的第一名還要低25%,可謂提升巨大。這麼大的提升是怎麼來的呢?今天就來介紹下這個冠軍背後的原理細節。
一、結構和原理
圖1是SENet的Block單元,圖中的Ftr是傳統的卷積結構,X和U是Ftr的輸入(CxHxW)和輸出(CxHxW),這些都是以往結構中已存在的。SENet增加的部分是U後的結構:對U先做一個Global Average Pooling(圖中的Fsq(.),作者稱為Squeeze過程),輸出的1x1xC數據再經過兩級全連接(圖中的Fex(.),作者稱為Excitation過程),最後用sigmoid(論文中的self-gating mechanism)限制到[0,1]的範圍,把這個值作為scale乘到U的C個通道上, 作為下一級的輸入數據。這種結構的原理是想通過控制scale的大小,把重要的特徵增強,不重要的特徵減弱,從而讓提取的特徵指向性更強。下面來看下SENet的一些細節:
先是Squeeze部分。GAP有很多演算法,作者用了最簡單的求平均的方法(公式1),將空間上所有點的信息都平均成了一個值。這麼做是因為最終的scale是對整個通道作用的,這就得基於通道的整體信息來計算scale。另外作者要利用的是通道間的相關性,而不是空間分布中的相關性,用GAP屏蔽掉空間上的分布信息能讓scale的計算更加準確。
Excitation部分是用2個全連接來實現 ,第一個全連接把C個通道壓縮成了C/r個通道來降低計算量(後面跟了RELU),第二個全連接再恢復回C個通道(後面跟了Sigmoid),r是指壓縮的比例。作者嘗試了r在各種取值下的性能 ,最後得出結論r=16時整體性能和計算量最平衡。
為什麼要加全連接層呢?這是為了利用通道間的相關性來訓練出真正的scale。一次mini-batch個樣本的squeeze輸出並不代表通道真實要調整的scale值,真實的scale要基於全部數據集來訓練得出,而不是基於單個batch,所以後面要加個全連接層來進行訓練。可以拿SE Block和下面3種錯誤的結構比較來進一步理解:圖2最上方的結構,squeeze的輸出直接scale到輸入上,沒有了全連接層,某個通道的調整值完全基於單個通道GAP的結果,事實上只有GAP的分支是完全沒有反向計算、沒有訓練的過程的,就無法基於全部數據集來訓練得出通道增強、減弱的規律。
圖2中間是經典的卷積結構,有人會說卷積訓練出的權值就含有了scale的成分在裡面,也利用了通道間的相關性,為啥還要多個SE Block?那是因為這種卷積有空間的成分在裡面,為了排除空間上的干擾就得先用GAP壓縮成一個點後再作卷積,壓縮後因為沒有了Height、Width的成分,這種卷積就是全連接了。圖2最下面的結構,SE模塊和傳統的卷積間採用並聯而不是串聯的方式,這時SE利用的是Ftr輸入X的相關性來計算scale,X和U的相關性是不同的,把根據X的相關性計算出的scale應用到U上明顯不合適。圖3是兩個SENet實際應用的例子,左側是SE-Inception的結構,即Inception模塊和SENet組和在一起;右側是SE-ResNet,ResNet和SENet的組合,這種結構scale放到了直連相加之前。
二、測試
1、ImageNet測試
作者用ImageNet 2012數據集,比較了不同深度下、不同類型的SENet結構和非SENet結構的性能差異。圖4是測試結果,可以看到在所有的結構上SENet要比非SENet的準確率更高,而計算複雜度上只是略有提升。圖5是兩種不同深度的SE-ResNet和ResNet的訓練曲線圖,圖6是ResNeXt和SE-ResNeXt、Inception-ResNet-v2和SE-Inception-ResNet-v2的收斂曲線,各種結構、各種深度的測試都能看出SENet有很大優勢。
2、場景分類測試
作者用Place365數據集進行了場景分類測試,比較的結構是ResNet-152和SE-ResNet-152,結果見圖7,可以看出SENet在ImageNet以外的數據集上仍有優勢。
三、更多分析
論文還詳細分析了scale的分布特點。作者對訓練好的結構用以下4個分類的圖片做測試,每個分類50張圖片,統計SE-ResNet-50在5個不同層級上,excitation輸出的分布(圖9)。圖9中SE_2_3是按SE_stageID_blockID的方法取名的,縱坐標是每個分類50張圖片scale的平均值。這個圖中越往後的圖的層級越靠後,all曲線是全部1000個分類的平均值,用來和4個分類的曲線作比較。
可以看出靠前的層級(SE_2_3和SE_3_4)各個分類的曲線差異不大,這說明了在較低的層級中scale的分布和輸入的類別無關;隨著層級的加深,不同類別的曲線開始出現了差別(SE_4_6和SE_5_1),這說明靠後的層級的scale大小和輸入的類彆強相關;到了SE_5_2後幾乎所有的scale都飽和,輸出為1,只有一個通道為0;而最後一層SE_5_3的通道的scale基本相同。最後兩層的scale因為基本都相等,就沒有什麼用處了,為了節省計算量可以把它們去掉。
總結:SENet把重要通道的特徵強化,非重要通道的特徵弱化,得到了很好的效果,這是一種全新的思路,在這個方向上將來可能會有更多的成果。
推薦閱讀:
※FCNN全卷積神經網路補充
※《麻省理工科技評論》全球十大突破性技術,阿里巴巴正研究其中4項
※獨家 | 一文讀懂人工神經網路
※先睹為快:神經網路頂會ICLR 2018論文接受結果速覽
※從下往上看-- 第十六部分 回看ANN(待完成)
TAG:深度學習DeepLearning | 計算機視覺 | 神經網路 |