涉及論文:
- Graph Attention Convolution for Point Cloud Semantic Segmentation
- Dual Attention Network for Scene Segmentation
在一篇標題包含“Attention”的論文中,你可能會看到以下公式:
aij,k=∑l∈N(i)exp(a~il,k)exp(a~ij,k)
hi′=j∈N(i)∑aij∗Mg(hj)+bi
或者
sji=∑i=1Nexp(Bi⋅Cj)exp(Bi⋅Cj)
Ej=αi=1∑N(sjiDi)+Aj
或者類似的形式,那麼恭喜你,你看到 Self-Attention 了!
Self-Attention 的作用不是特徵提取,而是指導特徵提取。簡單地說,通過一些計算學習一種 mask,這個 mask 再作用在特徵提取上。如下圖所示,通過 mask 的作用,特徵提取模塊有側重的提取了目標類(table)的點的特徵,在理想情況下忽視非同類點(chair)的特徵。
![在這裏插入圖片描述]()
《Graph Attention Convolution for Point Cloud Semantic Segmentation》中的 Attention
這篇工作將 Attention 應用在 圖(Graph) 多層感知機上,完成點雲分割任務。因爲原文中的標記符號的使用與習慣不同,所以此處不使用原文中的標記符號。
記圖 G(V,E),V={v1,v2,…,vN}∈RN×3 是圖中所有節點的集合,E 爲邊集,N 爲節點個數。F={f1,f2,…,fN}∈RN×f,f 爲特徵維度。M 爲多層感知機(MLP)。
記某一節點 vi 的鄰域 N(i),Δvij=vj−vi 表示鄰域 N(i) 中的點到中心點的某種距離,Δfij=Mg(fj)−Mg(fi) 表示鄰域 N(i) 中的點與中心點的特徵經過某種計算後的差值,可以簡單地理解爲 Δfij=fj−fi,這並不影響對後續工作的理解。
我們知道在點雲數據的處理中,通常需要將點雲根據距離或者其他的規則劃分衆多鄰域。根據規則不同,可能會計算所有點的鄰域,也可能計算採樣點的鄰域,不管怎樣,都會有很多“域”。那麼點雲中的一個點可能會同時屬於不同“域”,形象地說,你有很多鄰居,那麼你就會是不同人的鄰居。對於點雲中的某一點 vk,其在 vi 的鄰域 N(i) 中被記爲 vj,其在該鄰域 N(i) 中,其 mask 可由如下公式計算得到:
a~ij=Mα(Δvij⊗Δfij)
前面說了,Self-Attention 的目的是抑制非同類的點,那麼,在另外一個鄰域中,vk 的 mask 可能就是其他值。
考慮到不同鄰域的形狀或尺寸是不同的,對 a~ 做一次標準化:
aij,k=∑l∈N(i)exp(a~il,k)exp(a~ij,k)
其中,k 表示節點 vi 的第 k 個特徵。
最後將其作用在特徵提取的計算中:
fi′=j∈N(i)∑aij∗Mg(fj)+bi
那麼,取決於 vi 與鄰域的關係(是否是同一類),這一個特徵 fi 可能被抑制,也可能被增強。
看完代碼之後,發現就是在 PointNet++ 基礎上增加了一個多層感知機,所以跟圖(Graph)有什麼關係?
《Dual Attention Network for Scene Segmentation》中的 Attention
這篇工作中有兩個 Attention 結構,只不過是作用在不同的數據上,具有不同的具體含義,但大體結構是相同的。
如上圖所示,一個特徵圖 A 包含 H×W個“像素”,每個“像素”有 C 個通道,也就是 C 個特徵。同樣的,通過某種計算,爲每一個“像素”分配一個 mask。與點雲不同,圖像是結構化的數據,所以這塊使用卷積做可學習的計算。特徵圖 A 經過三個不同的卷積之後得到 B、C、D,且 B,C,D∈RC×H×W。令 N=H×W,那麼 B、C、D 經過 reshape 後降維成二維矩陣 B′,C′,D′∈RC×N。然後,S=softmax((B′)T⋅C′)∈RN×N ,S的每一個元素就是對應位置的“像素”的 mask。
具體而言,同樣需要經過標準化:
sji=∑i=1Nexp(Bi⋅Cj)exp(Bi⋅Cj)
最後,將 mask 作用在特徵提取上,並按照上圖所示,與原特徵圖 A 相加:
Ej=αi=1∑N(sjiDi)+Aj
式中,α 是一個可學習的標量。Ej 可以理解爲兩個特徵圖 ∑i=1N(sijDi) 和 Aj 的帶權相加,那麼 α 就是那個權值。當然了,關於 α 的討論不在本篇博文的範圍中。
結論
雖然理論上是很合理的,目標也是很美好的,但是就這兩個工作,從現有的評價指標(mIoU)上來看,效果並不是那麼得卓越。與其他工作相比,高的會高出不少,但也存在低的。