论文研读之 Self-Attention

本文深入探讨了Self-Attention机制在深度学习中的应用,特别是在《Graph Attention Convolution for Point Cloud Semantic Segmentation》和《Dual Attention Network for Scene Segmentation》两篇论文中的实现。Self-Attention不仅用于特征提取,还指导特征提取,通过学习的mask对特征进行加权。在点云处理中,Attention机制帮助区分同类和非同类点;而在图像场景分割中,通过卷积计算为每个像素分配mask。尽管在某些评价指标上效果不一,但Self-Attention为深度学习带来了新的视角。

涉及论文:

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

  在一篇标题包含“Attention”的论文中,你可能会看到以下公式:
a i j , k = e x p ( a ~ i j , k ) ∑ l ∈ N ( i ) e x p ( a ~ i l , k ) a_{ij,k} = \frac{\mathrm{exp}(\tilde{a}_{ij,k})}{\sum_{l \in \mathcal{N}(i)}\mathrm{exp}(\tilde{a}_{il,k})} aij,k=lN(i)exp(a~il,k)exp(a~ij,k)

h i ′ = ∑ j ∈ N ( i ) a i j ∗ M g ( h j ) + b i h_{i}^{'} = \sum_{j \in \mathcal{N}(i)}a_{ij}*M_{g}(h_{j})+b_{i} hi=jN(i)aijMg(hj)+bi

或者
s j i = e x p ( B i ⋅ C j ) ∑ i = 1 N e x p ( B i ⋅ C j ) s_{ji} = \frac{\mathrm{exp}(B_{i} \cdot C_{j})}{\sum_{i = 1}^{N}\mathrm{exp}(B_{i} \cdot C_{j})} sji=i=1Nexp(BiCj)exp(BiCj)

E j = α ∑ i = 1 N ( s j i D i ) + A j E_{j} = \alpha \sum_{i = 1}^{N}(s_{ji}D_{i}) + A_{j} Ej=αi=1N(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 ) G(V, E) G(V,E) V = { v 1 , v 2 , … , v N } ∈ R N × 3 V = \{v_{1}, v_{2}, \dots, v_{N}\} \in \mathbb{R}^{N \times 3} V={v1,v2,,vN}RN×3 是图中所有节点的集合, E E E 为边集, N N N 为节点个数。 F = { f 1 , f 2 , … , f N } ∈ R N × f F = \{f_{1}, f_{2}, \dots, f_{N}\} \in \mathbb{R}^{N \times f} F={f1,f2,,fN}RN×f f f f 为特征维度。 M M M 为多层感知机(MLP)。

  记某一节点 v i v_{i} vi 的邻域 N ( i ) \mathcal{N}(i) N(i) Δ v i j = v j − v i \Delta v_{ij} = v_{j} - v_{i} Δvij=vjvi 表示邻域 N ( i ) \mathcal{N}(i) N(i) 中的点到中心点的某种距离, Δ f i j = M g ( f j ) − M g ( f i ) \Delta f_{ij} = M_{g}(f_{j}) - M_{g}(f_{i}) Δfij=Mg(fj)Mg(fi) 表示邻域 N ( i ) \mathcal{N}(i) N(i) 中的点与中心点的特征经过某种计算后的差值,可以简单地理解为 Δ f i j = f j − f i \Delta f_{ij} = f_{j} - f_{i} Δfij=fjfi,这并不影响对后续工作的理解。

  我们知道在点云数据的处理中,通常需要将点云根据距离或者其他的规则划分众多邻域。根据规则不同,可能会计算所有点的邻域,也可能计算采样点的邻域,不管怎样,都会有很多“域”。那么点云中的一个点可能会同时属于不同“域”,形象地说,你有很多邻居,那么你就会是不同人的邻居。对于点云中的某一点 v k v_{k} vk,其在 v i v_{i} vi 的邻域 N ( i ) \mathcal{N}(i) N(i) 中被记为 v j v_{j} vj,其在该邻域 N ( i ) \mathcal{N}(i) N(i) 中,其 mask 可由如下公式计算得到:
a ~ i j = M α ( Δ v i j ⊗ Δ f i j ) \tilde{a}_{ij} = M_{\alpha}(\Delta v_{ij} \otimes \Delta f_{ij}) a~ij=Mα(ΔvijΔfij)

  前面说了,Self-Attention 的目的是抑制非同类的点,那么,在另外一个邻域中, v k v_{k} vk 的 mask 可能就是其他值。

  考虑到不同邻域的形状或尺寸是不同的,对 a ~ \tilde{a} a~ 做一次标准化:
a i j , k = e x p ( a ~ i j , k ) ∑ l ∈ N ( i ) e x p ( a ~ i l , k ) a_{ij,k} = \frac{\mathrm{exp}(\tilde{a}_{ij,k})}{\sum_{l \in \mathcal{N}(i)}\mathrm{exp}(\tilde{a}_{il,k})} aij,k=lN(i)exp(a~il,k)exp(a~ij,k)
其中, k k k 表示节点 v i v_{i} vi 的第 k k k 个特征。

  最后将其作用在特征提取的计算中:
f i ′ = ∑ j ∈ N ( i ) a i j ∗ M g ( f j ) + b i f_{i}^{'} = \sum_{j \in \mathcal{N}(i)}a_{ij}*M_{g}(f_{j})+b_{i} fi=jN(i)aijMg(fj)+bi
那么,取决于 v i v_{i} vi 与邻域的关系(是否是同一类),这一个特征 f i f_{i} fi 可能被抑制,也可能被增强。

  看完代码之后,发现就是在 PointNet++ 基础上增加了一个多层感知机,所以跟图(Graph)有什么关系?

《Dual Attention Network for Scene Segmentation》中的 Attention

  这篇工作中有两个 Attention 结构,只不过是作用在不同的数据上,具有不同的具体含义,但大体结构是相同的。

在这里插入图片描述  如上图所示,一个特征图 A A A 包含 H × W H \times W H×W个“像素”,每个“像素”有 C C C 个通道,也就是 C C C 个特征。同样的,通过某种计算,为每一个“像素”分配一个 mask。与点云不同,图像是结构化的数据,所以这块使用卷积做可学习的计算。特征图 A A A 经过三个不同的卷积之后得到 B B B C C C D D D,且 B , C , D ∈ R C × H × W {B,C,D} \in \mathbb{R}^{C \times H \times W} B,C,DRC×H×W。令 N = H × W N = H \times W N=H×W,那么 B B B C C C D D D 经过 reshape 后降维成二维矩阵 B ′ , C ′ , D ′ ∈ R C × N {B^{'},C^{'},D^{'}} \in \mathbb{R}^{C \times N} B,C,DRC×N。然后, S = s o f t m a x ( ( B ′ ) T ⋅ C ′ ) ∈ R N × N S = \mathrm{softmax}((B^{'})^{T} \cdot C^{'}) \in \mathbb{R}^{N \times N} S=softmax((B)TC)RN×N S S S的每一个元素就是对应位置的“像素”的 mask。

  具体而言,同样需要经过标准化:
s j i = e x p ( B i ⋅ C j ) ∑ i = 1 N e x p ( B i ⋅ C j ) s_{ji} = \frac{\mathrm{exp}(B_{i} \cdot C_{j})}{\sum_{i = 1}^{N}\mathrm{exp}(B_{i} \cdot C_{j})} sji=i=1Nexp(BiCj)exp(BiCj)

最后,将 mask 作用在特征提取上,并按照上图所示,与原特征图 A A A 相加:
E j = α ∑ i = 1 N ( s j i D i ) + A j E_{j} = \alpha \sum_{i = 1}^{N}(s_{ji}D_{i}) + A_{j} Ej=αi=1N(sjiDi)+Aj

式中, α \alpha α 是一个可学习的标量。 E j E_{j} Ej 可以理解为两个特征图 ∑ i = 1 N ( s i j D i ) \sum_{i = 1}^{N}(s_{ij}D_{i}) i=1N(sijDi) A j A_{j} Aj 的带权相加,那么 α \alpha α 就是那个权值。当然了,关于 α \alpha α 的讨论不在本篇博文的范围中。

结论

  虽然理论上是很合理的,目标也是很美好的,但是就这两个工作,从现有的评价指标(mIoU)上来看,效果并不是那么得卓越。与其他工作相比,高的会高出不少,但也存在低的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值