SENet


轉自:https://zhuanlan.zhihu.com/p/47494490

SENet的提出動機非常簡單,傳統的方法是將網絡的Feature Map等權重的傳到下一層,SENet的核心思想在於建模通道之間的相互依賴關系,通過網絡的全局損失函數自適應的重新矯正通道之間的特征相應強度

SENet由一些列SE block組成,一個SE block的過程分為Squeeze(壓縮)和Excitation(激發)兩個步驟。其中Squeeze通過在Feature Map層上執行Global Average Pooling得到當前Feature Map的全局壓縮特征向量,Excitation通過兩層全連接得到Feature Map中每個通道的權值,並將加權后的Feature Map作為下一層網絡的輸入。從上面的分析中我們可以看出SE block只依賴與當前的一組Feature Map,因此可以非常容易的嵌入到幾乎現在所有的卷積網絡中。論文中給出了在當時state-of-the-art的Inception[2]和殘差網絡[3]插入SE block后的實驗結果,效果提升顯著。

SENet雖然引入了更多的操作,但是其帶來的性能下降尚在可以接受的范圍之內,從GFLOPs,參數數量以及運行時間的實驗結果上來看,SENet的損失並不是非常顯著。

1. SENet詳解

1.1. SE Block

一個SE Block的結構如圖1所示

圖1:SENet網絡結構

網絡的左半部分是一個傳統的卷積變換,忽略掉這一部分並不會影響我們的SENet的理解。我們直接看一下后半部分,其中 [公式] 是一個 [公式] 的Feature Map, [公式] 是圖像的尺寸, [公式] 是圖像的通道數。

經過 [公式] (Squeeze操作)后,圖像變成了一個 [公式] 的特征向量,特征向量的值由 [公式] 確定。經過 [公式] 后,特征向量的維度沒有變,但是向量值變成了新的值。這些值會通過和 [公式][公式] 得到加權后的 [公式][公式][公式] 的維度是相同的。

1.2. Squeeze

Squeeze部分的作用是獲得Feature Map [公式] 的每個通道的全局信息嵌入(特征向量)。在SE block中,這一步通過VGG中引入的Global Average Pooling(GAP)實現的。也就是通過求每個通道 [公式] 的Feature Map的平均值:

[公式]

通過GAP得到的特征值是全局的(雖然比較粗糙)。另外, [公式] 也可以通過其它方法得到,要求只有一個,得到的特征向量具有全局性。

1.3. Excitation

Excitation部分的作用是通過 [公式] 學習 [公式] 中每個通道的特征權值,要求有三點:

  1. 要足夠靈活,這樣能保證學習到的權值比較具有價值;
  2. 要足夠簡單,這樣不至於添加SE blocks之后網絡的訓練速度大幅降低;
  3. 通道之間的關系是non-exclusive的,也就是說學習到的特征能夠激勵重要的特征,抑制不重要的特征。

根據上面的要求,SE blocks使用了兩層全連接構成的門機制(gate mechanism)。門控單元 [公式] (即圖1中 [公式] 的特征向量)的計算法方式表示為:

[公式]

其中 [公式] 表示ReLU激活函數, [公式] 表示sigmoid激活函數。 [公式] , [公式] 分別是兩個全連接層的權值矩陣。 [公式] 則是中間層的隱層節點數,論文中指出這個值是16。

得到門控單元 [公式] 后,最后的輸出 [公式] 表示為 [公式][公式] 的向量積,即圖1中的 [公式] 操作:

[公式]

其中 [公式][公式] 的一個特征通道的一個Feature Map, [公式] 是門控單元 [公式] (是個向量)中的一個標量值。

以上就是SE blocks算法的全部內容,SE blocks可以從兩個角度理解:

  1. SE blocks學習了每個Feature Map的動態先驗;
  2. SE blocks可以看做在Feature Map方向的Attention,因為注意力機制的本質也是學習一組權值。

1.4. SE-Inception 和 SE-ResNet

SE blocks的特性使其能夠非常容易的和目前主流的卷及結構結合,例如論文中給出的Inception結構和殘差網絡結構,如圖2。結合方式也非常簡單,只需要在Inception blocks或者Residual blocks之后直接接上SE blocks即可。

圖2:SE-Inception和SE-Resnet

2. SENet的復雜性分析

SENet的本質是根據Feature Map的值學習每個Feature Map的權值。 [公式] 往往是一個由幾萬個節點值組成的三維矩陣,但是我們得到的 [公式] 卻只有 [公式] 個值,這種 [公式] 程度的壓縮是具有非常大的可操作性的。例如將 [公式] 展開成 [公式] 的特征向量,然后再通過全連接得到 [公式] ,這也是目前主流的Feature Map到FC的連接方式(Flatten()操作)。而且這種方式得到的 [公式] 往往也是效果優於SE blocks的策略的。但是SENet沒這么做,他的原因是SENet是可以添加到網絡中的任意一層之后的,而全連接操作往往是整個網絡結構的性能瓶頸,尤其是當網絡的節點數非常多時。

論文中主要對比了ResNet-50以及在其中的每一層之后添加了SE blocks之后的在運行性能的各方面的指標:

從計算性能的方向分析:ResNet-50需要約3.86GFLOPS,而SE-ResNet-50僅僅多了0.01個GFLOPS。

從預測速度上來看,運行一個ResNet-50的時間是190ms,SE-ResNet-50的運行時間約209ms,多了10%。

從參數數量上來看,SE-ResNet-50比ResNet-50的2500萬個參數多了約250萬個,約占10%。而且作者發現ResNet-50的最后幾層的SE blocks可以省掉,但是性能影響並不大,這樣的網絡參數僅多了4%。

3. 總結

SENet的思想非常簡單,即通過Feature Map為自身學習一個特征權值,通過單位乘的方式得到一組加權后的新的特征權值。使用的網絡結構則是先GAP再接兩層全連接的方式得到的權值向量。方法雖然簡單,但是非常實用,並在ImageNet-2017上取得了非常優異的比賽成績。

第2節對復雜性的分析引發了我們隊SE blocks的進一步聯想:如何在計算量和性能之間進行權衡?

下面是我的幾點思考:

  1. 先通過RoI Pooling得到更小的Feature Map(例如 [公式] ),在展開作為全連接的輸入;
  2. 在網絡的深度和隱層節點的數目進行權衡,究竟是更深的網絡效果更好還是更寬的網絡效果更好;
  3. 每一層的SE blocks是否要一定相同,比如作者發現淺層更需要SE blocks,那么我們能否給淺層使用一個計算量更大但是性能更好的SE block,而深層的SE blocks更為簡單高效,例如單層全連接等。

Reference

[1] Hu J, Shen L, Sun G. Squeeze-and-excitation networks[J]. arXiv preprint arXiv:1709.01507, 2017, 7.

[2] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. In CVPR, 2015.

[3] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM