後ResNet時代:SENet與SKNet
本篇介紹兩個影象分類方面的工作:SENet和SKNet,聽這名字就知道,這兩個是兄弟。SENet提出了Sequeeze and Excitation block,而SKNet提出了Selective Kernel Convolution. 二者都可以很方便的嵌入到現在的網路結構,比如ResNet、Inception、ShuffleNet,實現精度的提升。
SENet
Motivation
目前的卷積是在2D空間中做卷積,其本質上來說只建模了影象的空間資訊,並沒有建模通道之間的資訊。於是,作者就嘗試對Channel之間的資訊進行顯式建模。
網路結構

左邊為 的特徵圖,經過一系列卷積,pooling操作
之後,得到
大小的特徵圖。接下來進行一個Sequeeze and Excitation block。
- Sequeeze:對
進行global average pooling,得到
大小的特徵圖,這個特徵圖可以理解為具有全域性感受野。
- Excitation :使用一個全連線神經網路,對Sequeeze之後的結果做一個非線性變換。
- 特徵重標定:使用Excitation 得到的結果作為權重,乘到輸入特徵上。
總結
總體來說思路很清晰,Motivation也有一定的道理。此外,這個結構可以作為任意網路的子模組新增進去以提升精度,而且引入的計算量非常小。
但是有一個問題在於,卷積過程本身在Channel之間也會有一個乘數,這個乘數是不是可以理解為建模了Channel之間的資訊呢?如果作者對前面的卷積使用 路的Group Convlution,然後與加入Sequeeze and Excitation block前後的精度進行對比,或許文章會更有說服力一些。
最終結果很不錯,計算量幾乎沒變化,但是精度上升了,取得了ImageNet2017的冠軍。
SKNet
Motivation
SKNet使用了兩個思路在提高精度:
- 很多網路使用了各種Trick來降低計算量,比如ResNeXt,計算量大大減少,精度卻略有提升。那麼如果不犧牲那麼多計算量,能否精度提高一些呢?比如使用大一點的Kernel,如
的卷積提升精度。
- 結合現在普遍使用的Attention操作
加了上面兩個操作之後,顯然計算量會上去,於是作者再加了一個Group Convlution來做trade off。
網路結構

上述結構可以分為三個步驟:
- Split:輸入為
的特徵圖,
和
均表示Group Convlution。這裡使用Group Convlution以減少計算量。注意,這裡兩路Group Convlution使用的卷積核大小不一致,原因在於Motivation中說的第一點,提升精度。
- Fuse:通過Split操作分成兩路之後,再把兩路結果進行融合,然後就是一個Sequeeze and Excitation block。
- Select:Select模組把Sequeeze and Excitation block模組的結果通過兩個softmax以迴歸出Channel之間的權重資訊。然後把這個權重資訊乘到
和
中。這個過程可以看做是一個soft attention。最好把兩路的特徵圖進行相加得到輸出特徵圖
。
總結
整體感覺融合了較多的trick,Select部分使用soft attention和Sequeeze and Excitation block中對特徵圖加權蠻像的,區別在於Sequeeze and Excitation block考慮的是Channel之間的權重,而Select部分的attention不僅考慮了Channel之間的權重,還考慮了兩路卷積的權重。
同樣的,SKNet可以很容易的嵌入到其他網路結構中。下圖是基於ResNeXt-50的SENet和SKNet計算量,以及精度對比。可以看到,計算量(GFLOPs)只是略有上升,精度方面相比於ResNeXt-50漲了1.4%左右: