〖想觀看更多中文論文導讀,至[論文速速讀]系列文章介紹可以看到目前已發布的所有文章!〗
前言
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想插哪裏就插哪裡,淺層深層都可以!
Related Work
有部分內容在介紹之前的一些model,如VGG、GoogLeNet、Resnet…等,所以跳過,有興趣的可以去看論文速速讀的其他篇。
Attention and gating mechanisms
Attention機制來了! 從2016年開始在NLP領域廣泛使用的注意力機制也有越來越多的CV應用。一個注意力機制通常是採用門控機制(sigmoid, softmax)來達成。
關於注意力機制在NLP的應用可以參考下列的論文速速讀系列:
- [論文速速讀]Attention Is All You Need
- [論文速速讀]NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
- [論文速速讀]Hierarchical Attention Networks for Document Classification
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種不同的位置:
- SE-PRE block, in which the SE block is moved before the residual unit
- SE-POST block, in which the SE unit is moved after the summation with the identity branch (after ReLU)
- 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>
在這個實驗中發現了三件個現象:
- 不同類別的分佈在較淺層都差不多,這代表模型在淺層學到的都是比較共同的初階特徵(Ex:點線面),這些特徵每個類別都會用到,所以此時SE block的權重分佈會比較一致
- 例如SE_2_3, SE_3_4
- 在比較深層的時候,不同類別的channel值開始出現差異性。因為這時候不同類別的高階特徵可能就具有較大的差異性
- 例如SE_4_6, SE_5_1
上面兩個觀察驗證了我們在Introduction講的: SE block在淺層和深層學習的任務不同,他會自己根據block所在的位置去學習對應的目標。
- 最後,在最後一個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的特徵是比較有用的呢?
而為此所耗費的計算量也是非常少的,卻大大提升了現有模型的結果。
隨插隨用棒棒噠!