1. 程式人生 > >SEnet——Squeeze-and-Excitation Networks

SEnet——Squeeze-and-Excitation Networks

ABSTRACT

卷積神經網路建立在卷積運算的基礎上,通過融合區域性感受野內的空間(spatial)資訊和通道(channel-wise)資訊來提取資訊特徵。在本文作者提出來了一種新的架構——“Squeeze-and-Excitation”(SE)塊,通過顯式地建模通道之間的相互依賴關係,自適應地重新校準通道式的特徵響應。將這些塊堆疊在一起,可以構建SENet架構,在具有挑戰性的資料集中可以進行泛化地非常好。關鍵的是,發現SE塊以微小的計算成本為現有的最先進的深層架構產生了顯著的效能改進。SENets是作者ILSVRC 2017分類提交的基礎,並贏得了第一名,並將top-5錯誤率顯著減少到2.251%2.251%,相對於2016年的獲勝成績取得了∼25%∼25%的相對改進。0

1.Introduction

卷積神經網路(CNN)已被證明是可以解決各種視覺任務的有效模型,卷積通過融合區域性感受野的空間和通道資訊來進行資訊組合,通過疊加這樣的一系列的非線性和下采樣交織的卷積層,CNN能夠成為獲得全域性感受野的強大影象描述。最近有工作通過顯示嵌入學習機制來幫助捕獲空間的相關性,如inception架構,在模型中嵌入多尺度處理來獲得了更高的準確度。

本文提出來另一個方向的設計架構——通道關係,稱之為“Squeeze-and-Excitation”(SE)塊。目標是通過顯示構建卷積特徵通道之間的相互依賴來提高網路的表達能力(improve the representational power of a network by explicitly modelling the interdependencies between the channels of its convolutional features.)為了達到這個目的,提出了一種機制,使網路執行特徵重新校準

,通過這種機制可以學習使用全域性資訊來選擇性地增強有效的特徵資訊並抑制不太有用的特徵。

Figure 1
Figure 1 SE block

 SEBlock並不是一個完整的網路結構,而是一個子結構,可以嵌入到其他網路模型的任意深度來替換掉原始的卷積層形成新的網路模型,它在不同的深度有不同的作用。本文作者開發了一些SENets,即SE-ResNet,SE-Inception,SE-ResNeXt和SE-Inception-ResNet。作者使用SENets贏得了ILSVRC 2017分類競賽的第一名。我們的表現最好的模型集合在測試集上達到了2.251%的top-5錯誤率。與前一年的獲獎者(2.991%的top-5

錯誤率)相比,達到了∼25%的相對改進。

3.Squeeze-and-Excitation Block

如圖1所示,是SE Block的單元,主要包括兩個部分——Squeeze和Excitation兩個部分。先對U做一個Global Average Pooling(圖中的Fsq(.),作者稱為Squeeze過程),輸出的1x1xC資料再經過兩級全連線(圖中的Fex(.),作者稱為Excitation過程),最後用sigmoid(論文中的self-gating mechanism)限制到[0,1]的範圍,把這個值作為scale乘到U的C個通道上, 作為下一級的輸入資料。這種結構的原理是想通過控制scale的大小,把重要的特徵增強,不重要的特徵減弱,從而讓提取的特徵指向性更強。下面來看下SENet的一些細節:

圖中的Ftr是傳統的卷積結構(嚴格來講並不屬於SENet,而是屬於原網路),X(CxHxW)是Ftr的輸入,U是 Ftr(C'xH'xW')的輸出,這些都是以往結構中已經存在的,定義如下:

Ftr:X\rightarrow U,X\epsilon R^{C\times H\times W},U\epsilon R^{C{}'\times H{}'\times W{}' }

V=[v_{1},v_{2}...v_{c}]表示學習到的一組濾波器核,v_{c}指的是第c個濾波器的引數,Ftr的輸出是U=[u_{1},u_{2}...u_{C}]。這個Ftr的公式就是下面的公式1:

u_{c}=v_{c}*X=\sum_{s=1}^{C{}'}v{_{c}}^{s}*X^{s}                                         (1)

Ftr得到的U就是Figure1中的左邊第二個三維矩陣,或者叫C個大小為H*W的feature map。而uc表示U中第c個二維矩陣,下標c表示channel。

然後是Squeeze過程:對U做一個Global Average Pooling,AP有很多演算法,作者用了最簡單的求平均的方法(公式1),將空間上所有點的資訊都平均成了一個值。這麼做是因為最終的scale是對整個通道作用的,這就得基於通道的整體資訊來計算scale。另外作者要利用的是通道間的相關性,而不是空間分佈中的相關性,用GAP遮蔽掉空間上的分佈資訊能讓scale的計算更加準確。公式如下:

Z_{c}=F_{sq}(U_{c})=\frac{1}{W\times H}\sum_{i=1}^{W}\sum_{i=1}^{H}u_{c}(i,j)                              (2)

再接下來就是Excitation操作,如公式3。前面squeeze得到的結果是z,這裡先用W1乘以z,就是一個全連線層操作,W_{1}\epsilon R^{C\times \frac{C}{r}},這個r是一個縮放參數,在文中取的是16,這個引數的目的是為了減少channel個數從而降低計算量。又因為z的維度是1x1xC,所以W1xZ的結果就是1x1xC/r;然後再經過一個ReLU層,輸出的維度不變;然後再和W2相乘,和W2相乘也是一個全連線層的過程,W_{2}\epsilon R^{C\times \frac{C}{r}},因此輸出的維度就是1x1xC;最後再經過sigmoid函式,得到s。

s=F_{ex}(z,W)=\sigma (g(z,W))=\sigma (W_{2}\delta (W_{1}z))                   (3)

也就是說最後得到的這個s的維度是1x1xC,C表示channel數目。這個s其實是本文的核心,它是用來刻畫 U中C個feature map的權重。而且這個權重是通過前面這些全連線層和非線性層學習得到的,因此可以end-to-end訓練。這兩個全連線層的作用就是融合各通道的feature map資訊,因為前面的squeeze都是在某個channel的feature map裡面操作。

在得到s之後,就是scale操作了,就是下面的公式4,就是channel-wise multiplication,uc是一個二維矩陣,sc是一個標量(第c層的s的數值),也就是權重,因此相當於把uc矩陣中的每個值都乘以sc。對應Figure1中的Fscale。

\tilde{x}_{c}=F_{scale}(u_{c},s_{c})=s_{c}\cdot u_{c}                                                    (4)

將SE block加入到inception模型:

將SE block加入到resne模型中:(在這裡,SE塊變換Ftr被認為是殘差模組的非恆等分支。壓縮激勵都在恆等分支相加之前起作用。)

添加了SE block後,模型的引數到底增加了多少。其實從前面的介紹可以看出增加的引數主要來自兩個全連線層,兩個全連線層的維度都是C/r * C,那麼這兩個全連線層的引數量就是2*C^2/r。以ResNet為例,假設ResNet一共包含S個stage,每個Stage包含N個重複的residual block,那麼整個添加了SE block的ResNet增加的引數量就是下面的公式:\frac{2}{r}\sum_{s=1}^{S}N_{s}\cdot C_{s}^{2}