论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

时间:2024-04-03 18:42:17

1.介绍

三维点云处理通常被认为比二维图像更具挑战性,这主要是因为点云样本存在于不规则的结构上,而二维图像样本(像素)依赖于图像平面上具有规则间距的2D网格。点云几何通常由一组稀疏的三维点表示。这种数据格式使得传统的深度学习框架难以应用。例如:对于每个样本,传统的卷积神经网络(CNN)要求相邻样本出现在一定的空间方向和距离上,以便于卷积。点云通常不遵循这样的约束。之前的方法大都是将三维空间划分为规则体素和将二维CNN扩展到体素,基于体素的网络的主要问题是随着空间分辨率的提高,神经网络规模的快速增长,自从pointnet出来之后呢,大家都开始直接对三维点云进行处理啦!

这篇文章主要提出了一种称为FoldingNet的自动编码器(AE)。自动编码器中瓶颈层的输出称为codeword,可用作输入点云的高维嵌入。解码器部分是基于折叠操作把2D网格变形到点云的表面。

这主要是依据任何三维物体表面都可以通过切割、压缩和拉伸等操作转换成二维平面。逆过程是通过一定的折叠操作将二维点样本粘合回物体表面,并将其初始化为二维网格样本。这个逆过程也就是本文进行重建的主要操作。

然后具体的看一下折叠操作,就是下面表1中展示的。它主要是进行了两次折叠,在解码器中直接引入这样一个隐式2D网格约束,解决了点云不规则结构的问题,文章也提到了只要有适当的codeword,折叠操作就可以构建任意曲面。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

第一列包含来自ShapeNet数据集的原始点云样本。第二列说明在解码过程中要折叠的2D网格点。第三列包含一次折叠操作后的输出。第四列包含两个折叠操作后的输出。这个输出也是重构的点云。

虽然说重建的结果很好,但是我觉得折叠的操作就是解码器部分还是比较简单的,后面也会具体介绍,所以我觉得主要是前面这个提特征的网络特别好,才使得后面的重建结果好。

总的来说,文章的贡献点就是

  •   训练的是一种端到端的深层自动编码器,它直接消耗无序的点云。
  • ·提出了一种新的解码操作-折叠,理论上证明了它在点云重建中是通用的,同时为重构提供命令。
  • ·在主要数据集上的实验表明,与其他无监督方法相比,折叠方法可以获得更高的分类精度。

2.点云上的FoldingNet自动编码器

自动编码器的结构如图1所示。编码器的输入是n乘3矩阵.矩阵的每一行由三维位置(x,y,z)组成。输出是一个m乘3矩阵,表示重建的点位置。重构点m的个数不一定与n相同。假设输入包含点集S,重构的点集是Sb集。然后,利用定义为(扩展)Chamfer距离来计算Sb的重建误差

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

这个式子也很好理解,第一项要求原始点云中的任何3D点x在重构点云中具有匹配的3D点xb,第二项强制匹配,因为输入点集和重构点集点的个数可能不一样。最大操作强制从S到Sb的距离,距离必须同时小。编码器计算每个输入点云的表示(codeword),并且解码器使用该codeword重构点云。在实验中,将codeword长度设置为512。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

2.1 基于图形的编码器体系结构

首先,对于每一个点v,计算其大小为3×3的局部协方差矩阵,并将其矢量化为1×9.利用K-NNG中v(包括v)的邻居点的三维位置计算v的局部协方差。将大小为n-by-3的点位置矩阵和大小为n-by-9的所有点的局部协方差连接到大小为n-乘12的矩阵中,并将它们输入到3层感知器中。感知器被并行地应用于大小为n-乘12的输入矩阵的每一行。它可以看作是每个3D点上的每一点函数。感知器的输出被输入到两个连续的图层,其中每个层将最大池应用到每个节点的邻域。

假设K-NN图有邻接矩阵A,图层的输入矩阵为X,则输出矩阵为

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

其中K是特征映射矩阵,后面一个式子的局部最大池操作max k∈N(I)实质上是根据图结构计算局部签名。该签名可以表示本地邻居的(聚合)拓扑信息。通过连接基于图的最大池层,网络将拓扑信息传播到更大的区域。后面再通过一个2层感知器,得到了一个512维的codeword.

2.2 基于折叠的解码器结构

解码器使用两个连续的三层感知器将一个固定的二维网格扭曲成输入点云的形状。输入codeword是从基于图形的编码器中得到的.在将codeword输入解码器之前,将它复制m次,并将m-by 512矩阵与包含m网格点的m-by-2矩阵连接在原点中心的正方形上。级联的结果是一个大小为m-by-514的矩阵.矩阵由3层感知器逐行处理,输出为m乘3的矩阵。在此之后,再次将复制的码字连接到m-by-3输出,并将其输入到3层感知器中.这个输出是重建的点云。参数n设为输入点云的大小,例如实验中的n=2048。在一个正方形中选择m个网格点,因此选择m为2025,文章说这是与2048最接近的平方数。

折叠操作实质上形成了一个通用的2D-to-3D映射。具体地说,用矩阵U表示输入的2D网格点。每一行U是一个二维网格点。用UI表示U的第i行,用θ表示编码器输出的码字.然后,在级联之后,MLP输入矩阵的第一行是[UI,θ].由于MLP被并行地应用于输入矩阵的每行,输出矩阵的第i行可以写为f([UI,θ]),其中f表示由MLP执行的函数。该函数可以看作是一个参数化的高维函数,码字θ作为一个参数来指导函数的结构(折叠操作)。由于MLP擅长逼近非线性函数,因此它们可以在2D网格上执行精细的折叠操作。高维码字本质上储存了进行折叠所需的力量,这使得折叠操作更加多样化。

文章中的解码器有两个连续的折叠操作。第一个折叠二维网格到三维空间,第二个折叠在三维空间内。在表1中显示了这两个折叠操作之后的输出。从表1中的C列和D列可以看出,每个折叠操作都有一个相对简单的操作,两个折叠操作的组合可以产生相当精细的曲面形状。虽然第一次折叠似乎比第二次简单,但它们一起导致了最终输出的实质性变化。如果需要更精细的表面形状,则可以使用更多的连续折叠操作。

3.理论分析

这一部分主要是给出了一个关于基于折叠的译码器的普适性定理.

它证明了基于折叠的解码器的存在,通过改变码字θ,输出可以是任意点云。就是说存在一个2层感知器,它可以利用折叠操作从二维网格中重构任意点云。文章中的证明方法主要是手工构造了一个2层感知器,证明这样的折叠操作是可行的。

从而说明了文章中提出的解码器是通用的,这样做是可行的。

4.实验

4.1 训练过程的可视化

这一实验就是用来显示由初始随机二维流形如何折叠逐渐变成有意义的点云。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

4.2 点云插值

一种证明codeword提取了输入的自然表示的常用方法是看自动编码器是否能够在数据集中的两个输入之间实现有意义的新插值。就是看这个提取的特征好不好。在表3中,展示了类间和类内插值.

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

4.3 点云聚类

利用FoldingNet中的codeword对3D点云进行聚类,采用的方法是T-SNE。从图2中可以看出,除了梳妆台(紫罗兰色)vs .床头柜(粉红色)}和{书桌(红色)vs桌子(黄色)}之外,大多数类都很容易分离。文章说对这两对类进行了视觉检查,发现即使是人类,也很难分辨出许多对类。在表4中,列出了在对ModelNet 10数据集进行分类时最常见的错误。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

4.4传递分类精度

这一部分展示了FoldingNet在三维点云表示学习和特征提取方面的效率。特别是,使用从自动编码器获得的codeword(潜在表示)在ModelNet数据集上训练线性支持向量机分类器,同时从ShapeNet数据集中训练自动编码器。由于自动编码器的训练和支持向量机的训练都是基于不同的数据集,实验证明了FoldingNet的传输鲁棒性。表5给出了具体结果,这里还包括一个图3,显示训练期间重建损失如何减少,线性支持向量机分类精度如何提高。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

4.5.半监督学习:当标记数据很少时会发生什么?

希望测试FoldingNet的性能在标记数据数量较少时是如何降低的。我们仍然使用ShapeNet数据集来训练FoldingNet自动编码器。然后,只使用ModelNet数据集中的整体训练数据的a%来训练线性支持向量机,其中a可以是1、2、5、7.5、10、15和20。如果自动编码器得到的码字已经是线性可分的,则训练线性支持向量机所需的标记数据数量应该很小。在图4中报告了实验结果。文章中说即使只有1%的标记训练数据(98个标记训练数据,即每类约1∼3标记数据),测试的准确率仍在55%以上。当有20%的培训数据可用时,测试分类的准确率已经接近85%,高于表5所列的大多数方法。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

4.6 折叠解码器的有效性

这一部分主要是跟[1]P. Achlioptas, O. Diamanti, I. Mitliagkas, and L. Guibas. 《Representation learning and adversarial generation of 3d point clouds》里的全连接解码器比较,当然了这一篇文章我也没看,相关工作里介绍这一篇文章,说[1]设计的AE是为了提取生成网络的特征。为了进行编码,它使用字典顺序对三维点进行排序,并在点序列上应用一维CNN。为了解码,它应用了一个三层完全连接的网络.在从ShapeNet数据集到ModelNet数据集的转换分类精度方面,这种简单的结构在点云的表示提取方面优于所有现有的无监督工作。

具体设置也是使用ModelNet40数据集训练两个自动编码器。第一个自动编码器使用文章中提出的折叠解码器,第二个自动编码器使用[1]中提出的完全连接的三层感知器。对于完全相连的解码器,三层的输入和输出数量分别是{512,1024}, {1024,2048}, {2048,2048×3},输出是2048乘3矩阵,其中包含输出点云中的三维点。两个自动编码器的编码器都是第2.1节中提到的基于图形的编码器。

论文笔记:《FoldingNet: Point Cloud Auto-encoder via Deep Grid Deformation》

从图5中可以看到,在训练过程中,重建损失(以Chamfer距离测量)不断减小,这意味着重构后的点云与输入点云越来越接近。同时,训练在码字上的线性支持向量机的分类精度也在提高,这意味着码字表示变得更加线性可分。

折叠译码器几乎总是具有较高的精度和较低的重建损失。与依赖重建三维点的非自然“一维顺序”的全连通译码器相比,该译码器依赖于与三维空间内点云对应的二维流形的折叠。这种折叠操作比完全连接的解码器更自然.此外,全连通译码器的参数为1.52×10的7次方,而折叠式译码器的参数为1.05×10的6次方,约占全连通译码器的7%。