論文閱讀 CVPR 2020 — ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
該論文反思既有的 Channel attention 作法,並提出Efficient channel attention ( ECA ) 模組,在 Channel 的維度上善用 1D Convolution 捕捉「 Local cross-channel interaction 」,是個輕量且可隨插即用的模組,可用來提升深度卷積神經網路的擬合能力。
論文連結:
《 ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 》
作者:
Introduction
目前在電腦視覺的領域上,具備深度的卷積神經網路已經在多種任務上取得很大的進步。近年在 Convolution block 的設計上,有發展出一系列相當有潛力的研究,主要是探討將 Attention 機制應用於 Channel 維度的作法。
其中相當具代表性的研究是 SENet,後續也有一些研究嘗試利用更複雜的機制捕捉 Channel-wise dependencies ,或結合 Spatial 維度的作法來提昇模型的整體效能。雖然這些作法都確實有提昇準確度,但也同時造成模型複雜度更高、運算成本增加的情況。
而該論文的研究方向和過往不盡相同,主要目的是發展出一套更有效率的 Channel attention 作法。在說明該論文的作法之前,先回顧一下過去 SENet 的 SE Block 是如何設計的。
SE Block
SE Block 的作法會先對 Input feature 的每個 Channel 做 Global average pooling 的運算 ( F_sq ),接著是透過兩層 Fully-connected layer ( 每層有使用Sigmoid function 讓模型做非線性的擬合 ) 來生成對每個 Channel 的 Weight ( F_ex )。
這兩層 Fully-connected layer 正是捕捉 Cross-channel interaction 的地方,在原設計中有結合降維的作法來控制模型複雜度,在後續研究中雖然也沿用這作法,但該論文的研究發現它是有副作用的,也不見得是有效的作法。
Efficient Channel Attention ( ECA )
該論文提出一個稱為 Efficient Channel Attention ( ECA ) 的模組,嘗試不用降維的作法來更有效地捕捉 Cross-channel interaction:
這個 ECA 模組的作法也會先對特徵圖做 GAP ,但不做降維,取而代之的是透過 1D Convolution ( Kernel size 設定為 k ) 捕捉 Local 的 Cross-channel interaction,後續會有實驗說明這方法確實比過去作法更有效。為了避免手動調整 k 的設定,該論文用具備適應性的方法設計這個 k 。
下圖是在幾種常見的 Backbone 上加入 ECA 和其他 Channel attention 作法的比較:
詳細實驗設定、數據請參照 Experiments 章節,原則上來說是更輕巧、更準確。
Contributions
這邊小結一下該論文的貢獻:
- 剖析 SE block 並點出「 避免 」使用降維的作法可以更有效地捕捉 Cross-channel interaction,並作到更好的 Channel attention 。
- 基於前述分析,該論文設計出一種輕量的 Channel attention 的作法,並稱之為 Efficient Channel Attention ( ECA )。可在輕微增加模型複雜度的情況下,明顯改善準確度 。
- 在 ImageNet-1K 和 MS COCO 等資料集上,ECA-Net 與其他 SOTA 相比,在相對低的模性複雜度之下,有著具備競爭力的表現。
Related Work
前面提過的 SENet 有一些後續的相關研究,主要可分為以下兩種方向:
- 強化特徵聚合
- 結合 Spatial 和 Channel 維度的操作
更具體一點來說,有以下相關論文:
- Convolutional Block Attention Module ( CBAM ):
有結合 Channel 和 Spatial 維度的操作,對 Channel 的作法類似於 SENet,但在 Pooling 過程是用 Max Pooling 和 Avg Pooling 。對 Spatial 的維度則是多做一次 2D Convolution。 - Global Second-order Pooling ( GSoP ):
先透過 1 × 1 convolution 對特徵圖做降維後,再計算 Channel 之間的 Correlations ,接著對 Covariance matrix 做 Row-wise convolution ,再透過 1 × 1 convolution 將 Weight vector 壓縮成原始 Channel 維度後進行加權。由於過程中有 Quadratic operation,因此以 Second-order 取名。 - Gather-excite ( GE ):
探索聚合 Spatial 維度特徵時,採用 Depth-wise convolution 的可能 。 - Global Context Network ( GCNet ):
在 Spatial 維度聚合特徵的作法是參考 Non-Local ( NL ) neural networks 捕捉 Long-range dependency,再整合 SENet 對 Channel 的作法。
另外還有將類似作法應用於不同任務上的相關研究,像是 Double Attention Networks ( A²-Nets ) 則是針對影片辨識設計的架構,Dual Attention Network ( DAN ) 則是針對 Semantic segmentation 的研究。但前述兩個 NL-based 的研究都因為其運算複雜度高而導致 Attention 機制只能應用於單一或少數幾個 Convolution block 。
另一系列相關的研究是輕量化的 CNN ,像是 Group convolution 或 Depth-wise convolution 等方法,相關比較就留在 Experiments 章節說明。
由於該論提出的 ECA 模組是要捕捉 Local cross-channel interaction ,因此會和 Channel local convolutions 和 Channel-wise convolutions 的作法有些相似的特性,然而差異在於:該論文探索的是用具適應性 Kernel 的 1D Convolution 在 Channel attention 機制上取代 Fully-connected layer 的可能 。
Proposed Method
Revisiting Channel Attention in SE Block
前面曾提到該論文剖析 SE block,這邊用公式回顧一下 SE block 的作法:
假設 y = g(X),f{W_1,W_2} 則可表述為:
為降低模型的複雜度,W_1 和 W_2 刻意設計成:
即可作到 Dimensionality reduction 的作用。
Efficient Channel Attention ( ECA ) Module
Avoiding Dimensionality Reduction
回顧了 SE block 之後,該論文做了一系列實驗來分析「 Dimensionality reduction 」和「 Cross-channel interaction 」對 Channel attention 的影響:
上表的 SE-Var1、SE-Var2 和 SEVar3 是 SE block 的三種不同變體,作法上都沒有 Dimensionality reduction 的設計。
以 SE-Var1 來看的話,可以跟 Vanilla 版本做比較,在一樣沒有額外參數量的情況下,可以稍微改善模型的表現。
SE-Var2 則是針對每一個 Channel 學習獨立的 Weight,和 SE block 相比,參數量較低,但是 Top-1 的準確度有微幅改善。這現象在作者們看來,Channel 及其對應 Weight 需要的是一種直接的對應關係,應該要避免 Dimensionality reduction 的作法。
而 SEVar3 則是只用單一層的 FC layer 來學習非線性的 Channel dependencies,效果就比 SE block 來的好。
基於這三項實驗的觀察,作者們主張「 避免使用 Dimensionality reduction 的設計會有助於更有效地學習 Channel attention 」,因此後續在設計 ECA 模組時,便捨棄了 Dimensionality reduction 的作法。
Local Cross-Channel Interaction
若將不做 Dimensionality reduction 的特徵以 y 表示,Channel attention 可以透過以下公式進行學習:
而對於前面提過的 SE-Var2 和 SE-Var3 變體來說,W 則可表述為:
W_var2 和 W_var3 的主要差異在於,W_var3 有考量 「 Cross-channel interaction 」,且因此展現較佳的成果,但同時代價就是參數量較大,會導致模型複雜度提升。
因此,該論文的作者們就想了一個折衷的辦法,以 W_var2 為基礎延伸出 Block diagonal matrix:
這樣的做法可以讓每個模型在每個 Group 獨立學習 Channel attention,並捕捉 「 Cross-channel interaction 」,參數量也因此縮小為 C²/G。
若以 Convolution 的角度來看 SE-Var2 、SE-Var3 和上方的 W_G,其實就近似於 Depth-wise separable convolution 、FC layer 和 Group convolutions 的作法。
然而將 SE block 結合 Group convolutions 的方法 ( SE-GC ) 也不是沒有被嘗試過,ECCV 2018 的 Shufflenet V2 就曾做過這件事情:
但過多的 Group convolutions 會增加讀取記憶體的成本並導致計算效率下降。且就前面的 Table 2 來看,帶來的效益也沒有 SE-Var2 來得多。作者們推論原因是既有的 SE-GC 作法完全忽略了不同 Group 之間的關聯性,所以導致成效不佳。
而該論文所提出的 ECA 模組,則是另一種捕捉「 Local cross-channel interaction 」的方法,同時兼具運算效率及有效性。這方法的 W 比較特別,這邊以 W_k 表示,而 W_k 是個 Band matrix:
參數量是 k × C ,會比 W_G 的 C²/G 還要少,且有著避免各個 Group 完全獨立學習的設計。上式的 ω 則會透過以下公式計算:
針對每個 y 的 Weight 會考量對鄰近 k 個 Channel 的互動而生成。
另一個更有效率的方法是讓每個 Channel 共享相同的參數:
這個邏輯可以很輕易地用 Kernel size 為 k 的 1D convolution 來做實踐:
上式就是該論文提出的 Efficient channel attention ( ECA ) module,而前面 Table 2 的 ECA ( Ours ) 則是將 k 設定為 3,有著和 SE-var3 接近的準確度,但模型複雜度降低很多。
Coverage of Local Cross-Channel Interaction
既然這個 ECA 模組是要適當地捕捉「 Local cross-channel interaction 」,就會需要去決定這個 Local 所涵蓋的範圍 ( k 要設定多少 ) 。
一個很直覺的方法是手動地透過 Cross-validation 嘗試不同的 k 來找出最佳的設定,但這種作法運算量相當龐大。為了避免這問題,作者們參考了 Group convolutions 的設計方法,透過一種「 比例 」的概念來設計這個 k :
其中的 φ 是個對應 Channel 數的 Mapping function ,最簡單的形式可以是:
但通常 Channel 數會是以 2 為底的 N 次方,因此作者們將上述非常簡單的線性方程式延伸為非線性的:
若給予的是 Channel 數,那 Kernel size k 就可被以下公式計算:
這個 Mapping function ψ 會讓 Channel 在高維度時看到較遠的關聯性,反之,低維度就只能看到較近的互動關係。
ECA Module for Deep CNNs
上圖就是該論提出的 ECA 模組,基本上會先透過 GAP 對 Feature map 做特徵的聚合,這過程完全不使用任何 Dimensionality reduction 的手法,再根據 Channel 數以前述的 Mapping function ψ 調整 1D Convolution 的 Kernel size 並在 Channel 上捕捉「 Local cross-channel interaction 」,最後再經過一個 Sigmoid function 學習出 Channel attention。
若以 Pytorch 語法描述 ECA 模組會是這個樣子:
後續實驗會將此模組應用於不同的深度卷積神經網路,作法是取代既有的 SE block,但其餘設定皆遵循原論文。
Experiments
為了驗證該論文提出的方法確實有效,有將實驗做在 ImageNet 和 MS COCO 這種常見的 Large-scale dataset,並對影像分類、物件偵測和語意分割等任務都有進行驗證,詳細的實驗設定請自行參照原文。
Image Classification on ImageNet-1K - Effect of Kernel Size (k) on ECA Module
第一步是先找出最有效的 Kernel size 設定,所以先將 ECA 模組嵌入在 ResNet-50 和 ResNet-101 的 Backbone 上,並實驗兩者在 ImageNet 資料集上,將 k 設定為 3 ~ 9 的結果:
對 ResNet-50 和 ResNet-101 來說,最好的結果分別是 k = 9 和 k = 5 的設定,由於較深的神經網路有較多的中介層,所以傾向採用較小的 k 也是合理的。
另外是透過 Mapping function ψ 動態調整 Kernel size 的結果,普遍比 Fix 的情況來得好,且可省下手動調參所造成的運算成本。
Image Classification on ImageNet-1K - Comparisons Using Different Deep CNNs
確定了 k 的設定後,就是將它放在不同模型上進行比較:
整體來說,可以在相對精簡的參數量下,表現出很不錯的準確度。
Image Classification on ImageNet-1K — Comparisons with Other CNN Models
另外是將 ECA-Net50 和 ECA-Net101 與其他 SOTA 做比較:
如上表所示,ECA-Net101 可以比 ResNet-200 表現得還好,且運算成本較低;ECA-Net101 也與 ResNeXt-101 的表現接近,但 ResNeXt-101 有花比較多的代價在使用 Convolution filters 和 Group convolutions 。
另外就 ECA-Net50 來看,其表現與 DenseNet-264 (k=32)、DenseNet-161 (k=48) 和 Inception-v3 差不多,但模型參數量、運算量都低了許多。
以上結果都表明了該論文提出的 ECA-Net 在精簡的參數量做出接近 SOTA 的成果。而在未來的技術發展上, ECA 模組也具備了再進一步改善的潛力。
Object Detection on MS COCO
在物件偵測的任務上,該論文有嘗試使用 Faster R-CNN 、Mask R-CNN 和 RetinaNet ,但主要還是比較 ECA-Net 和 ResNet 、 SENet 的差異,後續實驗都是先訓練在 ImageNet 再遷移到 MS COCO 資料集。以下為相關實驗數據:
基本上有加入 ECA 模組之後都會帶來不少的改善,與 SE block 相比,只有在少數的情況下略遜一籌,但模型複雜度都是相對低的狀態。
Instance Segmentation on MS COCO
語意分割的任務上則是在 Mask R-CNN 上使用 ECA 模組,並在 MS COCO 進行相關實驗:
同樣也有帶來準確度上的改善。
Conclusion
該論文專注於探索深度卷積神經網路的 Channel attention 作法,並提出 Efficient channel attention ( ECA ) 模組,善用一個 Non-linear mapping function 調整 1D Convolution 的 Kernel size ,並在 Channel 的維度上捕捉「 Local cross-channel interaction 」。
就實驗結果來看,ECA 模組具備輕量、隨插即用的特性,可用來改善許多深度卷積神經網路的效能,且可泛化至多種電腦視覺的任務上。