1. 程式人生 > 其它 >【ARXIV2105】Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks

【ARXIV2105】Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks

論文:https://arxiv.org/abs/2105.02358

程式碼:https://github.com/MenghaoGuo/EANet

B站視訊:https://www.bilibili.com/video/BV1ug411M7kL

大部分內容來自論文作者 國孟昊 的B站視訊,講解的非常細緻,強烈推薦

典型的 self-attention 計算方法如下圖所示。 \(Q\)\(K\) 相乘,使用 softmax 歸一化,然一和\(V\)相乘,然後得到輸出的特徵,這個大家應該都相當熟悉了。

在實際應用中,因為要計算query 和 key 之間的相似度,因此複雜度會比較高。因此,研究人員提出了一系列改進方法。

第一類是子空間方法。

如下圖所示,研究人員發現,當 query 落在車上時, 得到的結果中車的響應比較強(第1行);當query落在人上時,行人的響應比較強(第2行);落在道路上時,道路上的響應就比較強(第3行)。因此,可以把畫素點聚為一些代表性的點,在代表性的點上計算相似性。典型的方法是 EMANet (ICCV 2019),OCRNet(ECCV2020)。 還有一類方法是進行矩陣分解來降低計算複雜度, 典型的方法是 Performer。

在這個工作中,作者提出使用兩個記憶模組計算 attention,具體為建立一個共享空間\(M\),把輸入特徵\(F\) 對映到 \(M\),再恢復,如下圖所示:

實現時是通過兩個線性層來替代的,具體如下:

\[A=\textrm{Norm}(FM^T_k), ~~~ F_{out}=AM_v \]

演算法的虛擬碼如下圖所示。其實中的關注一步就是雙歸一化,先使用 Softmax 歸一化,然後再使用 l1_norm 歸一化。作者也說,這個雙歸一化是相當關鍵的,相對於只使用 Softmax 歸一化,能夠顯著提升效能。

在PASCAL VOC 資料集上的語義分割結果如下表所示,可以看出,使用雙歸一化可以顯著提升效能。 作者也表示,external attention 非常依賴這種雙歸一化方式,但作者也指出,歸一化的方法和安排次序,仍然是相當值得關注的問題。

通過檢視作者的原始碼,可以看出,兩個歸一化所處理的維度不一樣,softmax 是作用在 n 上,l1_norm是作用在 k 上。其實我不是特別清楚這麼設計的原因,如果有網友比較清楚可以隨時交流。

x = x.view(b, c, h*w)   # b, c, n 
attn = self.linear0(x) # b, k, n
attn = F.softmax(attn, dim=-1) # b, k, n
attn = attn / (1e-9 + attn.sum(dim=1, keepdim=True)) # b, k, n
x = self.linear1(attn) # b, c, n
x = x.view(b, c, h, w)