BAM: Bottleneck Attention Module
作者提出了一個簡單但是有效的Attention 模型—BAM,它可以結合到任何前向傳播卷積神經網絡中,通過兩個分離的路徑 channel和spatial, 得到一個Attention Map.
整體結構圖如下:
作者將BAM塊放在了Resnet網絡中每個stage之間。
主要思想
Channel attention
從下圖可以看出,作者獲取channel attention的方式是使用一個全局平均池化聚合不同通道的feature map,生成一個\(1×1×C\)的vector,經過一個沙漏模型后跨信道注意力。在MLP之后,添加了一個批處理歸一化(BN)層來調整空間分支輸出的尺度。計算公式如下:
Spatial attention
具體地,使用1×1卷積在整個通道維度上對特征圖進行結合和壓縮。 為簡單起見,使用與通道分支相同的縮減比r。 在減少之后,應用兩個3×3擴張卷積以有效地利用上下文信息。 最后,使用1×1卷積將特征再次簡化為空間注意力圖。 對於縮放調整,在空間分支的末尾應用批量標准化層。 簡而言之,空間注意力計算如下:
Combine two attention
由於兩種注意力圖有不同的尺寸,將注意力圖擴展到\(\mathbb{R}^{C \times H \times W}\)並結合。為了有效的梯度傳播,選擇了逐元素求和。
Dual Attention Network for Scene Segmentation
作者提出了一種雙重注意網絡(DANet)來自適應地集成局部特征及其全局依賴性。
位置力關注模塊通過所有位置處的特征的加權和來選擇性地聚合每個位置處的特征。無論距離如何,相似的特征都將彼此相關。同時,通道注意力模塊通過整合所有通道映射中的相關特征來選擇性地強調相互依賴的信道映射。
將兩個注意模塊的輸出相加以進一步改進特征表示,這有助於更精確的分割結果。
網絡結構:
采用移除down-sampling的dilated ResNet(與DeepLab相同)的預訓練網絡基礎網絡為,最后得到的feature map大小為輸入圖像的1/8。之后是兩個並行的attention module分別捕獲spatial和channel的依賴性,最后整合兩個attention module的輸出得到更好的特征表達。
在傳統的擴張FCN之上附加兩種類型的注意力模塊,分別對空間和通道維度中的語義相互依賴性進行建模。
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
文章作者認為SEnet在實行過程中進行了通道降維,這種操作對於channel attention去獲得一個很好的性能是有很大的影響的。因此作者嘗試提出了一種在senet的過程中不涉及到通道降維來獲得一對一權重對應的穩定效果,為了平衡性能和復雜度,本文設計了一種超輕量級的注意力模塊-ECA Module(Efficient Channel Attention)來提升大型CNN的性能。。
文中將SE模塊與三種變體比較,表明避免維度降低有助於學習有效的通道注意。
作者使用的權重矩陣:
Improving Convolutional Networks with Self-calibrated Convolutions
本文提出了一種自校正卷積(多個卷積注意力組合的模塊),替換基本的卷積結構,在不增加額外參數和計算量的情況下,該卷積可以通過特征的內在通信達到擴增卷積感受野的目的,進而增強輸出特征的多樣性。相比於標准卷積,該卷積通過自校正操作自適應地在每個空間位置周圍建立了遠程空間和通道間依存關系,從而使得產生的特征圖更具有區分度。
主要貢獻
1、使每個空間位置都能自適應地編碼遠距離區域的信息上下文,從而打破了在小區域(例如3x3)內進行卷積的傳統。 這使自校正卷積產生的特征表示更具辨識性。
2、 提出的自校正卷積是通用的,可以輕松應用於標准卷積層,而無需引入任何參數和復雜性開銷或更改超參數。
如圖, SC模塊的流程也比較簡單,首先輸入 X 沿通道方向進行分割得到 \(X_{1}\) 和 \(X_{2}\) , 然后 \(\mathcal{F}_{1}-\mathcal{F}_{4}\) 分別表示四個卷積操作 \(\left(K_{1}-K_{4}\right\). 為其對應的卷積核, 大小均為 \(3\times3\) )。文中 所提到的 Self-Calibrated 主要是上半分支,表示為:
其中, \(F_{up}\)和 \(F_{\text {down}}\) 分別表示 r=4 的上采樣操作和下采樣操作。 \(\sigma\) 為sigmoid函數。
總的來說,文中的self-Calibrated Convolutions就是一個多尺度特征提取模塊。作者通過特征圖下采樣來增大CNN的感受野,每個空間位置都可以通過自校准操作融合來自兩個不同空間尺度空間的信息。而且從圖中可以看出,Self-Calibrated Convolutions沒有引入額外的可學習參數,但是其計算量還是會增大。
An Efficient Pyramid Split Attention Block on Convolutional Neural Network
Pyramid Split Attention Block用於增強特征提取
即插即用,可將Pyramid Split Attention Block取代ResNet的3×3卷積,提出基准網絡ESPANet
PSA模塊整體結構圖
Pyramid Split Attention (PSA)在SENet的基礎上提出多尺度特征圖提取策略,整體結構圖如下所示。具體可分為如下四個步驟:
Split and Concat (SPC)模塊用於獲得空間級多尺度特征圖;
SEWeight(SENet中的模塊)被用於獲得空間級視覺注意力向量來抽取多尺度響應圖的目標特征;
使用Softmax函數用於再分配特征圖權重向量;
元素相乘操作用於權重向量與原始特征圖來獲得最終結果響應圖。
Split and Concat module
Split and Concat module
如上圖所示,k0、k1、k2和k3是不同卷積核參數(以ESPANet-small為例,論文取3,5,7和9),G0、G1、G2和G3是分組卷積的參數(以ESPANet-small為例,論文默認取1,4,8和16)。整體可看做是模型采用不同卷積核提取多尺度目標特征,並采取Concat操作結合不同感受野下的多尺度特征。
ESPANet
ESPANet中的block如下所示,相比於ResNet,其就是使用PSA模塊取代3x3的卷積,ESPANet block整體結構如下圖所示。
ResT: An Efficient Transformer for Visual Recognition
本文提出了一種高效的多尺度視覺transformer,稱為ResT,它可以作為圖像識別的通用主干。與已有的采用標准transformer塊處理固定分辨率原始圖像的transformer方法不同,本文的方法具有以下優點:(1)構造了一種內存高效的多頭自關注算法,它通過簡單的深度卷積壓縮內存,在保持多頭多樣性的同時,將交互作用投射到注意頭維度上;(2)位置編碼被構造為空間注意力,更靈活,可以處理任意大小的輸入圖像,而不需要插值或微調;(3)不再在每個階段開始時直接進行標記化,而是將patch embedding設計為在標記圖上帶有stride的重疊卷積操作堆棧。
與CNN主干不同的是,Transformer首先將圖像分割成一系列的patches(即標記),然后用位置編碼對這些標記求和來表示粗略的空間信息,最后采用Transformer塊的堆棧來捕獲特征信息。標准transformer塊包括多頭自關注(MSA)和前饋網絡(FFN),多頭自關注(MSA)采用query-key-value分解來對序列令牌之間的全局關系進行建模,前饋網絡(FFN)用於學習更廣泛的表示(如圖1b所示)。因此,transformer模塊可以根據圖像內容動態調整接受場。
盡管transformer骨干網顯示出了比CNN更大的潛力,但它仍然有四個主要缺點:(1)現有的transformer骨干網直接對原始輸入圖像中的patches進行標記化,很難提取構成圖像中一些基本結構(如角點和邊緣)的低層特征。(2)transformer塊中MSA的存儲和計算與空間維度或通道維度成二次曲線關系,導致訓練和推理的開銷很大。(3)MSA中的每個頭部只負責輸入令牌的一個子集,這可能會影響網絡的性能,特別是當每個子集的通道維數太低時,使得query和key的點積無法構成信息函數。(4)現有的transformer骨干網中的輸入標記和位置編碼都是固定比例的,不適合需要密集預測的視覺任務。
如圖2所示,ResT共享與ResNet完全相同的管道,即用於提取低級信息和加強局部性的stem模塊,然后是構建分層特征圖的四個階段,最后是用於分類的head模塊。每個stage由patch embedding、位置編碼模塊和具有特定空間分辨率和通道尺寸的多個transformer塊組成。patch embedding模塊通過分層擴展通道容量,同時通過重疊卷積運算降低空間分辨率來創建多尺度特征金字塔。與傳統方法只能處理固定尺度的圖像不同,我們的位置編碼模塊被構造為以輸入令牌的局部鄰域為條件的空間注意力。通過這樣做,該方法更加靈活,可以處理任意大小的輸入圖像,而不需要插值或微調。此外,為了提高MSA的效率,我們構建了一種高效的多頭自注意(EMSA),它通過簡單的深度卷積操作來壓縮內存。此外,我們在保持多頭的多樣性能力的同時,通過在注意頭維度上投射交互來彌補每個頭的輸入標記的短長度限制。
多頭自注意模塊
(1)與MSA類似,EMSA首先采用一組投影來獲得查query Q。
(2)為了壓縮存儲器,2D輸入token x∈Rn×dm沿空間維度重塑為3D的輸入token(即,ˆx∈Rdm×h×w),然后饋送到深度卷積運算以將高度和寬度維度減少因數s。為簡單起見,s是由EMSA頭的數量k自適應設置的,即,s=8/k。kernel size、stride和padding分別為s+1、s和s/2。
(3)空間減少后的新token映射ˆx∈Rdm×h/s×w/s被重塑為二維映射,即ˆx∈Rn’×dm,n’=h/s×w/s,然后將ˆx送入兩組投影,得到key K和value V。
(4)之后,我們采用公式4計算query Q、key K和value V上的注意力函數。
這里,Conv(·)是一個標准的1×1卷積運算,它模擬了不同頭部之間的相互作用。因此,每個頭部的注意力功能可以依賴於所有的key和query。然而,這將削弱MSA在不同位置聯合處理來自不同表示子集的信息的能力。為了恢復這種多樣性能力,我們為點積矩陣(在Softmax之后)添加了實例歸一化(即,IN(·))。
(5)最后,將每個頭部的輸出值進行拼接和線性投影,形成最終輸出。
EMSA的計算量為O(2dmn2/s2+2d2mn(1+1/s2)+dmn(s+1)2/s2+k2n2/s2),大大低於原MSA(假設s>1),特別是在較低階段,n趨於較高。
此外,我們在EMSA之后加入了FFN,以進行特征變換和非線性處理。每個高效transformer塊的輸出為:
Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks.
self-attention自身存在兩個缺點:(1)計算量太大,計算復雜度與pixel的平方相關;(2)沒有考慮不同樣本之間的潛在關聯,只是單獨處理每一個樣本,在單個樣本內去捕獲這類long-range dependency。
針對這兩個問題,作者提出了一個external attention模塊,僅僅通過兩個可學習的external unit,就可以簡化self-attention的時間復雜度,簡化到與pixel數量線性相關;同時由於兩個unit是external的,對於整個數據集來說都是shared,所以還可以隱式地考慮到不同樣本之間的關聯。兩個unit在實現的時候是兩個linear layer,因此可以直接end2end優化。
Module
上圖中(a)和(b)分別表示經典的self-attention和簡化版self-attention,計算復雜度均為\(O(dN^{2})\),N表示特征圖pixel數,d表示feature維度。經作者觀察發現,這兩種方法都是建立一個N-to-N的attention關聯,即attention map的生成。而attention map自身是稀疏的,也就是說只有很少量的pixel之間有關聯,所以N-to-N的attention map可能會顯得redundant。
所以只需要用到需要的value即可,大可不必計算整張N-to-N的attention map。圖(c)表示作者提出的external-attention module,他負責計算輸入feature和external memory unit之間的attention:
M作為external unit,其維度是\(S ∗ d\),S是超參數。M這里作為一個獨立於input的可學習的參數,算是對整個數據集來說的一個memory。A是根據先驗推斷出的attention map,在feature map和M線性變換后要經過一個不太一樣的Norm。
在實際中,作者利用了兩個這樣的memory unit\(M_{k}\)和\(M_{v}\)作為key和value,來增加網絡的capacity。因此整個external attention的計算式如下:
所以external attention的計算復雜度降為\(O(dSN)\),由於S是超參數,所以可以設置的遠小於pixel數目N。經實驗發現,S為64的時候效果就非常好了。所以此時external attention的計算復雜度與N線性相關,相比於經典的自注意力機制來說更加有效。