PCT: Point cloud transformer
- Guo M H, Cai J X, Liu Z N, et al. PCT: Point cloud transformer[J]. Computational Visual Media, 2021, 7(2): 187-199.
- 清华
- CVMJ
提出了基于Transformer的PCT网络。Transformer在NLP和图像处理取得了巨大成功,其内在的置换不变性也十分适合点云学习。为了更好的捕捉点云局部信息,使用了最远点采样和最近邻搜索来加强输入的embedding处理。实验证明PCT达到了分类分割和法向估计的SOTA。
由于点云和自然语言是完全不同的数据类型,因此PCT对Transformer作出了几项调整:
- Coordinate-based input embedding:Transformer里的positional encoding 是为了区分不同位置的同一个词。然而点云没有位置顺序关系,因此PCT中将 positional encoding 和 input embedding 结合了起来,基于坐标进行编码。
- Optimized offset-attention module:是原始 self-attention 的升级模块。它把原来的attention feature换成了self-attention的输入和attention feature之间的offset。同一个物体在不同的变换下的绝对坐标完全不一样,因此相对坐标更鲁棒。
- Neighbor embedding module: 注意力机制有效捕捉全局特征,但可能忽视局部几何信息,而这在点云中很重要。句子中的每个单独的词都有基本的语义信息,但是点云中孤立的点不存在语义信息。因此使用了一个neighbor embedding 策略来进行改良,让注意力机制着重于分析点局部邻域的信息,而不是孤立的点的信息。
Transformer基础
Transformer是一个解码编码结构,包含了三个主要模块:input embedding、positional encoding、self-attention。Self-attention是核心模块,其通过基于全局上下文产生细粒度的注意力特征信息。Transformer所有的操作都是并行的并且顺序无关的。
- Self-attention 将input embedding 和 positional encoding之和作为输入,使用线性层对每个词计算 query,key,value。
- 通过任意两个词的query 和 key 向量的点积,计算两者之间的注意力权重。
- 定义注意力特征:所有value向量以注意力权重的加权和。因此输出的每个词的注意力特征与所有的输入有关,因此能够学习全局上下文信息。
PCT: Point Cloud Transformer
PCT目标是将输入的点编码到一个高维特征空间,以便于体现点之间的语义关系。编码上的原则基本与原始Transformer保持一致,除了忽略掉了positional embedding,因为input coordinates已经包含了这一部分。
朴素PCT
修改原生Transformer最简单的办法就是把点云看做句子,把点看做单词。
- 使用一种忽视了点间作用的朴素的point embedding,即致力于在嵌入空间中将语义接近的点放得更近。
- 使用原生的Self-attention机制计算词元的语义相关性。由于Query,Key,Value都是由共享的线性变换层计算得到,因此它们都是顺序无关。Softmax和加权求和同样也是顺序无关。因此,整个self-attention处理是顺序无关,以至于很适合处理无序的点云数据。最终Self-attention层计算如下: \[ F_{out}=SA(F_{in})=LBR(F_{sa})+F_{in} \]
Offset-Attention
图卷积网络中体现了使用拉普拉斯矩阵 \(L=D-E\) 来代替原有邻接矩阵E的优势。类似的,在PCT中使用offset-attention(OA)来代替原始的self-attention(SA)来获得更好的效果:
\[ F_{out}=OA(F_{in})=LBR(F_{in}-F_{sa})+F_{in} \]
normalization方式也有所不同。如上图开关处所示,PCT中对第一维使用了softmax,对第二维使用了1范数来规范化attention map。相比于传统的Transformer更强化了注意力权重,并且减少了噪声影响。
带有上述Offset-Attention和input embedding的网络被称为 simple PCT(SPCT)。
增强局部特征 Neighbor embedding
PCT通过point embedding 可以有效的抽取全局特征,但是却忽略了同样重要的局部信息。借鉴PointNet++和DGCNN,PCT设计了一个neighbor embedding来增强局部学习能力。
如图所示,neighbor embedding包含两个LBR和Sampling and grouping(SG)。LBR层用于基础的point embedding,SG层用于采样点云,并且聚合采样点kNN的邻域特征。思路来源于EdgeConv[26]。
- 先通过FPS进行下采样,然后对于每一个采样点,找到其在原始点云中的kNN邻域,
- 计算每个采样点的邻域特征:即计算邻域相对于中心点的差分特征,然后拼接输出: \[ \begin{aligned} \Delta \boldsymbol{F}(p) &=\text { concat }_{q \in \operatorname{knn}(p, \mathcal{P})}(\boldsymbol{F}(q)-\boldsymbol{F}(p)) \\ \left.\widetilde{\boldsymbol{F}}_{(} p\right) &=\operatorname{concat}(\Delta \boldsymbol{F}(p), \operatorname{RP}(\boldsymbol{F}(p), k)) \\ \boldsymbol{F}_{s}(p) &=\operatorname{MP}(\operatorname{LBR}(\operatorname{LBR}(\widetilde{\boldsymbol{F}}(p)))) \end{aligned} \] MP为Max Pooling,RP为repeating vector \(x\) \(k\) times。
分类和分割任务的区别
分类只需要对所有点给出一个全局的类别,所以处理时SG层将点云进行采样压缩了。
分割和法向估计任务中,由于要给每一个点一个输出信息(部件标签或者法向信息),因此SG层只用来抽取局部特征,而不对原始点云进行压缩。
参考文献
[6] Vaswani, A.; Shazeer, N.; Parmar, N.; Uszkoreit, J.; Jones, L.; Gomez, A. N.; Kaiser, L.; Polosukhin, I. Attention is all you need. In: Proceedings of the 31st International Conference on Neural Information Processing, 6000–6010, 2017.
[26] Wang, Y.; Sun, Y.; Liu, Z.; Sarma, S. E.; Bronstein, M. M.; Solomon, J. M. Dynamic graph CNN for learning on point clouds. ACM Transactions on Graphics Vol. 38, No. 5, Article No. 146, 2019.