点云处理——点云形状分类

时间:2024-04-03 15:36:27

阅读的文献是国防科技大学的一篇综述:Guo Y , Wang H , Hu Q , et al. Deep Learning for 3D Point Clouds: A Survey[J]. 2019. 关于点云处理介绍的比较全面。

点云处理——点云形状分类根据自己的情况选择了以下四个方向进行研读。

任务一:点云形状分类(3D shape classification)

任务二:点云目标分割(3D object detection)

任务三:点云语义分割 (3D point cloud semantic segmentation)

任务四:点云实例分割 (3D point cloud instance segmentation)

 

一些公开可用的数据集:

ModelNet ,ShapeNet ,ScanNet ,Semantic3D 和KITTI Vision Benchmark Suite 


任务一:点云形状分类(3D shape classification)

一般过程:先学习单点特征,再聚合全局特征,再接两个全连接来分类。

点云处理——点云形状分类

1. 基于多视图的方法(Multi-view projection methods)

将3D对象投影到多个视图中,如俯视图,正视图,侧视图,在不同方位的视图中分别提取相应的特征,然后融合这些特征进行目标识别。关键点在于如何融合多视图特征,使之聚合为一个可区分的全局表示。MVCNN是该类方法的开创性工作,将三个视图的特征最大池化为一个全局描述符,用于分类。MHBN 通过协调双线性池化整合了局部卷积特征,以生成紧凑的全局描述符。

 

2. 基于体积占用的方法(Volumetric-based methods)

也是投影方法的一种,相当于把点投影到规则网格中,每个网格可能存在不止一个空间点.

代表:

   VoxNet 网络:就是二维卷积在三维的扩展。

   3D ShapeNet:用体素网格上二进制变量的概率分布表示3D形状。

存在的问题:上述两种方法无法很好地应用到密集的3D数据,因为计算和内存占用量会随着分辨率的增加而三次增长。OctNet首先使用混合网格八叉树结构对点云进行分层划分,使用位串表示对octree的结构进行有效编码,并通过简单的算法对每个体素的特征向量进行索引。树结构的优点是没有点云的地方不再细分,从而降低内存占用。

 

3. 基于点的方法(Point-based methods)

无需投影和体素化,直接对点操作。

3.1 单点独立处理式

直接对单点进行Multi layer perceptron (MLP)处理,即每个点的输出特征只与自己上一层的输入点特征有关,不受邻域点特征的影响。最后通过一个聚合函数(聚合函数可以是max pooling, avg pooling等)提取全局点云特征,用于形状分类。

  点云处理——点云形状分类

代表:

 PointNet:T-Net调整点云姿态;max pooling 解决点云排列不变性。

 DeepSets: 用summing up + nonlinear transformation实现permutation invariance。

存在的问题:上述两种方法不考虑点云的局部空间关系

      

PointNet++:使用set abstraction结构逐层提取特征。Set abstraction 包括 sampling,grouping 和 PointNet三部分。点云处理——点云形状分类

Sampling:对输入点云进行采样,只保留部分点进入下一层网络。采样数一般是输入点云总数量的一半,

                 采样算法是Farthest point sampliing (FPS),以保证采样点均匀分布在整个点云上 。

 grouping:为每个采样点寻找半径r(r=0.2)内的固定k(k=32)个邻域点,所有点坐标都是归一化后的。

 PointNet: 对这些点用PointNet中的MLP提取特征并max pooling 聚合为采样点坐标。

 如此,做两次set abstraction 操作。

 如果是分类任务,就再接一个PointNet+max pooling 提取全局特征;

 如果是分割任务就进行插值+concat+Pointnet来提取单个点云特征。与set abstraction 对应,插值操作也是两次。

 PointNet++还给出了两种局部特征提取方式:Multi scale grouping (MSG), Multi resolution grouping (MRG)

                                  点云处理——点云形状分类

 文章用的MSG。PointNet结构简单又具有强大的表达能力,因此很多网络都在PointNet的基础上发展而来。如Achlioptas,PAT,Mo-Net,PointWeb,SRINet。

FPS:https://blog.csdn.net/dsoftware/article/details/107184116

 

 3.2 考虑邻域空间关系的卷积式

     点云处理——点云形状分类

     连续卷积式: 卷积定义在连续空间

     离散卷积式: 卷积定义在离散的规则网格上。卷积的权重与相对中心点的偏移有关。

   3.2.1 连续卷积

在连续空间中定义卷积核,相邻点的权重与相对于中心点的空间分布有关。即邻域子集点的加权和。

代表1:

Relation-shape CNN (RS CNN, CVPR2019):RS CNN的核心操作是RS-Conv,它借鉴graph attention networks的思想,利用MLP学习邻域点集的权重w,并将学习到的权重与邻域点集的特征进行对应元素相乘。最后通过聚合函数得出采样点特征。输入到MLP的特征是邻域点与采样中心点的欧氏距离(坐标距离),或者特征距离。

 

点云处理——点云形状分类

                点云处理——点云形状分类

                  点云处理——点云形状分类

hij是邻域点与采样中心点的关系(距离),M是MLP, f是点特征, A是聚合函,sigma是**函数。文章实验结果表明:1)同时使用点特征,特征距离,欧氏距离作为MLP输入效果最好。2)在收集邻域点时,在邻域内随机选点比KNN效果好。3)聚合函数max表现比avg,sum都好。

代表2:DensePoint: 参考二维图像网络DenseNet结构,将不同层得到的信息进行整合(整合方式为concat),即网络中每一层的输入都与前面所有层输出有关。

点云处理——点云形状分类

代表3:PointConv (CVPR2019)

与RS CNN 类似,但引入密度信息。原因是点密度不均匀时,学下到的特征主要受密度大的区域主导,因此要降低高密度区域点特征的影响,提取密度加权卷积。为了处理这个问题,论文先离线计算出每个点的Density,然后使用一个MLP网络学习出inverse density,来对输入点特征Fin进行调整(re-weight)。除此之外,作者提出了一种pointconv的高效实现方式,还在点云分割阶段,将pointconv扩展到pointdeconv。

注意:PointConv的邻域点集是在坐标空间中找,用的是局部坐标。聚合函数用的是sum求和。

原始的PointConv:

点云处理——点云形状分类

高效的PointConv:

点云处理——点云形状分类  

PointDeconv由两部分组成:插值和PointConv。首先,我们使用插值来传播前一层的粗粒度特征,通过从3个最近点来进行线性特征插值。然后,使用skip links将插值特征与来自卷积层的具有相同分辨率的特征连接起来。连接后,我们在连接的特征上应用PointConv以获得最终的反卷积输出。我们反复执行此过程,直到所有输入点的要素已传播回原始分辨率。

点云处理——点云形状分类

其他方法:

        MSCNN, SPider CNN, PCNN,KPConv(可形变卷积),spheral CNN(球面卷积)等。

            

           3.2.2  离散卷积

                     代表1: Pointwise CNN

 

     3.3 考虑邻域空间关系的图卷积式

           3.3.1 空间域图卷积

            3.3.2 频率域图卷积

 

 

      3.4 树结构式