ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 論文學習

Abstract

通道注意力機制被證明可以極大地提升CNN的表現。但是,現有的方法都致力於設計出更復雜的注意力模塊,來實現更高的準確率,不可避免地增加模型的複雜度。爲了克服表現與複雜度之間的trade-off,作者提出了一個高效的通道注意力(ECA)模塊,只用少量的參數,卻能帶來明顯的性能提升。通過分析SENet中的通道注意力模塊,作者證明保持維度對於學習通道注意力非常重要,合適的跨通道交流可以保持性能,而極大地降低複雜度。因此,本文提出了一個局部跨通道交流策略,不需要降維,可以通過1D卷積高效率地實現。而且,作者設計了一個方法,可以動態地選擇1D卷積的卷積核大小,決定局部跨通道交流的覆蓋範圍。ECA模塊非常高效管用,比如本文模塊與 ResNet-50主幹網絡相比,其參數量和計算量分別是80 vs. 24.37M,4.7e44.7e-4 GLOPs vs. 3.863.86 GFLOPs,而且其top-1準確率得到了2%2\%的提升。作者在圖像分類、目標檢測、實例分割任務上進行了評測,利用ResNets和MobileNetV2主幹網絡。實驗結果顯示,該模塊更加高效率,而性能優異。

1. Introduction

CNN 被廣泛使用在計算機視覺領域,在很多任務上都取得了突破,如圖像分類、目標檢測和實例分割。自從AlexNet,該領域的許多研究都在不斷地提升了CNN的性能。最近,在卷積模塊中加入通道注意力機制得到了許多的關注,取得了巨大的性能提升。Squeeze-and-excitation網絡是其中具有代表性的,它學習每個卷積模塊的通道注意力機制,給深度CNN結構帶來顯著的性能提升。

在這裏插入圖片描述

依照SENet中的 squeeze(如特徵聚合)和 excitation(如特徵重校準)操作,一些方法通過學習複雜的通道間依賴關係,或者結合額外的空間注意力機制,來改進SE模塊。儘管這些方法都取得了更高的準確率,但是會增加模型複雜度和計算負擔。與這些方法不同,本文關注於一個問題:能否以更高效的方式來學習通道注意力?

爲了回答這個問題,作者首先回顧了SENet的通道注意力模塊。給定輸入特徵,SE模塊首先對每個通道單獨地使用一個全局平均池化,然後跟着2個全連接層和非線性激活函數來生成通道的權重。這2個全連接層用於獲取非線性跨通道的交流,降維來控制模型複雜度。儘管這個策略被廣泛應用在隨後的通道注意力模塊中,本文的研究發現降維會給通道注意力預測帶來副作用,獲取所有通道的依賴關係是低效且沒必要的。

因此,本文提出了ECA模塊,避免降維,以高效率的方式來實現跨通道交流。如圖2所示,在沒有降維的通道全局平均池化後,ECA會使用每個通道及其kk個近鄰,來實現局部跨通道交流。該方法效率高且有效。ECA可以通過快速1D卷積來高效實現,該卷積核大小是kkkk代表了局部跨通道交流的覆蓋範圍,如會有多少個近鄰參與到單個通道的注意力預測中去。爲了避免通過cross-validation來手動調節kk,交流的覆蓋範圍(如卷積核大小kk)與通道維度成比例關係。如圖1和表3所示,與主幹網絡相比,使用了ECA模塊的CNN(ECA-Net)會引入極少的參數與計算量,但帶來的增益很明顯。例如,ResNet-50有24.37M個參數,計算量是3.86 GLOPs,ECA-Net50的參數量則只有80個,計算量是4.7e44.7e-4GLOPs。同時,ECA-Net50要比ResNet-50的準確率高2.28%2.28\%

表1總結了現有注意力模塊,關於通道是否降維、跨通道交流和輕量級模型,我們可以看到ECA模塊能夠學到有效的通道注意力,無需降維操作,以極爲輕量的方式來實現跨通道交流。爲了評價該方法,作者在ImageNet-1K和MS COCO數據集上做了大量的實驗。

本文總結如下。(1) 作者分析了SE模塊,證明無需降維操作,恰當的跨通道交流對於學習有效的通道注意力非常重要。(2) 基於上述分析,作者嘗試設計一個極爲輕量的通道注意力模塊,提出了高效通道注意力ECA模塊,不會增加模型複雜度,但能帶來明顯提升。(3) 在ImageNet-1K和MS COCO上的實驗結果顯示,該方法的模型複雜度較低,但是表現優於現有SOTA方法。

2. Related Work

注意力機制已被證明可以提高CNN的性能。SE-Net 第一次提出了一個有效的方式來學習通道注意力,並取得不錯的表現。隨後,注意力模塊的發展可以分爲2個方向:(1) 特徵融合增強;(2) 通道和空間注意力結合。CBAM 使用了平均和最大池化來融合特徵。GSoP 引入了二階池化,更有效地融合特徵。GE 則使用深度卷積探索了空間擴展性,融合特徵。CBAM 和 scSE 使用一個2D卷積來計算空間注意力,卷積核大小是k×kk\times k,然後將之與通道注意力結合。與Non-Local 有着相似的思想,GC-Net 設計了一個簡單的NL網絡,並與SE模塊整合,得到一個輕量級的模塊,從而對長期依賴關係建模。Double Attention Networks(A2A^2-Nets)爲NL模塊引入了一個新的關係函數,用於圖像或視頻識別。Dual Attention Network(DAN) 在語義分割上,同時考慮了NL-based通道注意力和空間注意力。但是,大多數NL-based注意力模塊只能用在單個或少量的卷積模塊中,因爲它們的複雜度很高。顯然,上述所有的方法都關注在如何設計更復雜的注意力模塊,來取得更高的性能。與它們不同,ECA 旨在學習有效的通道注意力,而複雜度很低。

在這裏插入圖片描述

本文與高效卷積相關,可用於構建輕量級CNN。兩個廣泛應用的高效率卷積就是分組卷積和深度可分離卷積。如表2所示,儘管這些卷積的參數都不多,但是在注意力模塊上的功效卻很低。ECA模塊意圖獲取局部跨通道交流,與通道局部卷積和通道卷積有相似性;與它們不同,ECA通過自適應的卷積核大小來調節1D卷積,在通道注意力模塊中代替全連接層。與分組和深度可分離卷積相比,本文方法得到了更優的表現,而複雜度更低。

在這裏插入圖片描述

3. Proposed Method

本部分,作者首先回顧了SENet中的通道注意力模塊。然後,通過研究降維和跨通道交流的作用,經驗性分析了SE模塊。這就促使了作者提出ECA模塊。此外,作者提出了一個方法來動態地決定ECA的參數,並將之應用到CNN中去。

在這裏插入圖片描述

3.1 Revisiting Channel Attention in SE Block

將卷積模塊的輸出記作χRW×H×C\chi \in \mathbb{R}^{W\times H\times C},其中W,H,CW,H,C分別是寬度、高度、通道維度(濾波器個數)。因此,SE模塊的通道權重可以計算爲:

ω=σ(f{W1,W2}(g(χ)))\omega = \sigma(f_{\{W_1, W_2\}} (g(\chi)))

其中,g(χ)=1WHi=1,j=1W,Hχijg(\chi) = \frac{1}{WH} \sum_{i=1,j=1}^{W,H} \chi_{ij}是通道全局平均池化(GAP),σ\sigma是Sigmoid函數。令y=g(χ),f{W1,W2}y=g(\chi), f_{\{W_1,W_2\}}表示如下:

f{W1,W2}(y)=W2ReLU(W1y)f_{\{W_1,W_2\}}(y)=W_2 ReLU(W_1y)

其中ReLU就是Rectified Linear Unit函數。爲了不讓複雜度很高,W1,W2W_1,W_2的大小被設定爲C×(Cr)C\times (\frac{C}{r})(Cr)×C(\frac{C}{r})\times C。可以看到f{W1,W2}f_{\{W_1,W_2\}}包含了通道注意力模塊的所有參數。儘管上面等式中的降維操作可以降低複雜度,但是摧毀了通道和權重之間直接的對應關係。例如,單個全連接層通過各通道的線性組合,可預測每個通道的權重。但是上面等式2首先將通道特徵映射到一個低維度空間,然後再映射回來,使得通道並不直接對應着權重。

3.2 Efficient Channel Attention Module

回顧完SE模塊,作者比較分析了通道降維和通道注意力學習過程中跨通道交流的作用。根據這些分析,作者提出了ECA模塊。

3.2.1 Avoiding Dimensionality Reduction

等式2中的降維操作使得通道和權重並不直接對應。爲了驗證,作者將原始的SE模塊和其變體(SE-Var1, SE-Var2, SE-Var3)做了比較,它們都沒有做降維。如表2所示,SE-Var1 沒有參數,仍然優於原始的SE網絡,表明通道注意力可以提升CNN的性能。同時,SE-Var2 獨立地學習每個通道的權重,要優於SE模塊,而參數要更少。這就表明,通道和其權重之間需要建立直接的對應關係,不降維要比使用非線性通道依賴更加重要。此外,SE-Var3使用單個全連接層,效果要比SE模塊中降維了的2個全連接層好。上述結果清楚地證明,不降維對於學習通道注意力很有幫助。因此,作者設計了ECA模塊,沒有用到降維。

3.2.2 Local Cross-Channel Interation

給定沒有降維的聚合特徵yRCy \in \mathbb{R}^C,通道注意力可以通過下面等式來學習:

ω=σ(Wy)\omega = \sigma(Wy)

其中WW是一個C×CC\times C的參數矩陣。對於SE-Var2和SE-Var3,我們有

在這裏插入圖片描述

其中,SE-Var2 的 Wvar2W_{var2}是一個對角矩陣,包含CC個參數;SE-Var3的Wvar3W_{var3}是一個全矩陣,包含C×CC\times C個參數。如上面等式,其核心區別是,SE-Var3考慮跨通道交流,而SE-Var2則不會,因此SE-Var3的表現要更好。該結果表明,跨通道交流對於通道注意力學習有幫助。但是,SE-Var3 需要大量的參數,導致模型複雜度高,尤其是通道數很多的時候。

在SE-Var2和SE-Var3之間,一個折中方案就是將Wvar2W_{var2}替換爲一個塊對角矩陣,即

在這裏插入圖片描述

它將通道分爲GG個組,每個包含C/GC/G個通道,在每個組內獨立地學習通道注意力,在局部範圍內實現跨通道交流。因而,它涉及到了C2/GC^2/G個參數。從卷積的角度來看,SE-Var2、SE-Var3和上面等式可以分別看作爲深度可分離卷積、全連接層和帶分組卷積的全連接層。帶分組卷積的SE模塊(SE-GC)表示爲σ(GCG(y))=σ(WGy)\sigma(GC_G(y)) = \sigma(W_Gy)。但是,過度使用分組卷積會增加內存讀寫成本,降低計算效率。而且如表2所示,不同組數的SE-GC並不會給SE-Var2帶來增益,表明它對於實現局部跨通道交流沒什麼用。原因可能是,SE-GC完全丟失了不同分組內的依賴關係。

本文,作者探索了另一個實現局部跨通道交流的方法,確保其有效性。作者使用矩陣WkW_k來學習通道注意力,

在這裏插入圖片描述

WkW_kk×Ck\times C個參數,要少於等式5。而且,它避免了等式5中各分組完全獨立的問題。如表2所示,等式6(ECA-NS)的方法超過了等式5的SE-GC。對於等式6,yiy_i的權重可以僅考慮yiy_i和其kk個近鄰的交流,

ωi=σ(j=1kwijyij),yijΩik\omega_i = \sigma(\sum_{j=1}^k w_i^j y_i^j), y_i^j \in \Omega_i^k

其中Ωik\Omega_i^k表示yiy_ikk個毗鄰的通道集合。

一個更有效的方式就是,所有的通道共享學習參數:

ωi=σ(j=1kwjyij),yijΩik\omega_i = \sigma(\sum_{j=1}^k w^j y_i^j), y_i^j \in \Omega_i^k

注意該策略可以很容易地通過快速1D卷積實現,卷積核大小是kk

ω=σ(C1Dk(y))\omega = \sigma(C1D_k(y))

其中C1DC1D表示1D卷積。這裏,等式9中的方法叫做ECA模塊,只有kk個參數。如表2所示,k=3k=3的ECA模塊可以取得與SE-Var3相似的結果,但是複雜度要低非常多,確保了其效率和有效性,實現局部跨通道交流。

3.2.3 Coverage of Local Cross-Channel Interation

因爲ECA模塊意圖實現局部跨通道交流,所以我們要決定其交流的覆蓋範圍(如1D卷積的卷積核大小kk)。在不同的CNN結構中,對於不同通道數量的卷積模塊,我們可以手動去調節最優的交流覆蓋範圍。但是,通過cross-validation來手動調會消耗大量的算力資源。分組卷積在CNN結構使用中很成功,可以提升CNN的性能,給定固定個數的分組,高維(低維)通道會出現長期(短期)卷積。有着相似的思想,交流的覆蓋範圍與通道維度CC成比例關係,就是合理的。換句話說,在kkCC之間存在着映射ϕ\phi:

C=ϕ(k)C=\phi(k)

最簡單的映射就是線性函數,ϕ(k)=γkb\phi(k) = \gamma \ast k - b。但是,線性函數的關係太侷限了。另一方面,我們知道通道維度CC(濾波器個數)通常是22的指數。因此,作者將線性函數ϕ(k)=γkb\phi(k) = \gamma \ast k - b擴展爲非線性函數:

C=ϕ(k)=2γkbC=\phi(k) = 2^{\gamma \ast k - b}

然後,給定通道維度CC,卷積核大小kk可以自適應地決定:

k=ψ(C)=log2(C)γ+bγoddk=\psi(C) = |\frac{\log_2 (C)}{\gamma} + \frac{b}{\gamma}|_{odd}

其中todd|t|_{odd}表示tt最近的奇數個鄰居。本文,γ\gamma設爲2,bb設爲1。很清楚,對於映射ψ\psi,通過非線性映射,高維通道有着更長期的交流,而低維通道的交流要短一些。

3.3 ECA Module for Deep CNNs

在這裏插入圖片描述

圖2 顯示了ECA模塊。用GAP聚合完卷積特徵後,沒有降維,ECA模塊首先自適應地判斷卷積核大小kk,然後執行1D卷積,後面跟着一個Sigmoid函數來學習通道注意力。爲了將ECA應用在CNN上,作者將SE模塊替換爲ECA模塊。該網絡被叫做ECA-Net。圖3給出了ECA的PyTorch代碼。

在這裏插入圖片描述

4. Experiments

Pls read paper for more details.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章