如有错误,恳请指出。
对一些经典论文进行快速思路整理,以下内容主要关注的是3d点云的backbone设计,包括transformer的应用,卷积核的设计,PointNet++网络的改进。
文章目录
- 一、Transformer改进
- 1. 《PCT: Point Cloud Transformer》(2020)
- 2. 《Point Transformer》(2020)
- 二、PointNet++改进
- 3. 《Modeling Point Clouds with Self-Attention and Gumbel Subset Sampling》(2019CVPR)
- 4. 《Momenet: Flavor the Moments in Learning to Classify Shapes》
- 三、卷积核设计
- 5. 《PointCNN: Convolution On X -Transformed Points》(2018NIPS)
- 6. 《Relation-Shape Convolutional Neural Network for Point Cloud Analysis》(2019CVPR)
- 7. 《Kpconv: Flexible and deformable convolution for point clouds》(2019ICCV)
- 8.《Point-Voxel CNN for Efficient 3D Deep Learning》(2019NIPS)
一、Transformer改进
1. 《PCT: Point Cloud Transformer》(2020)
1)提出Offset Atention,在原本的self-attention中的LBR(Fa)改为LBR(Fin-Fa),同时魔改了norm方法。其中这里的Fin是原始点特征,Fa是进行self-attention变换之后的特征
2)提出Neighbor Embedding,利用attention可以捕获全局特征但是缺少局部特征,所以用PointNet++来提取一些局部特征,作为transformer的输入
2. 《Point Transformer》(2020)
1)改进了attention的表达式,不过本质上还是有MLP构成,这里也注意到点之间的相对位置信息。整体跟PointNet++与RS-CNN类似
二、PointNet++改进
3. 《Modeling Point Clouds with Self-Attention and Gumbel Subset Sampling》(2019CVPR)
1)提出ARPE模块,将每个点表示为绝对位置与相对位置的(每个点相对于临近k个点的相对位置)集合
2)提出GSA(Group Shuffle Attention),这是新的特征转换方法。利用自注意力机制对点特征进行变换,与MLP作用一致
3)提出GSS(Gumbel Subset Sampling),这是新的点采样方法。将Pointnet++中的FPS换成了使用Gumbel Softmax进行计算每个点的重要程度,然后根据这个概率选取down sampling的点。
4. 《Momenet: Flavor the Moments in Learning to Classify Shapes》
1)将网络的输入由点的坐标(x,y,z)增加到 ( x , y , z , x 2 , y 2 , z 2 , x y , x z , y z ) (x,y,z,x^2,y^2,z^2,xy, xz, yz) (x,y,z,x2,y2,z2,xy,xz,yz) 9维,理解原始特征的构造。同时对每个点构造其k个邻域的相对位置(3维),加上所构造的特特征,每个点都包含了其k个邻域的12维特征,后续进行编码聚合。其余结构与PointNet类似。
三、卷积核设计
5. 《PointCNN: Convolution On X -Transformed Points》(2018NIPS)
对于Convolution来说,输入点的顺序发生变化,输出也会变化。点云里面的点的输入顺序,是阻碍Convolution操作的主要问题。为了处理以上问题,论文定义了一个X变换矩阵,该矩阵能对某个特定顺序的输入进行处理,得到一个与顺序无关的feature。
这个问题,其实在PointNet中也有体现到,也就是那个T-Net,直接预测一个变换矩阵实现旋转不变性。这里是利用k邻域来构造相对位置编码信息来获取X
6. 《Relation-Shape Convolutional Neural Network for Point Cloud Analysis》(2019CVPR)
1)利用MLP编码点与邻域的相对位置信息获取到权重向量wij,权重向量的编码长度与点xj的特征长度一致,可以实现点乘(Conv)操作。对于conv之后的特征再进行MLP编码处理。
7. 《Kpconv: Flexible and deformable convolution for point clouds》(2019ICCV)
1)Rigid KP-Conv:对每一个点特征进行k个卷积核卷积处理,由Din维度编码为Dout维度输出,再将这k个卷积核的编码处理结果进行element-wise add操作,得到最后的编码特征。(和2D的卷积已经非常类似了)
2)Deformable KP-Conv:借鉴图像中可变性卷积的思路,可以引入offset的概念,将kernel中的点的位置做偏移,相当于改变了权重域的采样的位置进行卷积处理。
8.《Point-Voxel CNN for Efficient 3D Deep Learning》(2019NIPS)
众所周知,Voxel-based的方法在量化过程中存在信息丢失,如果分辨率设置得过小又得提高3d卷积的计算量(Large Memory Footprint);Point-based的方法需要聚集某一个点领域的信息导致不规则的内存消耗,不这样做又难以提取点云的局部信息(Irregular Memory Access and Dynamic Kernel Overhead)。两种方法均不完美,各有优缺点。所以这里PVCNN的动机就是提取这两种方法的优势:利用point-based的小内存占用以及voxel-based的局部特征提取。
PVConv包含两个部分:利用voxel粗粒度信息,利用Point提取细粒度信息,最后将两则融合
-
1. Voxel-Based Feature Aggregation
首先将点云数据进行归一化地特征表示(包括平移到以重心为原点的局部坐标系中,进行最大值归一化,再缩放到0-1区间),利用归一化后的点进行voxel化(voxel内的点特征进行平均),随后利用一系列的3d卷积提取局部信息(包含BN层+激活函数),最后将每个voxel特征插值获取原来的点特征中(最直接的方法是利用最邻近插值,但是会导致一个voxel中的点相同,所以这里使用三线性插值trilinear interpolation),因为需要与point-baswd的方法提取出来的特征进融合。 -
2. Point-Based Feature Transformation
利用MLP对点特征进行编码,获取细粒度的信息表示,随后与来至基于体素的特征聚集分支的粗粒度信息进行简单的相加融合(element-wise add)
讨论:相比pointnet++中需要进行group的操作提取K个neighbor信息,这就需要进行O(kn)存储器访问,PVConv只需要O(n)。通过使用PVConv来替换PointNet中的MLP获得PVCNN,同时使用PVConv扩展PointNet++构建PVCNN++,两者都获得不错的性能(说明3d卷积提取局部特征可能要比pointnet++的方式要好,卷积归纳偏置的有效性)。不过这里作者并没有贴上PVCNN与PVCNN++的结构图,由于PointNet涉及多层MLP结构,具体替换细节还需要查看代码。
ps:这里贴上另外一个大佬的见解:Point-Voxel CNN for Efficient 3D Deep Learning