論文研讀之 Self-Attention

涉及論文:

  1. Graph Attention Convolution for Point Cloud Semantic Segmentation
  2. Dual Attention Network for Scene Segmentation

  在一篇標題包含“Attention”的論文中,你可能會看到以下公式:
aij,k=exp(a~ij,k)lN(i)exp(a~il,k) a_{ij,k} = \frac{\mathrm{exp}(\tilde{a}_{ij,k})}{\sum_{l \in \mathcal{N}(i)}\mathrm{exp}(\tilde{a}_{il,k})}

hi=jN(i)aijMg(hj)+bi h_{i}^{'} = \sum_{j \in \mathcal{N}(i)}a_{ij}*M_{g}(h_{j})+b_{i}

或者
sji=exp(BiCj)i=1Nexp(BiCj) s_{ji} = \frac{\mathrm{exp}(B_{i} \cdot C_{j})}{\sum_{i = 1}^{N}\mathrm{exp}(B_{i} \cdot C_{j})}

Ej=αi=1N(sjiDi)+Aj E_{j} = \alpha \sum_{i = 1}^{N}(s_{ji}D_{i}) + A_{j}

或者類似的形式,那麼恭喜你,你看到 Self-Attention 了!

  Self-Attention 的作用不是特徵提取,而是指導特徵提取。簡單地說,通過一些計算學習一種 mask,這個 mask 再作用在特徵提取上。如下圖所示,通過 mask 的作用,特徵提取模塊有側重的提取了目標類(table)的點的特徵,在理想情況下忽視非同類點(chair)的特徵。
在這裏插入圖片描述

《Graph Attention Convolution for Point Cloud Semantic Segmentation》中的 Attention

  這篇工作將 Attention 應用在 圖(Graph) 多層感知機上,完成點雲分割任務。因爲原文中的標記符號的使用與習慣不同,所以此處不使用原文中的標記符號。

  記圖 G(V,E)G(V, E)V={v1,v2,,vN}RN×3V = \{v_{1}, v_{2}, \dots, v_{N}\} \in \mathbb{R}^{N \times 3} 是圖中所有節點的集合,EE 爲邊集,NN 爲節點個數。F={f1,f2,,fN}RN×fF = \{f_{1}, f_{2}, \dots, f_{N}\} \in \mathbb{R}^{N \times f}ff 爲特徵維度。MM 爲多層感知機(MLP)。

  記某一節點 viv_{i} 的鄰域 N(i)\mathcal{N}(i)Δvij=vjvi\Delta v_{ij} = v_{j} - v_{i} 表示鄰域 N(i)\mathcal{N}(i) 中的點到中心點的某種距離,Δfij=Mg(fj)Mg(fi)\Delta f_{ij} = M_{g}(f_{j}) - M_{g}(f_{i}) 表示鄰域 N(i)\mathcal{N}(i) 中的點與中心點的特徵經過某種計算後的差值,可以簡單地理解爲 Δfij=fjfi\Delta f_{ij} = f_{j} - f_{i},這並不影響對後續工作的理解。

  我們知道在點雲數據的處理中,通常需要將點雲根據距離或者其他的規則劃分衆多鄰域。根據規則不同,可能會計算所有點的鄰域,也可能計算採樣點的鄰域,不管怎樣,都會有很多“域”。那麼點雲中的一個點可能會同時屬於不同“域”,形象地說,你有很多鄰居,那麼你就會是不同人的鄰居。對於點雲中的某一點 vkv_{k},其在 viv_{i} 的鄰域 N(i)\mathcal{N}(i) 中被記爲 vjv_{j},其在該鄰域 N(i)\mathcal{N}(i) 中,其 mask 可由如下公式計算得到:
a~ij=Mα(ΔvijΔfij) \tilde{a}_{ij} = M_{\alpha}(\Delta v_{ij} \otimes \Delta f_{ij})

  前面說了,Self-Attention 的目的是抑制非同類的點,那麼,在另外一個鄰域中,vkv_{k} 的 mask 可能就是其他值。

  考慮到不同鄰域的形狀或尺寸是不同的,對 a~\tilde{a} 做一次標準化:
aij,k=exp(a~ij,k)lN(i)exp(a~il,k) a_{ij,k} = \frac{\mathrm{exp}(\tilde{a}_{ij,k})}{\sum_{l \in \mathcal{N}(i)}\mathrm{exp}(\tilde{a}_{il,k})}
其中,kk 表示節點 viv_{i} 的第 kk 個特徵。

  最後將其作用在特徵提取的計算中:
fi=jN(i)aijMg(fj)+bi f_{i}^{'} = \sum_{j \in \mathcal{N}(i)}a_{ij}*M_{g}(f_{j})+b_{i}
那麼,取決於 viv_{i} 與鄰域的關係(是否是同一類),這一個特徵 fif_{i} 可能被抑制,也可能被增強。

  看完代碼之後,發現就是在 PointNet++ 基礎上增加了一個多層感知機,所以跟圖(Graph)有什麼關係?

《Dual Attention Network for Scene Segmentation》中的 Attention

  這篇工作中有兩個 Attention 結構,只不過是作用在不同的數據上,具有不同的具體含義,但大體結構是相同的。

在這裏插入圖片描述  如上圖所示,一個特徵圖 AA 包含 H×WH \times W個“像素”,每個“像素”有 CC 個通道,也就是 CC 個特徵。同樣的,通過某種計算,爲每一個“像素”分配一個 mask。與點雲不同,圖像是結構化的數據,所以這塊使用卷積做可學習的計算。特徵圖 AA 經過三個不同的卷積之後得到 BBCCDD,且 B,C,DRC×H×W{B,C,D} \in \mathbb{R}^{C \times H \times W}。令 N=H×WN = H \times W,那麼 BBCCDD 經過 reshape 後降維成二維矩陣 B,C,DRC×N{B^{'},C^{'},D^{'}} \in \mathbb{R}^{C \times N}。然後,S=softmax((B)TC)RN×NS = \mathrm{softmax}((B^{'})^{T} \cdot C^{'}) \in \mathbb{R}^{N \times N}SS的每一個元素就是對應位置的“像素”的 mask。

  具體而言,同樣需要經過標準化:
sji=exp(BiCj)i=1Nexp(BiCj) s_{ji} = \frac{\mathrm{exp}(B_{i} \cdot C_{j})}{\sum_{i = 1}^{N}\mathrm{exp}(B_{i} \cdot C_{j})}

最後,將 mask 作用在特徵提取上,並按照上圖所示,與原特徵圖 AA 相加:
Ej=αi=1N(sjiDi)+Aj E_{j} = \alpha \sum_{i = 1}^{N}(s_{ji}D_{i}) + A_{j}

式中,α\alpha 是一個可學習的標量。EjE_{j} 可以理解爲兩個特徵圖 i=1N(sijDi)\sum_{i = 1}^{N}(s_{ij}D_{i})AjA_{j} 的帶權相加,那麼 α\alpha 就是那個權值。當然了,關於 α\alpha 的討論不在本篇博文的範圍中。

結論

  雖然理論上是很合理的,目標也是很美好的,但是就這兩個工作,從現有的評價指標(mIoU)上來看,效果並不是那麼得卓越。與其他工作相比,高的會高出不少,但也存在低的。

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