通道注意力超強改進,輕量模塊 ECANet 來了!即插即用,顯著提高 CNN 性能|已開源

原文鏈接:通道注意力超強改進,輕量模塊 ECANet 來了!即插即用,顯著提高 CNN 性能|已開源

本文原創首發自極市平臺公衆號,請授權後轉載。

極市導讀:今天給大家推薦一篇CVPR2020上對通道注意力進行改進的文章—ECANet,ECANet主要對SENet模塊進行了一些改進,提出了一種不降維的局部跨信道交互策略(ECA模塊)和自適應選擇一維卷積核大小的方法,從而實現了性能上的提優。最近已經有很多文章在通道和空間注意力上做改進並取得了性能提升。例如SKNet,SANet,ResNeSt等等,不得不說,注意力機制真的香!

  • 論文鏈接:https://arxiv.org/abs/1910.03151

  • 代碼地址:https://github.com/BangguWu/ECANet

論文摘要

最近,通道注意力機制被證明在改善深度卷積神經網絡(CNNs)的性能方面具有巨大的潛力。然而,現有的方法大多致力於開發更復雜的注意力模塊,以實現更好的性能,這不可避免地增加了模型的複雜性。爲了克服性能和複雜性之間的矛盾,本文提出了一種有效的通道關注(ECA)模塊,該模塊只增加了少量的參數,卻能獲得明顯的性能增益。通過對SENet中通道注意模塊的分析,作者的經驗表明避免降維對於學習通道注意力非常重要,適當的跨信道交互可以在顯著降低模型複雜度的同時保持性能。因此,足者提出了一種不降維的局部跨信道交互策略,該策略可以通過一維卷積有效地實現。進一步,作者又提出了一種自適應選擇一維卷積核大小的方法,以確定局部跨信道交互的覆蓋率。 實驗證明,我們提出的ECA模塊是高效的。

本文模塊相對於ResNet50的主幹的參數和計算分別是80比24.37M和4.7e-4 GFLOPs比3.86 GFLOPs,並且性能在Top-1精度方面提升超過2%。本文以ResNets和MobileNetV2爲骨幹,利用提出的ECA模塊在圖像分類、目標檢測和實例分割方面進行了廣泛的評估。實驗結果表明,該模塊在性能上優於其他模塊,且具有較高的效率。

ECA模塊與其他注意力模塊的比較:這裏以ResNets作爲骨幹模型來進行分類精度,網絡參數和FLOPs的比較,以圓來表示。從圖1中,我們可以發現,我們的ECA網絡模塊獲得了更高的精度,同時有較少的模型複雜性。

論文簡介

深度卷積神經網絡(CNNs)在計算機視覺領域得到了廣泛的應用,在圖像分類、目標檢測和語義分割等領域取得了很大的進展。從開創性的AlexNet開始,爲了進一步提高深度cnn的性能,不斷推出新的CNN模型。近年來,將通道注意力引入卷積塊引起了人們的廣泛關注,在性能改進方面顯示出巨大潛力。其中代表性的方法是SENet,它可以學習每個卷積塊的通道注意力,對各種深度CNN架構帶來明顯的性能增益。SENet主要是 squeeze 和 excitation 兩大操作,最近,一些研究通過捕獲更復雜的通道依賴或結合額外的空間注意來改進SE塊。這些方法雖然取得了較高的精度,但往往帶來較高的模型複雜度和較大的計算負擔。與前面提到的以更高的模型複雜度爲代價來獲得更好性能的方法不同,本文轉而關注一個問題:能否以更有效的方式學習有效的通道注意力?

爲了回答這個問題,我們首先回顧一下SENet中的通道注意模塊。具體來說,在給定輸入特徵的情況下,SE塊首先對每個通道單獨使用全局平均池化,然後使用兩個具有非線性的完全連接(FC)層,然後使用一個Sigmoid函數來生成通道權值。兩個FC層的設計是爲了捕捉非線性的跨通道交互,其中包括降維來控制模型的複雜性。雖然該策略在後續的通道注意模塊中得到了廣泛的應用,但我們的實驗研究表明,降維對通道注意預測帶來了副作用,捕獲所有通道之間的依賴是低效的,也是不必要的。
因此,本文提出了一種針對深度cnn的高效通道注意(ECA)模塊,該模塊避免了降維,有效捕獲了跨通道交互的信息。如下圖2所示:

在不降低維數的通道級全局平均池化之後,我們的ECA通過考慮每個通道及其k個鄰居來捕獲局部跨通道交互信息。實踐證明,該方法保證了模型效率和計算效果。需要注意的是,我們的ECA可以通過大小爲k的快速1D卷積來有效實現,其中卷積核大小爲k代表了局部跨信道交互的覆蓋率,即,該通道附近有多少鄰居參與了這個信道的注意力預測,爲了避免通過交叉驗證對k進行手動調優,我們提出了一種方法來自適應地確定k,其中交互的覆蓋率(即卷積核大小 k)與通道維數成正比。

與主幹模型相比,帶有ECA模塊的深度CNNs(稱爲ECA- net)引入了很少的額外參數和幾乎可以忽略的計算,同時帶來了性能增益。例如,對於具有24.37M參數和3.86 GFLOPs的ResNet-50來說, ECA-Net50的附加參數和計算分別爲80和4.7e-4 GFLOPs;與此同時,ECA-Net50在Top 1 Accuracy方面比ResNet-50高出2.28%。表1 總結了現有的注意模塊,包括是否降低通道維度(DR)、跨通道交互和輕量級模型。從表中可以看出,我們的ECA模塊通過避免降低通道維度來學習有效的通道注意力,同時以極其輕量級的方式獲取跨通道的交互信息。


本文的貢獻總結如下:

  1. 我們對SE模塊進行了剖析,並分別證明了避免降維和適當的跨通道交互對於學習高性能和高效率的通道注意力是重要的。

  2. 在以上分析的基礎上,我們提出了一種高效通道注意模塊(ECA),在cnn網絡上提出了一種極輕量的通道注意力模塊,該模塊增加的模型複雜度小,提升效果顯著。

  3. 我們在ImageNet-1K和MS COCO上的實驗結果表明,我們提出的方法具有比目前最先進的CNN模型更低的模型複雜度,與此同時,我們的方法卻取得了非常有競爭力的結果。

ECA模塊介紹

下面我們主要來介紹一下ECA的模塊,首先由公式2:

我們知道通道與其權值之間的對應關係是間接的。爲了驗證它的效果,我們比較了原始SE塊和它的三個變體(即 SE-Var1, SE-Var2和SE-Var3),所有這些都沒有進行降維操作。具體效果如下表2所示:

無參數的SE-Var1仍然優於原始網絡,說明channel attention具有提高深度CNNs性能的能力。而SE- Var2通過獨立學習各通道的權值,在參數較少的情況下略優於SE模塊。這說明通道與其權值需要直接對應,從而通過避免降維可以比考慮非線性通道之間的相關性更爲重要。此外,SE模塊採用單個FC層的SE- var3性能優於降維的兩層FC層。以上結果清楚地表明,避免降維有助於學習有效的通道注意。因此,我們提出了不降低通道維數來進行跨通道信息交互的ECA模塊。

在本文中,我們提出了一種新的捕捉局部跨通道信息交互的方法(ECA模塊),旨在保證計算性能和模型複雜度。我們用 W_{k}來表示學習到的通道注意力:

W_{k}涉及K*C個參數,並且W_{K}避免了不同group的完全獨立,正如在上表2中所示,我們提出的這種方法叫做ECA-NS,他比SE-GC性能要更優。對於權重y_{i},我們只考慮y_{i}和它的k個鄰居之間的信息交互,計算公式如下:

爲了進一步提高性能,我們還可以讓所有的通道共享權重信息,即:

根據上面的分析,我們提出一種新的方法,該方法可以通過卷積核大小爲K的一維卷積來實現通道之間的信息交互:

這裏,C1D代表一維卷積,這種方法我們稱之爲ECA模塊,它只涉及K個參數信息,當k=3時,我們的ECA模塊可以實現與SE-Var3同樣的效果但卻有更低的模型複雜度。因此,這種捕捉跨通道信息交互的方法保證了性能結果和模型效率。

由於我們的ECA模塊旨在適當捕獲局部跨道信息交互,因此需要確定通道交互信息的大致範圍(即1D卷積的卷積核大小k)。雖然,我們可以針對各種CNN架構中具有不同通道數的卷積塊進行手動優化設置信息交互的最佳範圍。但是,通過手動進行交叉驗證調整將花費大量計算資源。而且分組卷積已成功地用於改善CNN架構,在固定group數量的情況下,高維(低維)通道與長距離(短距離)卷積成正比。同理,跨通道信息交互作用的覆蓋範圍(即一維卷積的內核大小k)與通道維數C應該也是成正比的。換句話說,在k和C之間可能存在映射φ:

最簡單的映射方式就是線性映射,但由於線性函數對於某些相關特徵的侷限性,再由於通道維數通常是2的指數倍,所以,這裏我們採用以2爲底的指數函數來表示非線性映射關係:

所以,給定通道維數C,那麼卷積核大小(k)便可根據下面公式計算得到:

ECA模塊的代碼實現

import torch
from torch import nn
from torch.nn.parameter import Parameter

class eca_layer(nn.Module):
    """Constructs a ECA module.
    Args:
        channel: Number of channels of the input feature map
        k_size: Adaptive selection of kernel size
    """

    def __init__(self, channel, k_size=3):
        super(eca_layer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(11, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # x: input features with shape [b, c, h, w]
        b, c, h, w = x.size()

        # feature descriptor on the global spatial information
        y = self.avg_pool(x)

        # Two different branches of ECA module
        y = self.conv(y.squeeze(-1).transpose(-1-2)).transpose(-1-2).unsqueeze(-1)

        # Multi-scale information fusion
        y = self.sigmoid(y)

        return x * y.expand_as(x)

實驗結果

我們分別在ImageNet和MS COCO數據集上,對我們提出的ECA模塊在圖像分類、目標檢測和實例分割方面進行了實驗評估,具體來說,我們首先評估卷積核大小對我們ECA模塊的影響,並與ImageNet上最先進的模型進行了比較。然後,我們將我們的網絡模塊分別結合Faster R-CNN、Mask R-CNN和RetinaNet驗證了在MS COCO數據集上的有效性。

表3比較了不同的注意力方法在ImageNet數據集上的網絡參數(param),浮點運算每秒(FLOPs),訓練或推理速度(幀每秒,FPS), Top-1/Top-5的準確性(%)。

下面,我們主要討論一下卷積核大小對ECA模塊的影響。在這部分實驗中,我們評估了它對ECA模塊的影響,並驗證了我們的方法在自適應選擇內核大小方面的有效性。爲此,我們採用ResNet-50和ResNet-101作爲骨幹模型,將k分別設爲3 - 9,用ECA模塊進行實驗。結果如圖4所示,從中我們可以觀察到以下情況。

首先,當k在所有卷積塊中都固定時,對於ResNet-50和ResNet-101, ECA模塊分別在k = 9和k = 5處取得最佳結果。由於ResNet-101有更多的中間層來支配ResNet-101的性能,因此它可能更喜歡較小的卷積核。此外,這些結果表明,不同深度cnn具有不同的最優k值,k值對ECA-Net性能有明顯影響。此外,ResNet-101的準確率波動(約0.5%)要大於ResNet-50的準確率波動(約0.15%),我們推測原因是更深層次的網絡比更淺層次的網絡對固定的卷積核大小更敏感。此外,由Eq.(12)自適應確定的卷積核大小通常優於固定的卷積核大小,但可以避免通過交叉驗證手動調整參數k。以上結果證明了我們的自適應選擇卷積核大小是可以取得較好且穩定的結果。最後,不同k個數的ECA模塊始終優於SE block,驗證了避免降維和局部跨通道交互對學習通道注意力是有積極作用的。

我們將ECA-Net50和ECA-Net101與其他最先進的CNN模型進行比較,包括

ResNet-200, Inception-v3, ResNeXt,DenseNet等等。這些CNN模型有更深更廣的架構,它們的結果都是複製自原始論文。如上表4所示,ECA-Net101的性能優於ResNet-200,這表明我們的ECA-Net可以用更少的計算成本提高深度CNNs的性能。同時,我們的ECA-Net101與ResNeXt-101相比具有更強的競爭力,而ResNeXt-101使用了更多的卷積濾波器和昂貴的羣卷積。此外,ECA-Net50可與DenseNet-264 (k=32)、DenseNet-161 (k=48)和 Inception-v3相媲美,但模型複雜度較低。以上結果表明,我們的ECA-Net在性能上優於最先進的CNNs,同時具有更低的模型複雜度。我們的ECA也有很大的潛力來進一步提高CNN模型的性能。

我們使用Faster R-CNN[26]、Mask R-CNN[10]和RetinaNet[22]在目標檢測任務上評估我們的ECA-Net。我們主要將ECA-Net與ResNet和SENet進行比較。所有的CNN模型都是在ImageNet上預先訓練好的,然後通過在MS COCO數據集上進行微調。具體實驗效果如下所示:

在實例分割上的效果展示:

Conclusion

本文着重研究了低模型複雜度的深度網絡的高效通道注意力問題。爲此,我們提出了一種高效的通道注意(ECA)模塊,該模塊通過快速的一維卷積生成通道注意力,其卷積核大小可由通道維數的非線性映射自適應確定。實驗結果表明,我們的ECA是一個非常輕量級的即插即用模塊,可以提高各種深度CNN架構的性能,包括廣泛使用的ResNets和輕量級的MobileNetV2。此外,我們的ECA-Net在目標檢測和實例分割任務中表現出良好的泛化能力。在未來,我們將把ECA模塊應用到更多CNN架構中(如ResNeXt和Inception),並進一步研究ECA與空間注意模塊的結合。

◎作者檔案

Murufeng,一個緊跟前沿、樂於分享最新技術乾貨的DLer!
個人公衆號:深度學習技術前沿
歡迎大家聯繫極市小編(微信ID:fengcall19)加入極市原創作者行列


關注極市平臺公衆號(ID:extrememart),獲取計算機視覺前沿資訊/技術乾貨/招聘面經等
在這裏插入圖片描述

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