FoldingNet[1]提出了一种点云自编码器结构,属于自监督学习的范畴,可以将输入点云投影(即特征降维)至具有丰富语义信息的高维空间中,形成高维特征向量(文中用“codeword”指代),即编码过程。接着通过解码网络将高维特征向量恢复得到高维度的输入点云。
如下图所示,对于input输入点云,首先经过特征编码形成codeword(不是图中的2D grid),接着进行两次folding操作,恢复得到与输入点云相似的输出点云:
What is Folding Operation?
作者在文中指出,从直觉上来说,任何三维空间表面结构都可以通过“裁剪”,“挤压”,“屈伸”等操作转换成二维平面表示,因此以上操作的逆过程就是将二维平面数据进行粘贴等操作,恢复得到之前的三维空间表面结构,而这个逆过程作者称之为folding operation.
如上图所示,图中将开始的2D grid与重建得到的3D surface对应点用相同的颜色标出。从一个固定大小的二维平面(2D grid)开始,在具有丰富语义信息的codeword引导下,经过两次folding操作即可恢复得到输入的三维空间表面结构。
Work Flow
如上图所示,FoldingNet[1]的输入为点云,输出为重建得到的点云,整体pipeline简单来说可以描述为:
input point cloud -> encoder -> codeword -> decoder -> reconstructed_point_cloud
Encoder(input point cloud -> codeword)
编码部分基本采用的就是PointNet[2]式的结构,输入点云(例如Nx3),经过层级式MLP,再通过max pooling得到最终的高维codeword(1x512).
对点云中的每一点
v
v
v,利用KNN(neighbors=16)构造图结构,计算每个点的协方差矩阵covariance matrix(3x3),向量化为1x9,与点
v
v
v的三维坐标进行拼接concatenation得到1x12的向量表示,即上图左上方所描述的操作。nx12的矩阵经过3层MLP得到nx64的feature map.
除了以上基础的PointNet[2]结构,作者还提出了一种Graph Layer:
Graph Layer
Graph Layer基于点云输入时利用KNN构造的图结构,对每个点在相应图结构中,进行特征维度上的max-pooling,通俗来讲就是对每个点,在其16个邻域中,对特征作max-pooling.
接着再进行MLP+pooling+MLP得到1x512的高维向量codeword表示。
Decoder(codeword+2D grid -> reconstructed point cloud)
解码部分比较简单,具体操作看图即可理解,这里比较有意思的点是2D grid是固定(fixed)的,在codeword的引导下经过两步folding操作恢复成输入点云。
Loss
FoldingNet[1]整体属于自监督网络,目的是使输入点云与输出点云尽可能一致,因此采用点云重建中使用的比较多的Chamfer Distance作为loss,直接衡量输入与输出点云的一致程度:
S为输入点云集合,S_hat为输出点云集合
Experiment
代码采用开源代码,此代码中有几处与原文不一致的地方:
- Encoder部分相差比较大,第一是没有计算协方差矩阵与自身拼接,第二是没有实现graph layer,第三是在使用MLP进行特征升维的操作中也有一些不一致之处,具体见代码
- loss没有对点云数目做平均,即在距离加和后没有乘以 1/S 与 1/S_hat 这两项,这里尚不清楚为何这样计算
利用在shapenet上训练得到的权重,一些可视化重建效果如下:
左列为输入点云,右列为重建点云
Reference
[1] Yang Y, Feng C, Shen Y, et al. Foldingnet: Point cloud auto-encoder via deep grid deformation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 206-215.
[2] Qi C R, Su H, Mo K, et al. Pointnet: Deep learning on point sets for 3d classification and segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 652-660.