即插即用 | 超越CBAM,全新注意力機(jī)制,GAM不計(jì)成本提高精度(附Pytorch實(shí)現(xiàn))


為了提高計(jì)算機(jī)視覺任務(wù)的性能,人們研究了各種注意力機(jī)制。然而,以往的方法忽略了保留通道和空間方面的信息以增強(qiáng)跨維度交互的重要性。因此,本文提出了一種通過減少信息彌散和放大全局交互表示來提高深度神經(jīng)網(wǎng)絡(luò)性能的全局注意力機(jī)制。
本文引入了3D-permutation 與多層感知器的通道注意力和卷積空間注意力子模塊。在CIFAR-100和ImageNet-1K上對所提出的圖像分類機(jī)制的評估表明,本文的方法穩(wěn)定地優(yōu)于最近的幾個注意力機(jī)制,包括ResNet和輕量級的MobileNet。
1簡介
卷積神經(jīng)網(wǎng)絡(luò)已廣泛應(yīng)用于計(jì)算機(jī)視覺領(lǐng)域的許多任務(wù)和應(yīng)用中。研究人員發(fā)現(xiàn),CNN在提取深度視覺表征方面表現(xiàn)良好。隨著CNN相關(guān)技術(shù)的改進(jìn),ImageNet數(shù)據(jù)集的圖像分類準(zhǔn)確率在過去9年里從63%提高到了90%。這一成就也歸功于ImageNet數(shù)據(jù)集的復(fù)雜性,這為相關(guān)研究提供了難得的機(jī)會。由于它覆蓋的真實(shí)場景的多樣性和規(guī)模,有利于傳統(tǒng)的圖像分類、表征學(xué)習(xí)、遷移學(xué)習(xí)等研究。特別是,它也給注意力機(jī)制帶來了挑戰(zhàn)。
近年來,注意力機(jī)制在多個應(yīng)用中不斷提高性能,引起了研究興趣。Wang等人使用編碼-解碼器residual attention模塊對特征圖進(jìn)行細(xì)化,以獲得更好的性能。Hu 等人分別使用空間注意力機(jī)制和通道注意力機(jī)制,獲得了更高的準(zhǔn)確率。然而,由于信息減少和維度分離,這些機(jī)制利用了有限的感受野的視覺表征。在這個過程中,它們失去了全局空間通道的相互作用。
本文的研究目標(biāo)是跨越空間通道維度研究注意力機(jī)制。提出了一種“全局”注意力機(jī)制,它保留信息以放大“全局”跨維度的交互作用。因此,將所提出的方法命名為全局注意力機(jī)制(GAM)。
2相關(guān)工作
注意力機(jī)制在圖像分類任務(wù)中的性能改進(jìn)已經(jīng)有很多研究。
SENet在抑制不重要的像素時,也帶來了效率較低的問題。
CBAM依次進(jìn)行通道和空間注意力操作,而BAM并行進(jìn)行。但它們都忽略了通道與空間的相互作用,從而丟失了跨維信息。
考慮到跨維度交互的重要性,TAM通過利用每一對三維通道、空間寬度和空間高度之間的注意力權(quán)重來提高效率。然而,注意力操作每次仍然應(yīng)用于兩個維度,而不是全部三個維度。
為了放大跨維度的交互作用,本文提出了一種能夠在所有三個維度上捕捉重要特征的注意力機(jī)制。
3GAM注意力機(jī)制
本文的目標(biāo)是設(shè)計(jì)一種注意力機(jī)制能夠在減少信息彌散的情況下也能放大全局維交互特征。作者采用序貫的通道-空間注意力機(jī)制并重新設(shè)計(jì)了CBAM子模塊。整個過程如圖1所示,并在公式1和2。給定輸入特征映射,中間狀態(tài)和輸出定義為:

其中和分別為通道注意力圖和空間注意力圖;表示按元素進(jìn)行乘法操作。

通道注意力子模塊
通道注意子模塊使用三維排列來在三個維度上保留信息。然后,它用一個兩層的MLP(多層感知器)放大跨維通道-空間依賴性。(MLP是一種編碼-解碼器結(jié)構(gòu),與BAM相同,其壓縮比為r);通道注意子模塊如圖2所示:

空間注意力子模塊
在空間注意力子模塊中,為了關(guān)注空間信息,使用兩個卷積層進(jìn)行空間信息融合。還從通道注意力子模塊中使用了與BAM相同的縮減比r。與此同時,由于最大池化操作減少了信息的使用,產(chǎn)生了消極的影響。這里刪除了池化操作以進(jìn)一步保留特性映射。因此,空間注意力模塊有時會顯著增加參數(shù)的數(shù)量。為了防止參數(shù)顯著增加,在ResNet50中采用帶Channel Shuffle的Group卷積。無Group卷積的空間注意力子模塊如圖3所示:

Pytorch實(shí)現(xiàn)GAM注意力機(jī)制
import?torch.nn?as?nn
import?torch
class?GAM_Attention(nn.Module):
????def?__init__(self,?in_channels,?out_channels,?rate=4):
????????super(GAM_Attention,?self).__init__()
????????self.channel_attention?=?nn.Sequential(
????????????nn.Linear(in_channels,?int(in_channels?/?rate)),
????????????nn.ReLU(inplace=True),
????????????nn.Linear(int(in_channels?/?rate),?in_channels)
????????)
????????self.spatial_attention?=?nn.Sequential(
????????????nn.Conv2d(in_channels,?int(in_channels?/?rate),?kernel_size=7,?padding=3),
????????????nn.BatchNorm2d(int(in_channels?/?rate)),
????????????nn.ReLU(inplace=True),
????????????nn.Conv2d(int(in_channels?/?rate),?out_channels,?kernel_size=7,?padding=3),
????????????nn.BatchNorm2d(out_channels)
????????)
????def?forward(self,?x):
????????b,?c,?h,?w?=?x.shape
????????x_permute?=?x.permute(0,?2,?3,?1).view(b,?-1,?c)
????????x_att_permute?=?self.channel_attention(x_permute).view(b,?h,?w,?c)
????????x_channel_att?=?x_att_permute.permute(0,?3,?1,?2)
????????x?=?x?*?x_channel_att
????????x_spatial_att?=?self.spatial_attention(x).sigmoid()
????????out?=?x?*?x_spatial_att
????????return?out
if?__name__?==?'__main__':
????x?=?torch.randn(1,?64,?32,?48)
????b,?c,?h,?w?=?x.shape
????net?=?GAM_Attention(in_channels=c,?out_channels=c)
????y?=?net(x)
4實(shí)驗(yàn)
4.1 CIFAR-100

4.2 ImageNet-1K

4.3 消融實(shí)驗(yàn)


5參考
[1].Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions
6推薦閱讀

冠軍方案解讀 | nnUNet改進(jìn)提升筆記

全新范式 | Box-Attention同時讓2D、3D目標(biāo)檢測、實(shí)例分割輕松漲點(diǎn)(求新必看)

Swin-Transformer又又又下一城 | 看SwinTrack目標(biāo)跟蹤領(lǐng)域獨(dú)領(lǐng)風(fēng)騷
長按掃描下方二維碼添加小助手。
可以一起討論遇到的問題
聲明:轉(zhuǎn)載請說明出處
掃描下方二維碼關(guān)注【集智書童】公眾號,獲取更多實(shí)踐項(xiàng)目源碼和論文解讀,非常期待你我的相遇,讓我們以夢為馬,砥礪前行!

