《论文阅读》PCT: Point Cloud Transformer

留个笔记自用

PCT: Point Cloud Transformer

做什么

点云的概念:点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,在获取物体表面每个采样点的空间坐标后,得到的是点的集合,称之为“点云”(Point Cloud)。
点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等,不一一列举。《论文阅读》PCT: Point Cloud Transformer_第1张图片
一般的3D点云都是使用深度传感器扫描得到的,可以简单理解为相比2维点,点云是3D的采样
《论文阅读》PCT: Point Cloud Transformer_第2张图片

做了什么

跟另外一篇Point transformer的说法非常相似,将transformer这个在NLP和Image领域大火的结构引入了点云处理
《论文阅读》PCT: Point Cloud Transformer_第3张图片
最左边三列分别是不同点云下查询点和周围邻域点的attention关系,简单来说就是查询某个点,利用transformer给出它对它周围点的关注度,最右列则是分割的结果
Point transformer

怎么做

《论文阅读》PCT: Point Cloud Transformer_第4张图片
这就是PCT的整体结构,目的是将输入点云编码到一个新的高维特征空间,该空间可以表征点之间的语义相似度,整体氛围了两个部分,第一部分是encoder编码器部分,第二部分是application应用部分
首先是第一部分
《论文阅读》PCT: Point Cloud Transformer_第5张图片
具体来说,整体结构输入是点云P∈RN×d(N个点d维特征),经过第一层Input embedding层,也就是这里的灰色层
《论文阅读》PCT: Point Cloud Transformer_第6张图片
这里的目的就是将原输入空间也就是d维编码到更高层的特征空间Fe∈RN×de,然后经过四层构建的attention模块得到不同尺度下的attention并且将它们concat起来
《论文阅读》PCT: Point Cloud Transformer_第7张图片
《论文阅读》PCT: Point Cloud Transformer_第8张图片
这里的ATi就是表示第i个attention模块,这里的Wo是线性层的权重,也就是cancat起来后再进行一次线性整合
然后就是要通过这里的Fo整合出整个输入点云P的全局特征,这里采用的是MA-pool其实也就是max-pool和avg-pool分别使用后concat起来的结合体
《论文阅读》PCT: Point Cloud Transformer_第9张图片
然后是第二部分
《论文阅读》PCT: Point Cloud Transformer_第10张图片
这里的输入就是前面encoder层得到的全局特征Fg,然后展示了三个应用,分别是classification也就是分类,segmentation也就是分割,normal estimation也就是正则估计
简单了解一下实现的方式,首先是分类
《论文阅读》PCT: Point Cloud Transformer_第11张图片

任务就是将点云中的每个点分到Nc个对象类别,这里将全局特征Fg搭建了一个简单分类网络,由LBR(linear层、Batchnorm层、relu层)组成,最后得到各类得分C
然后是分割
《论文阅读》PCT: Point Cloud Transformer_第12张图片
任务就是将点云中的每个点分组(组标签),首先将Fg和Fo也就是前面未使用MA-pool的逐点特征concat起来,简单理解就是这里结合了全局特征和局部特征,然后将这个concat起来的输入经过一个简单的分割网络,这里的分割网络和前面分类网络几乎相同,但区别是在一个LBR层后面接上了一个droupout(所以它更绿了)
最后是Normal estimation,这里的做法就跟分割一样就不过多赘述了
所以,最后看完整个结构,重要的部分就是encoder部分,也就是文章的核心,如何实现的transformer(图上黄色的attention模块和灰色模块)
在这里插入图片描述
在这里插入图片描述

首先,考虑一下常规的transformer设计方法,将点云集类比成nlp领域中的一个句子,每个点都是句子里的一个单词,于是就可以开始设计了
首先先是词嵌入的类比点嵌入,使用一个共享的神经网络将点云嵌入到一个降维空间中,也就是对每个点的特征进行语义编码,这里采用的结构是两层级联LBR(跟前面相同,linear、batchnorm、relu),这样我们就得到了每个点的语义特征∈N×d,这就是灰色模块,input embedding的具体结构
然后是attention
《论文阅读》PCT: Point Cloud Transformer_第13张图片
就像nlp中的QKV(查询向量、键向量、值向量,见Point transformer)一样
《论文阅读》PCT: Point Cloud Transformer_第14张图片
这里的Fin就是点云集P进行点嵌入后得到的逐点语义特征,三个W分别是三种模拟类型的权值矩阵,用来得到QKV的,都是属于线性变换,设计方法跟nlp里的一样
在这里插入图片描述
《论文阅读》PCT: Point Cloud Transformer_第15张图片
在这里插入图片描述
首先先是使用Q和K进行点积,这里的意思就是将查询向量(这里可以理解成为位置)和键向量(这里可以理解成为词对位置的重视程度)结合,得到的结果就是该单词有多重视句子中的位置,比如对于第一个单词来说,它对第一个位置的重视程度就是q1×kq,对第二个位置的就是q1×k2,然后使用softmax来表示每个单词对编码当前单词这个位置的贡献
简单来说,这里就是通过位置和语义信息得到了每个点与它邻域中所有点的attention信息
最后
在这里插入图片描述
就是将输入和attention结果的聚合相加在一起
在此基础上,加上了一个偏移注意力模块代替了前面的自我注意力模块
在这里插入图片描述
这里的偏移Fin-Fsa
《论文阅读》PCT: Point Cloud Transformer_第16张图片
这里的I是单位矩阵,A矩阵就是前面定义的关系矩阵,也就是第i个点和第j个点的attention,作了一个简单的重新定义
《论文阅读》PCT: Point Cloud Transformer_第17张图片
相比于前面,这里是在第一维上使用softmax算子,在第二维上使用l1范数来归一化
除此设计了transformer之外,还设计了一种embbedding的方式,前面的嵌入是对逐点特征进行简单嵌入,这里为了更好的使用transformer引入了局部特征信息,即邻居嵌入
《论文阅读》PCT: Point Cloud Transformer_第18张图片
具体地说,输入是点云集P(包含N个点和F维特征),输出一个新的点云集Ps(包含Ns个点和Fs维特征,两者均是sample或聚合的结果)
首先先对点云集P使用一次FPS采样,将点数量从N降至Ns,然后对Ps里的每个点,追溯回原点云集P找到这些点,对每个点使用knn找到它各自的邻域
《论文阅读》PCT: Point Cloud Transformer_第19张图片
这里的F(p)就是点p的输入特征,Fs(p)是点p的输出特征,RP(F,k)是重复F向量k次的一种操作,简单来说这里就是,第一步先将每个点的邻域和当前点进行差值操作也就是取相异后concat起来,将这个结果和原点特征复制多个后concat起来,然后对这个对比矩阵进行LBR等操作,这里的MP是max-pooling

总结

1.这里跟point-transformer一样也是设计了一种transformer的结构,但特殊的一点是这里引入了图卷积的技术,并且在嵌入上也做了些许操作让它更适合嵌入

你可能感兴趣的:(深度学习,计算机视觉,人工智能)