Modeling Point Clouds with Self-Attention and GSS

Modeling Point Clouds with Self-Attention and Gumbel Subset Sampling小笔记(本人也是小白,好多地方也不太懂,现在是做个笔记方式防止之后忘了,有错误还请不吝指正,大家共同进步呀)

总体介绍

这篇论文大概是在PointNet++(++总结,链接: link.)的基础上提出来的,相比之下呢,它舍弃掉了pointnet++中利用卷积核来提取局部特征的方式,换成了类似自注意力机制的方式(GSA)来获得点间的关联信息(突出一些点的特征),另外它舍弃掉了pointnet++中使用最远点采样(FPS)的方式来获取代表点的方法,改为使用Gumbel Subset Sampling(GSS)来获取代表点,下面我将分别介绍GSA与GSS。

该论文与pointnet++对比:1.在提取特征部分,++使用最远点采样,以采样
得到的点为中心形成球域,并从球域中提取特征升维;而该论文选择使用ARPE模块直接将点升维,再利用GSA突出一些点的重要程度,以达到寻找特征的效果。2.在分类部分,++使用pointnet的结构将之前提取的特征融合成一个向量,再通过全连接层去提取全局特征,而该论文通过下采样(甘贝尔)的方式去提取全局最重要的特征。3.在分割部分,++使用插值上采样的操作来恢复原始点云,而该论文使用GSA的方式。

Group Shuffle Attention(GSA)

介绍

1.首先,我们知道在Attention机制当中(推荐大家链接: link.这篇文章,对Attention讲的很易懂)是对输入的词进行编码,然后将编码矩阵分别乘以三个训练出的参数,从而得到Q(query),K(key),V(value),接着用该词的Q作为一个索引去乘以上下文的K值来获得上下文对于该词的一个重要性程度。
2.对于多头注意力机制(MHA)来说,就是把多个注意力机制叠加在一起,它的每一个头就是对于该词在不同方向上的考量,去考察该词在不同方向上,上下文对于它的重要程度。
3.在上述基础上,作者也想将attention引入到点云的处理中,大概方式就是想输入一个点云集(每一个点除了带有X,Y,Z三个方向的信息还有一些其他特征f),之后要表示每一个点,并将点与点间建立起一个基本的联系,于是作者使用了一个ARPE的模块,就是将每个点表示为绝对位置与相对位置(每个点相对于临近k个点的相对位置)的结合,就是这样:
在这里插入图片描述
4.在得到具有相对位置的点集之后,我们要选择去突出一个点集中一些点,即这些点的重要程度更强,此时就需要用到attention机制来着重表示一些点的重要程度,而作者就使用了GSA。

GSA是怎么来的

1.首先我们知道注意力机制是通过这样一个式子来计算上下文重要程度的:
在这里插入图片描述
而论文作者计算点的重要程度也是使用这样一个类似的式子,即:
在这里插入图片描述
其中
在这里插入图片描述
可以看到函数S就是attention机制的变式,他舍弃掉了attention中用Q乘以K的步骤,转而使用点特征的转置矩阵来与Q相乘(为啥可以这样我还没搞清楚),最后的被除数部分与attention机制类似,我觉得应该都是为了防止函数梯度过低,使模型在进行反向传播之类的操作时无法进行下去。
2.再然后,作者的式子中最后还会乘以一个
在这里插入图片描述
我看论文的意思是,因为在自注意力机制中,由于每个点的位置信息没有被考虑到,没有明确的关于单词在原句子中位置的相对或绝对的信息,所以会引入一个position encoding,但是呢对于GSA来说,它的点集是引入了绝对位置和相对位置的,所以他就利用这样一个非线性的函数将位置信息输入进去,避免了对于位置上再使用一个感知。
3.上述只是一个单头的描述,那怎么加入多头的机制呢?作者认为attention机制中将多个注意力机制叠加在一起(MHA)的操作消耗太大,于是引入了一个通道洗牌的操作(链接: link.通道洗牌推荐文章),大概是这样:
在这里插入图片描述
他就是把一个点的特征矩阵进行一个转置,然后就相当于得到了该点在不同方向上的信息,也就代替了MHA考察不同方向上重要程度这一项。
它会先把每个点的特征分成g组,代表g个通道,再对每个通道进行洗牌。原文是这样说的:对于任何现代深度学习框架,信道洗码都可以通过端到端“重塑-转置-扁平化”的方式优雅地实现,重塑-转置-扁平化就对应了上述图中最后三个步骤。
分组的公式:
GroupAttn(X) =concat{Attnσ(Xi, Xi)|Xi= X(i)Wi}i=1,…,g.(其中Wi是一个权值)
然而分组之后又会阻止信息在组与组之间的交流,又加入了一个无参数信道算子ψ
由此就得到了这样一个公式
在这里插入图片描述最终的GSA公式为:
在这里插入图片描述
其中+x是残差连接,GN是进行一个分组规范化

在这里插入图片描述
可以看到,在将点进行GSA后,有些点的重要程度就被凸显出了,这也方便了我们之后的分类与分割
在这里插入图片描述

大概说一下GSA这张流程图,从最底下开始是输入了三个点,把这三个点向量分别分成了三组,对应蓝橙红三色,然后相同颜色的部分组合在一起,又形成一个新的向量,把这个新的向量用通道洗牌的方式打乱,然后使用注意力机制得到组与组之间的关系。

Gumbel Subset Sampling(GSS)

首先明白这就是一个采样方法。(推荐大家关于GSS的这篇文章,讲的巨好链接: link.)
作者用这个方法采样主要是因为最远点采样法(FPS)依赖于初始采样点,并且它从低维欧氏空间中采样,对异常值很敏感(最远点采样文章链接: link.)
所以在分类任务中,作者选择在每次进行GSA操作后都是用GSS来提取主要点。
大概来说说我理解的GSS是怎么被提出的,以及怎么去使用吧

怎么提出的

这毕竟是一个采点的方法嘛,最初为什么要选择在研究时对数据集进行采点,而不直接把所有的点都纳入计算呢?当然是因为数据太多了,直接进行计算负担太重,所以想到了去取一些具有代表性的点。
取点的时候呢,最开始貌似又分为直接把各类概率值的概率向量来代替取样以及直接取样两种。直接取样呢顾名思义就是直接选取概率值最大(或者说最重要)的点作为代表,而用概率向量来代替的做法我们举个例子:
例如网络输出的四维向量为v=[−20,10,9.6,6.2],通过softmax函数后有σ(v)=[0,0.591,0.396,0.013],这样做不会改变动作或者说类别的选取,同时softmax倾向于让最大值的概率显著大于其他值,这样就得到了一个概率向量,然后再从中选取,另外,softmax函数得到的就是样本的均值,对于离散分布而言就是各类的概率,这样其实也很不好,因为样本的均值很真实样本之间可能相差很大,尤其是当有点远大于或远小于其他点时(感觉有问题,不是很理解概率向量这个方法,之后理解了再改吧),但是这两种方法都有一个问题就是这样取样之后不可导,也就无法去取得梯度,更没法用bp去更新网络。(其实我感觉就是说你这样只是单纯的从很多点中取出了一个点,或者说是从一个向量中取出了它的某一个维度,但这样会导致之后进行信息回传等操作的时候,没办法把采样的维度复原成原向量,举个例子就是深度学习里面经常会使用神经网络 A 生成一个概率分布,这个分布一般是事先规定好的,神经网络只需要生成这个分布的 statistical parameter D 即可,接下来会从这个概率分布里面采样得到一个样本 S,然后再把这个样本输入到后续的神经网络 B 里面处理,并且计算得到一个可导的损失函数 L。但是由于这个采样步骤的存在,没有办法做到 end-to-end 的训练。我们可以得到 L 关于 S 的导数,也可以得到 D 关于 A 参数的导数;但是一般来说无法得到 S 关于 D 的导数。要得到 S 关于 D 的导数就需要我们使用 reparameterization trick。(这个例子来源于链接: link.))。

重参数化技巧

于是呢,人们就想到使用重参数化的技巧,这是VAE中的一种技巧,在使用随机采样的同时还保证了梯度可以回传(其实按照我的理解,我们上述两种方法不都是由于只取了一个点或者是一个向量中的一个纬度吗,这才导致了无法回传,而这个技巧呢则是把所有点或者是所有纬度全部用一个可导函数包含上,然后再用另一个随机数来取这个函数中的一部分,也就是我们需要取样的那一个维度或者说是一个点,就是把取点和计算梯度两个东西在算式中分开了。按照他的说法就是将随机性的引入和计算图的构建两个属性剥离开了)。VAE中重参数技巧有一个很重要的图:
该图也来源于我上面推荐的博客上述图片来源于我之前推荐过的博客(链接: link
图片是什么意思呢?
VAE的想法是不直接用网络去提取特征向量,而是提取这张图像的分布特征,比如说均值和标准差。假设图中的x和ϕ表示VAE中的均值和标准差向量,它们是确定性的节点。而需要输出的样本z是带有随机性的节点,在最开始的时候就是把x和ϕ全部输入进去形成Z,然后随机取一个Z作为输出,而经过重参数化技巧将随机化引入和计算剥离之后,我们将随机性用另一个输入节点ϵ代替,例如,这里用正态分布采样,原本从均值为x和标准差为ϕ的正态分布N(x,ϕ2)中采样得到z。将其转化成从标准正态分布N(0,1)中采样得到ϵ,再计算得到z=x+ϵ⋅ϕ。这样一来,采样的过程移出了计算图,整张计算图就可以计算梯度进行更新了,而新加的ϵ的输入分支不做更新,只当成一个没有权重变化的输入。(也来源于上述博客)

把这个重参数化技巧引入之后,Gumber Softmax也就产生了

GSS怎么使用的

由上可知,我们要随机取点,既要体现概率性,即不能一味只取最大的,又要让取出来的点可导,于是要利用重参数化将随机性的引入和计算图的构建分开,具体体现为:
xπ=argmax(log(πi)+Gi)
这样一个式子,其中xπ是n维向量π对应的离散随机变量,πi就是每一个维度上的值,而Gi是独立同分布的标准Gumbel分布的随机变量,又叫Gumber噪声,这样就用一个Gi引入了随机,使取出的值带有随机性,还将计算图给分开了,但是呢,上述式子里的argmax是不可导的,于是大佬们有引入了softmax加退火的操作去模拟argmax,使得整个式子变得可导起来:
在这里插入图片描述
tem是大于0的参数,他控制着softmax的温度,温度越高,生成的分布越平滑,越低,生成的分布越离散。(用于控制得到的值和样本之间的相似程度)。

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值