[論文速速讀]Squeeze-and-Excitation Networks

Posted by John on 2020-10-18
Words 3.4k and Reading Time 13 Minutes
Viewed Times

〖想觀看更多中文論文導讀,至[論文速速讀]系列文章介紹可以看到目前已發布的所有文章!〗

前言

paper: https://arxiv.org/pdf/1709.01507.pdf

SENet,也就是ILSVRC 2017年的冠軍,是由自駕車公司Momenta所提出,撰寫這篇的同時也為ILSVRC的中文論文導讀系列畫下了一個句點(因為2017是ILSVRC的最後一屆)。

SENet的精神是提出了一個隨插隨用的SE block,讓你可以很沒節操的到處插入別人家的模塊中。使得model能夠針對每一層的channel產生了類似注意力機制的學習機制,廢話不多說,開始來看看SENet做了什麼事情吧!

Abstract

In this work, we focus instead on the channel relationship and propose a novel architectural unit, which we term the “Squeeze-and-Excitation” (SE) block, that adaptively recalibrates channel-wise feature responses by explicitly modelling interdependencies between channels

有別於以往的研究都在探討怎麼在spatial domain上面透過不同的方法增強CNN的feature encoding能力,SENet則是朝向channel的角度來思考,透過提出SE block,一種基於channel-wise attention的模塊,使得模型可以針對不同的channel來給予不同的權重。

  • spatial domain指的是空間域,也就是圖片上的pixel和pixel之間的關係
  • 咦~最後一句話聽起來是不是有點NLP的注意力機制(attention mechanism)的意味在呢? 在NLP的注意力機制盛行後(~2016左右),學者們也開始思考注意力機制在CV的應用摟

Introduction

Recent research has shown that the representations produced by CNNs can be strengthened by integrating learning mechanisms into the network that help capture spatial correlations between features

已經有許多研究表示,可以透過不同的學習機制來增強CNN的捕捉空間相關性的feature能力,例如Inception就是一種mult-scale的學習機制,也有許多人做了不同的嘗試,例如使用了空間域上的注意力機制等。

在這篇論文中提出了不同的觀點 - the relationship between channels,透過對channel上的依賴關係來進行建模,達到提升CNN的效果,為此提出了Squeeze-and-Excitation (SE) block。

這種機制可以學習channel上的全局訊息,來達到channel的recalibration(重新校准),也就是強調比較重要的channel feature,並抑制比較不重要的channel feature的權重。

  • 顧名思義,壓縮(Squeeze)後取得channel上不同程度的重要性然後再激發出來(Excitation)
  • 最後一句話是什麼意思呢?例如不同的channel學習了不同動物的部位特徵,有腳、手、頭、嘴…之類的,那比較重要的部位就給予比較高的權重,比較不重要的(例如某些類別的腳都長得相同沒有分辨性)就降低他的權重
  • 要如何讓模型知道哪些channel是重要的呢?這是學出來的

SE block的架構如下:

假設前一層的輸出為$X$,透過一個Convolution運算$F_{tr}$變成了$U$。SE block的目的是希望透過channel的重新校正(Recalibration)來幫助模型提升特徵萃取的能力,總共分成了兩個步驟:

Squeeze: 透過一個操作將這個在channel上的global information萃取出來(squeeze)。也就是說$U$原本的shape是$(W, H, C)$,透過$F_{sq}$每一個channel取一個代表的值出來,如此就得到了一個$(1, 1, C)$的tensor,論文中稱之channel descriptor

  • 再白話一點解釋的話,每一張$H\times W$的圖片都取一個代表值(channel descriptor),總共有$C$張圖片。這個channel descriptor代表了這一個$U$的全局訊息
  • 怎麼取呢? 有看過前面論文速速讀系列的你可能就想到了一個很常用的操作了: GAP(Global Average Pooling),如果沒想到的快去看[論文速速讀]Network In Network這篇論文

Excitation: 接下來透過$F_{sq}$操作,來學習這些channel descriptor的重要程度,也就反映了原本$U$上面每個channel的重要程度(大)。

  • $F_{sq}$到底是什麼操作呢?簡單來說就是接兩個FC layer(一個降維一個升維)

最後將$U$乘上大小不同的權重就得到了output $\widetilde{X}$

SE block可以很無節操的隨便插入別人家的模型中,就如同Residual block一樣,block插入在淺層和深層的時候模型會自動學習並調整他的channel designators來適應不同的需求。

  • 在淺層中,他會傾向去增強一些shared low-level representation
  • 在比較後面的層中,則是會去強調一些具有分辨性的representation

As a consequence, the benefits of the feature recalibration performed by SE blocks can be accumulated through the network

結論就是,SE block想插哪裏就插哪裡,淺層深層都可以!

有部分內容在介紹之前的一些model,如VGG、GoogLeNet、Resnet…等,所以跳過,有興趣的可以去看論文速速讀的其他篇。

Attention and gating mechanisms

Attention機制來了! 從2016年開始在NLP領域廣泛使用的注意力機制也有越來越多的CV應用。一個注意力機制通常是採用門控機制(sigmoid, softmax)來達成。

關於注意力機制在NLP的應用可以參考下列的論文速速讀系列:

Squeeze-and-Excitation Blocks

這邊其實就是Introduction的細部解釋,所以會介紹快一點。

Squeeze: Global Information Embedding

對於convolution後得到的,將全局空間壓縮成一個值來代表該channel,有很多做法,這裡選擇了最簡單的Global Average Pooling (GAP)來達成

為何是GAP?

  • 其實在進行卷積操作的時候,我們得到的輸出實質上和前一層所有channel都交錯地糾纏在一起
  • 但這個關係有點複雜,所以我們想透過GAP來進行簡化: 也就是GAP得出來的每個點都單純對應該channel而已,和其他channel並沒有任何關係
  • 而這個特性也能幫助我們來訓練模型對訊息特徵的敏感度: 單純的將重要的channel權重加大、不重要的channel權重降低

Excitation: Adaptive Recalibration

這個部分就是兩層FC layer,先升維再降維(為了降低模型複雜度)。

對於GAP後的output $Z \in R^{1 \times 1 \times C}$

  • 透過$W_{1} \in R^{1 \times 1 \times (\frac{C}{R} \times C)}$來降維,會得到$R^{1 \times 1 \times \frac{C}{R}}$,$\delta$是Relu function
  • $W_{2} \in R^{1 \times 1 \times (C \times \frac{C}{R})}$是用來升維的FC layers,$\sigma$是sigmoid function,用來將值調整在0~1的門控機制

最後將他們乘起來,channel-wise multiplication

Instantiations

這裡告訴你怎麼無節操的去插入別人家的網路ლ(╹◡╹ლ)

插入Inception model:

插入ResNet model:

簡單輕鬆又好用!

Model and Computational Complexity

下面表格列出了ResNet、SE-ResNet-50和SE-ResNeXt-50的架構

  • fc中括號的兩個數字分別代表SE block的兩個FC Layer output

以及他的error rate和FLOPS(Floating Point Operations Per Second)

  • 可以發現ResNet-50搭配SENet的效果可以堪比ResNet-101,但計算量只多出了一點點(3.86->3.87)
  • 其他的部分請自己看圖說故事

而對於模型所增加的參數量都來自SE block的兩個FC layer

  • $r$: reduction ratio
  • $S$: number of stages (a stage refers to the collection of blocks operating on feature maps of a common spatial dimension)
  • $C_{s}$: dimension of the output channels
  • $N_{s}$: number of repeated blocks for stage $s$

以SE-ResNet-50為例,參數量大約增加了10%左右,並且SE block在越深層的部分會使用越多的參數(因為越深層dimension越大)。對此他們嘗試在最後一個stage把SE block都移除,降低了4%的參數量,但相對的accuracy只降低了1%。

Experiments

Image Classification

Network depth

在不同深度的ResNet上加入SENet,證實不同的models都可以有效提升效果

Integration with modern architectures

這次配上了比較先進的SOTA models

  • Inception-ResNet-v2
  • ResNeXt

Mobile setting

針對行動端最佳化的模型設計來測試

  • MobileNet
  • ShuffleNet

Additional datasets

測試ImageNet以外的dataset,跳過,有興趣的再自己去看。

Scene Classification

在場景分類任務的dataset上訓練,跳過。

ILSVRC 2017 Classification Competition

ILSVRC的數據,和以前的冠軍相同的,都採用了ensemble的策略

【下方高能預警】 到這邊差不多惹,上面已經很清楚的介紹了SENet,下面是一堆針對設計上的實驗跟分析,如果你只是想知道SENet到底在幹嘛的那我建議看到這裡就夠惹,如果你是很想了解細節內容的就跟隨我繼續往下吧!

Ablation Study

Reduction ratio

在SE block的FC layer降維(reduction ration)到底要降到多少?

這裡基於SE-ResNet-50做了不同r的實驗,發現結果並不會隨著提升r而上升,所以最後採用r=16

Squeeze Operator

比較了Global Average Pooling 和Global Maximum Pooling,發現GAP比較好,所以採用GAP。

Excitation Operator

對於第二個FC layer的activation function,比較了ReLU、tanh和sigmoid,發現sigmoid最好,ReLU特差。因此他們建議選擇一個好的Excitation Operator對於SE block是很重要的。

Different stages

單純將SE block部分加入model某個stage進行分析的實驗,跳過。

有錢人當然是全都加加爆。

Integration strategy

身為一個要插入別人家模型的模塊,當然要研究一下插在哪裡比較好!

所以除了原本的架構,還多實驗了3種不同的位置:

  1. SE-PRE block, in which the SE block is moved before the residual unit
  2. SE-POST block, in which the SE unit is moved after the summation with the identity branch (after ReLU)
  3. SE-Identity block, in which the SE unit is placed on the identity connection in parallel to the residual unit

此外,上面的架構都是將SE block放在Residual block外面。他們也實驗了將這個設計直接做在Residual block內,不過效果並沒有比較好,具體可以去看原文。

Role of SE Blocks

(寫到快死掉了…怎麼做了這麼多分析…)

儘管SE block被證明可以提升效果,但他們想更進一步去看Squeeze和Excitation到底是怎麼影響模型的。所以做了分析的實驗。

Effect of Squeeze

“使用GAP將channel獨立出來到底有沒有用呢?”

為了驗證這個想法,他們將GAP換成了1x1 Conv,如此一來output之間還是channel dependent的然後做實驗。

結果就是GAP還是比較好,並且GAP不用額外的計算參數。

Role of Excitation

觀察Excitation在不同類別和不同layer時的分佈。

取了四個類別: goldfish, pug, plane and cliff,每一類採樣了50個樣本,並觀察他們在最後一個stage中SE block uniformly sampled channels的average activations(也做了1000類的average activations作為比較基準)。

圖片的名字是這樣命名的: SE_<stageID>_<blockID>

在這個實驗中發現了三件個現象:

  1. 不同類別的分佈在較淺層都差不多,這代表模型在淺層學到的都是比較共同的初階特徵(Ex:點線面),這些特徵每個類別都會用到,所以此時SE block的權重分佈會比較一致
    • 例如SE_2_3, SE_3_4
  2. 在比較深層的時候,不同類別的channel值開始出現差異性。因為這時候不同類別的高階特徵可能就具有較大的差異性
    • 例如SE_4_6, SE_5_1

上面兩個觀察驗證了我們在Introduction講的: SE block在淺層和深層學習的任務不同,他會自己根據block所在的位置去學習對應的目標。

  1. 最後,在最後一個stage的後半block觀察到了一些現象
    • SE_5_2有大部分的activation都趨近於1,少部分的channel值是0
    • SE_5_3中每個類別的activations分佈都很類似

對於activation都是1的部分,該block就會退化成standard residual block,因為都是1的話就等於SE block沒有作用。

而對於activations分佈類似的SE block也不會造成模型太大的影響,因為SE block並沒有達到根據不同類別給予不同的權重的效果。

這些觀察代表在深層的時候SE block可能已經趨近飽和,做不太到什麼事情但又造成了較大的計算複雜度(因為深層的dimension都比較大,所以SE block的參數量也會變大)。所以他們就參考了這項實驗,把最後stage的SE block移除,結果如同Model and Computational Complexity章節提到的,準確度只降了1%。

結論

終於寫完了嗚嗚嗚…這篇的Ablation Study世界長欸…寫到懷疑人生。

快速做個總結,SENet並不是一個神經網路模型,而是提出一個新的SE block用來加入其他現有模型,以達到更好效果的研究。

通過SE block,我們可以讓模型有著類似注意力機制的效果: 對於分類某個類別來說,哪些channel的特徵是比較有用的呢?

而為此所耗費的計算量也是非常少的,卻大大提升了現有模型的結果。

隨插隨用棒棒噠!


>