Cascaded Refinement Network for Point Cloud Completion 论文阅读
标题翻译:用于点云补全的级联优化网络
注:github源码还未公开,所以以下是自己不太成熟的理解…
1.Abstract
点云是稀疏且不完整的,已经存在的方法很难生成物体的细节、学习到复杂的点分布。
因此我们提出一种级联优化网络,使用一种从粗糙到细节的策略,来合成点云的细节信息。
考虑到局部输入的局部细节以及全局形状信息,我们保留不完整点集中的现有细节,并以较高的准确率生成具有的缺失部分。
我们还设计了一个patch-based discriminator,以确保每个局部区域都具有与ground truth一样真实细节,以学习复杂的点分布。
2.Introduction
尽管在图像的生成、风格迁移、合成方面已经获得成功,但是因为点云的稀疏、无序和不完整,所以进行点云补全依旧是一件很具挑战性的事情。而且很难学习到准确的点云特征和不同的点分布 使得这项任务更加艰难。
通常有以下方式处理3D completion
| 方式 | 缺点 |
|---|---|
| 体素 | 体素格式的3D shape 因为内存限制,很难生成高分辨率的Object |
| 网格 | 网格表示的方法可以生成复杂的surface,但是受限于顶点的固定连接方式 |
(点云无序,无固定连接)
3D completion已提出的论文
| 论文名 | 简述 |
|---|---|
| Pcn: Point completion network | 基于ShapeNet和KITTI数据集的 encoder-decoder管道 |
| TopNet | 一个层级的根树结构解码器 |
| function space | 需要post-processing 后期处理完善输出 |
它们无法产生具有详细几何信息的物体
文章的主要目的:
We propose to synthesize the dense and complete objects shapes in a cascaded refinement manner, and jointly optimize the reconstruction loss and an adversarial loss endto-end.
以端到端的方式,合成一个具有密集点并且形状完整的物体(利用级联优化网络),并且优化重建损失函数和对抗损失函数。

(ps:看result,感觉生成效果不如上采样网络处理的效果好)
再次总结,本篇文章的主要贡献(其实就是Abstract总结的内容):
• We propose a novel point cloud completion network which is able to preserve object details from partial points and generate missing parts with fine details at the same time;
• Our cascaded refinement strategy together with the coarse-to-fine pipeline can refine the points positions locally and globally;
• Experiments on different datasets show that our framework achieves superior results to existing methods on the 3D point cloud completion task.
3.Our Method
3.1 Overview
输入和输出:

通过输入输出可以看出本文的3D completion = 3D unsamlping
Method方法满足三个requirements
- 保留输入点云P的细节信息
- 可以利用具有细节信息的几何结构生成缺失的部分
- 使得生成点均匀分布
本篇论文的结构是:

3.2 Generator Network
Generator的架构

3.2.1 Feature Extraction
目的:获得 global point features f
和PCN一样,使用两个堆叠的具有 MaxPool 的 PointNet 特征提取网络

(github源码还没放出来,大胆猜测一下,v全局特征应该是和Point feature连到一起了。)
实际上就是Generator中的Per-point feature
3.2.2 Coarse Reconstruction
g1 由几个全连接层构成,它是将潜在空间的Per-point feature映射成粗点云(不具备细节)
这样做的目的是先生成具有整体形状的点云,后面再补全细节

全连接层的定义:链接
这里的全连接操作是:
每一个全连接层只对单点进行处理,比如1xC,那么全连接层假设是CxC’ (也就是C个权重,C‘个神经元) = 1xC’,最后一个全连接层有3个神经元,结果为1x3
总共有N个点,所以为N x 3,即Nc x 3
全连接层可以很好的将每点的特征混合起来。
3.2.3 Dense Reconstruction
我们的第二阶段g2是一个有条件的迭代优化子网络。
每次迭代,点的数量翻倍,N = {2048, 4096, 8192, 16, 384,…},iteration=1,2, 3, 4…
在每次迭代中参数共享。
通过encoder的最后一层MaxPool获得的全局特征 f,它仅仅代表大体的物体形状,缺失细节信息。要想获取细节,就必须从原始输入点云(利用输入的三维坐标)出发,并且使用Pcoarse的全局信息。
受到U-Net中skip connection的启发,我们将partial inputs(也就是原始点云P)和Pcoarse连接起来。
但是直接连接会造成点的严重不均匀。 (Pcoarse的点和点特征比较相似,因为是全局的形状特征,而且原始点彼此之间靠的很近,两部分结合之后,会造成网络生成的点靠的很近)。注意:这里的连接并不是将Pcoarse的特征和P的坐标直接连起来,变成Nc x 6,而是将点汇合为2Nc x 3,这个和PointNet,PointNet++完全不同。
所以采用了FPS+ mirror的方式获取Nc x 3个点。
首先在原始点云P中,采用FPS(最远点采样)子采样(Nc/2) x 3,然后以xy-plane为反射面,来镜像(Nc/2) x 3点,获得(Nc/2) x 3点,最终将两部分点加起来获得 Nc x 3。
为什么要镜像,因为很多human-made models show global reflection symmetry。
比如

通过FPS可以获得物体整体的形状,通过对称可以获得另外一半的点。
通过镜像的方法,可以拉开点之间的距离。原先的点紧挨着,通过FPS,进行最远点采样,选取的点和点都靠的很远。
举一个形象的例子,可以看到input的点是车形状的一半,要想生成另外一半,不进行对称的话,是根本不可能生成的。

最后将Pcoarse 和获得点连起来,Ps = 2Nc × 3
3.3 Lifting Module
增加因子为2,并且使用Feature Contraction-expansion Unit来调整点的位置。
3.3.1 First: feature concatenation
框架图:

首先复制已有的点4Nc x 3,然后使用2D grid来增加差异性(因为有复制的点,导致特征相似,使用2D grid可以拉开距离),接着添加mean shape vector fm,为了减轻完整点云和不完整点云之间的障碍,接着连接全局特征f,
所以此时的fs,就是一个全局特征、局部特征、形状向量、差异值的混合(感叹CNN真的很强大),使用fs,我们预测出每个点的位移{dx,dy,dz},然后

加上原先点的坐标4Nc x 3 + 4Nc x 位移 = 4Nc x 3,得到最终生成点的坐标。
原先点有2Nc x 3,现在变成 4Nc x 3, 正好增加一倍,所以增加因子为2。
但是从最初Nc x 3变成 4Nc x 3,上采样率是4。
注:fm下面有说明,Shape priors
3.3.2 Second: Feature Contraction-expansion Unit
框架图:

受hourglass network启发,作者以自下而上和自上而下(bottom-up and top-down)的方式巩固了局部和全局信息,重新优化了点的位置并使其均匀分布在物体表面。但是,在点云的不同比例之间对特征进行子采样和上采样并不是一件容易的事。为了节约内存和计算时间,作者采用 shared multilayer perceptrons (MLPs) 。
output features fc 和 fe,计算过程如下




猜测:Cc()操作是,Mlps是对每个点的特征进行学习,并且reshape后使得N2的点少于N1,这就是收缩(contraction),收缩就是将某点的特征归并到其他点中,
例如,有4N x C个点,reshape后,变成N x 4C个点,这样的操作可以使得不同点特征更好的融合起来
CE()操作是,Mlps对每个点的特征学习后,抽取出一些点的特征,转换为新的点,这就是(expansion)。
例如:有 N x 4C,我将其中4C特征分为 C C C C, 那么就会有 4N x C
(该猜测基于自己看过的PU-Net论文)
3.4 Shape Priors
将某一类的所有物体的特征(latent embedding)加起来取平均,作为 mean shape values

Ni指的是该类total numbers,fi是每个实例的全局特征。
fi特征是通过一个在8类物体上预先训练好的 PointNet auto-encoder计算出来的。
取平均的过程类似于mean-pool,将同一类物体(这类物体有不同的形状)特征混合起来,取得一个整体的平均的效果。
用在lifting module 中,能够更好的生成否合该类物体形状的点(就算存在很大误差,也不会极大地脱离物体该有的形状)。
3.5 Discriminator
Discriminator由 patch selection, hierarchical feature integration and value regression三部分构成。框架图如下:

并不和传统GANs一样,只考虑整体形状获得一个confidence value,作者设计了一个 patch discriminator 来保证每一个部分都是realistic。通过采用PointNet++层次化的特征学习方式,设置不同比例的patch size。首先通过FPS获得Ns个点,然后通过以不同的半径比例 radii {0.1, 0.2, 0.4}获得周围的点,使用PointNet学习不同半径patch的特征(首先单点学习,然后对邻域内的点取MaxPool),然后将它们连接起来,最后通过一个Mlps,获得Ns个scores。
每一部分patch的操作如下:

3.6 Optimization
training loss = reconstruction loss + adversarial loss
- Reconstruction Loss
采用的是Chamfer Distance

计算的是两个点云的平均最近距离,如果两个最近的点靠的越近,该值越小。
作者采用以下变体方式:

并且计算了粗糙点云和真实值的差距,密集点云和真实值的差距

这样的loss反向传播,可以使获得的Pfine更加精细。
- Adversarial Loss.

使得LGAN(D)越来越小,只能是D(fake)越小,D(real)越大
与此同时Generator,会努力地生成接近ground truth的点云,所以D(fake)会越来越大。
- 综上,总体的损失为

4.Experiments
(下面的部分,粗略看过)


