点云分割总结
- point transformer
- background 标量自注意力和向量自注意力(可参考论文)
- 标量自注意力
- 向量注意力
- Point Transformer Layer
- 下采样
- 上采样
- 整体结构
- point transformer v2
- group vector attention
- Position Encoding Multipler
- Partition-based Pooling分区池化
- Point Transformer V3
- 点云序列化
- 条件位置编码
- OneFormer3D
point transformer
point transformer和上面介绍的pointNet属于一个流派,基于点对点云进行处理,这种结构仅能用于分类和分割任务,不能用于目标检测。
自注意力机制适合处理点云的原因:
- 排列不变性:3D点云是无序的,即点的顺序不应影响最终的处理结果。自注意力机制天然具有排列不变性,因为它通过对所有点对的关系进行建模来处理输入,而不依赖于任何特定的输入顺序。
- 捕捉全局上下文:点云数据通常覆盖了3D空间中的对象或场景,理解这些数据需要捕捉点之间复杂的空间关系。自注意力机制能够有效地捕捉这些关系,因为它为每对点赋予一个注意力权重,这反映了它们之间的相对重要性。
background 标量自注意力和向量自注意力(可参考论文)
标量自注意力
矩阵形势的公式如下:
self attention中QKV同源,都是同一个输入经过一个MLP得到的,cross attention中,KV同源,Q非同源
真正的原理公式如下:
其中,φ、ψ、α都是线性变换矩阵(这里可能不是矩阵) linear projections or MLPs,ρ是softmax函数。δ是位置编码信息
Xi是第i个位置的特征向量,Xj是第j个位置的特征向量,Yi是第i个位置的输出。
∑也代表了多次查询,去输入矩阵的每个位置都查询,获得加权值,最后相加。
获得第i个位置的输出向量,需要用第i个位置的输入向量,分别去每个位置查询,这就是query的意义!!!?
向量注意力
公式如下:
γ、α是线性变换,β是向量关系函数(例如相减等)。⊙是向量点乘。
上述的公式也揭示了,向量注意力和标量注意力的区别,标量注意力中,第i个位置到第j个位置查询,这个(i,j)的权重是一个数(标量),而向量注意力中,向量关系函数(比如相减),能够保证这个权重是一个向量,这样Xj中的每个元素都能得到一个权重,因此这里也从标量的普通相乘变成了⊙向量相乘!
Point Transformer Layer
点云中每个点都和周围最近的N个点进行attention,这里是向量自注意力公式,向量关系函数是相减,所不同的是value位置也加上了位置编码信息,这是试验所得,作者发现这里加上后效果会有所提升。
点云中的每个位置的输入向量,本身就是坐标信息,这里的位置编码,就是对应位置的向量相减,计算位置偏置,再经过一个θ(MLP),训练得到。
Χ(i)是与x_i临近的N个点的集合,也就是要与临近的N个点进行特征融合,上式中的几个函数主要是mlp或linear,如下图所示。
下采样
图像中上采样下采样一般都是w h方向的,点云的上采样、下采样是针对point,本质相同,实现却无法像规则化的图像特征一样方便。
流程如下:
- 使用farthest point sample进行点数下采样(论文汇总N -> N/4)fps算法介绍
- 对下采样后的每个点,使用KNN找到临近的n个点(论文16),然后对这16个点的特征进行mlp和local max pooling,最后得到的还是N/4点的特征
上采样
其中input1为上一个模块的输出,input2为下采样模块中相等维度(Unet结构的下采样过程中对应的层)的输出,对于input1和input2,首先经过一个简单的MLP,包括一个线性层以及batch normalization,激活函数仍然为ReLU。之后对于input1执行三线性插值,得到输入点集P1的超点集P2,从而将点集的分辨率提升。之后与input2做简单的skap connection,即残差连接之后输出。经过四个上采样模块,将输出恢复至N个特征向量
整体结构
结构如下图,可以进行分类或分割,上图分割,下图分类。
分割模型,整体类似于unet的对称结构,先上采样,然后进行下采样,与cnn不同,这里上下采样所采用的结构分别是transition up和transition down。
point transformer v2
相比v1主要优化的地方有group vector attention、Position Encoding Multipler和Partition-based Pooling三点。
group vector attention
标量注意力中,矩阵Value中每一个向量的所有通道的权重值是相同的,在向量注意力中,矩阵Value中每一个向量的所有通道的权重值是不同的,这样就导致了参数的增加。标量注意力的方法虽然参数少,但是可能无法获得向量中通道之间的关系,向量注意力的方法却可以关注到向量中通道之间的关系,调整每个通道的权重,但随之而来的问题就是参数数量的大量增加。
为了避免上述问题,作者采用了分组的方法,将Value矩阵中每个向量的通道均匀的分成 g 组(1 ≤ g ≤ c),并且在每组内共享同一个权重参数,用于解决模型性能和参数数量的问题。这样不仅减少了参数数量,提高了模型的效率而且也保留着向量注意力的长处。这里本质上是两者的妥协,类似于group卷积。
Position Encoding Multipler
v2中attention采用了向量权重分段的方式,在一定程度上限制了attention的能力,因此这里加强了位置编码的力量。
v1中采用的公式
v2公式如下,可以看到v2中的位置编码不仅只充当一个bias的角色,δmul作为一个可学习的乘性因子,和关系函数得到的权重向量进行相乘,加强位置编码力量。
Partition-based Pooling分区池化
下采样:
采用fps进行采样,采样点再用knn去聚合邻域点的特征,knn查询到的点由于不是空间对齐的,可能出现不同的采样点取到同一个邻域点。为了解决这个问题,提出了按grid采样的方法。如上图所示,通过划分不重合的网格,每个网络内点通过均值得到位置,max pooling取特征信息。(把每个点的特征分成了两部分?位置和特征)
上采样:
直接对同一个网格内的点进行特征复制
Point Transformer V3
PTv3的设计理念是优先考虑简单性和效率,而非过度追求复杂的设计。通过优化网络结构和参数,PTv3在保持强大性能的同时,降低了计算复杂度和内存消耗。这种设计使得PTv3在推理阶段的速度更快,更易于在广泛的硬件设备上部署和运行。
与前任PTv2相比,PTv3的处理速度提高了3倍,内存效率提高了10倍。这一突破性的进步得益于PTv3对点云序列化方法的创新应用。PTv3采用了一种为串行点云量身定制的精简方法,取代了更复杂的注意力补丁交互机制,从而显著提升了处理速度并降低了内存消耗。
点云序列化
PTv3通过引入空间填充曲线(如Z-order曲线和Hilbert曲线)对点云进行序列化。这种序列化方法能够在保持空间近邻性的同时,将无结构的点云数据转换为结构化的序列。这种转换使得PTv3能够更高效地处理点云数据,并提取出有用的信息。
条件位置编码
为了进一步提高性能,PTv3引入了条件位置编码(CPE)来替代传统的相对位置编码(RPE)。CPE通过基于八叉树的深度卷积实现,不仅简化了位置编码的计算过程,还提高了模型的性能。此外,PTv3还提出了一种增强的条件位置编码(xCPE),通过在注意力层之前准备具有跳过连接的稀疏卷积层来进一步提升性能。
OneFormer3D
2024cvpr智驾相关