本篇介紹兩個影象分類方面的工作:SENet 和 SKNet,聽這名字就知道,這兩個是兄弟。SENet 提出了 Sequeeze and Excitation block,而 SKNet 提出了 Selective Kernel Convolution,二者都可以很方便的嵌入到現在的網路結構,比如 ResNet、Inception、ShuffleNet,實現精度的提升。
作者丨郭曉鋒
單位丨北京愛奇藝科技有限公司演演算法工程師
研究方向丨影象生成
SENet
Motivation
目前的摺積是在 2D 空間中做摺積,其本質上來說只建模了影象的空間資訊,並沒有建模通道之間的資訊。於是,作者就嘗試對 Channel 之間的資訊進行顯式建模。
網路結構
左邊為 C’×H’×W’ 的特徵圖,經過一系列摺積,pooling 操作 Ftr 之後,得到 C×H×W 大小的特徵圖。接下來進行一個 Sequeeze and Excitation block。
Sequeeze:對 C×H×W 進行 global average pooling,得到 1×1×C 大小的特徵圖,這個特徵圖可以理解為具有全域性感受野。
Excitation :使用一個全連線神經網路,對 Sequeeze 之後的結果做一個非線性變換。
特徵重標定:使用 Excitation 得到的結果作為權重,乘到輸入特徵上。
總結
總體來說思路很清晰,Motivation 也有一定的道理。此外,這個結構可以作為任意網路的子模組新增進去以提升精度,而且引入的計算量非常小。
但是有一個問題在於,摺積過程本身在 Channel 之間也會有一個乘數,這個乘數是不是可以理解為建模了 Channel 之間的資訊呢?
如果作者對前面的摺積使用 C 路的 Group Convolution,然後與加入 Sequeeze and Excitation block 前後的精度進行對比,或許文章會更有說服力一些。
最終結果很不錯,計算量幾乎沒變化,但是精度上升了,取得了 ImageNet 2017 的冠軍。
SKNet
Motivation
SKNet 使用了兩個思路來提高精度:
1. 很多網路使用了各種 Trick 來降低計算量,比如 ResNeXt,計算量大大減少,精度卻略有提升。那麼如果不犧牲那麼多計算量,能否精度提高一些呢?比如使用大一點的 Kernel,如 5×5 的摺積提升精度;
2. 結合現在普遍使用的 Attention 操作。
加了上面兩個操作之後,顯然計算量會上去,於是作者再加了一個 Group Convolution 來做 trade off。
網路結構
上述結構可以分為三個步驟:
Split:輸入為 c×h×w 的特徵圖,和均表示 Group Convolution。這裡使用 Group Convolution 以減少計算量。註意,這裡兩路 Group Convolution 使用的摺積核大小不一致,原因在於 Motivation 中說的第一點,提升精度。
Fuse:透過 Split 操作分成兩路之後,再把兩路結果進行融合,然後就是一個 Sequeeze and Excitation block。
Select:Select 模組把 Sequeeze and Excitation block 模組的結果透過兩個 softmax 以回歸出 Channel 之間的權重資訊。然後把這個權重資訊乘到和中。這個過程可以看做是一個 soft attention。最好把兩路的特徵圖進行相加得到輸出特徵圖 V。
總結
整體感覺融合了較多的 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% 左右: