Deep Closest Point: Learning Representations for Point Cloud Registration && 2019论文笔记
作者:Yue Wang, Justin M. Solomon
研究机构:MIT
代码链接:代码
使用概率的方法可以得到soft的结果从而保证了可微性。
目标任务:点云配准,输入两个点云数据,寻找点云数据之间的刚性变换,输出点云之间的变换矩阵和点云的对应关系。
本文提出基于深度学习的单步(无需迭代)点云配准方法Deep Closest Point,性能SOTA,提取的点云特征在未见类别和目标上获得了很好的泛化性,以及证明了局部特征对于点云配准的促进作用。
现有方法有ICP以及其变种方法,即通过迭代优化点云对应关系和变换矩阵来得到最终的最优解。但是这种方法由于目标函数是非凸函数,倾向于陷入局部最小值,在点云初始对应距离过大时甚至会得到伪最优。加入启发式的ICP变种方法速度满,且精度没有很大提升。
此外还有基于深度学习的配准方法PointNetLK,精度也不是很高。
Deep Closest Point 分为三个部分:(输入为两个点云X,Y)
- 点云特征提取网络,得到点云特征
- 基于注意力的点云匹配预测,得到点云之间的预测matching
- 可微的SVD模块,得到点云XY之间的刚性变换
下面逐个介绍:
1.特征提取网络:
输入:点云X,Y
输出:特征
这里作者选择了PointNet和DGCNN作为特征提取器。
其中DGRCNN相比于PointNet额外编码了局部几何信息,作者认为这将有助于配准精度。
在实验阶段,作者验证了两个网络之间的性能差别,结果符合预期。
2.注意力模块
论文提出每个点云的特征不应当独立的提取,而是联合两个输入点云进行提取,使得最终得到的两个特征适用于特定的任务(即配准)。
由于求解两个点云之间的对应关系与NLP领域中的sequence-to-sequence问题很相近,作者引入了Transformer作为注意力函数,将注意力输出作为残差项修正原来的特征,得到最终的特征:
进而得到匹配关系(一个概率向量):
可将其视为点x_i到Y中各个点的软指针。
3.SVD模块
使用软指针生成平均意义下的(即注意力机制)每个x_i对应的Y中的点:
其中Y为NX3的矩阵表示点云Y中的所有点云。
得到两个点云之间的匹配关系后,使用SVD分解得到从X到Y的变换矩阵 和平移向量:
其中SVD 分解在tensorflow和pytorch中都有实现。
LOSS函数
直接使用变换矩阵与真值之间的偏差作为损失:
两个版本V1、V2:无注意力机制的为V1
在未见点云上进行测试:
在未见类别的点云上进行测试:
鲁棒性测试:使用有噪声的输入
速度测试:ICP很快,可以看出其复杂度不高于线性,DCP在4096之前都很快,但是到4096突然变慢了10倍,复杂度应该高于线性。
PointNet 与 DGCNN的对比:选择DGRCNN没错
MLP与SVD分解的对比: MLP是一个通用逼近器,因此与SVD做了一下对比:选择SVD没错
PointNet作者指出特征维度对模型的精度是有很大影响的,越大越好,但是
高于阈值之后就影响甚微了。实验结果显示1024维优于512维度。这里作者并没有找到最优阈值,个人觉得用grid search找到最佳阈值然后再测试精度可能更好?
最后作者提使用ICP作为后优化策略,即 使用DCP+ICP 可以得到更好的结果,但是只给出了示意图没有误差结果。