【论文笔记】点云配准网络 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)

  1. 点云特征提取网络,得到点云特征
  2. 基于注意力的点云匹配预测,得到点云之间的预测matching
  3. 可微的SVD模块,得到点云XY之间的刚性变换

在这里插入图片描述

下面逐个介绍:

1.特征提取网络:

输入:点云X,Y

输出:特征 F x , F y F_x,F_y Fx,Fy

这里作者选择了PointNet和DGCNN作为特征提取器。

其中DGRCNN相比于PointNet额外编码了局部几何信息,作者认为这将有助于配准精度。

在实验阶段,作者验证了两个网络之间的性能差别,结果符合预期。

2.注意力模块

论文提出每个点云的特征不应当独立的提取,而是联合两个输入点云进行提取,使得最终得到的两个特征适用于特定的任务(即配准)。

由于求解两个点云之间的对应关系与NLP领域中的sequence-to-sequence问题很相近,作者引入了Transformer作为注意力函数 ϕ \phi ϕ,将注意力输出作为残差项修正原来的特征 F x , F y F_x,F_y Fx,Fy,得到最终的特征:
Φ X = F X + ϕ ( F X , F Y ) Φ Y = F Y + ϕ ( F Y , F X ) \Phi_X = F_X + \phi(F_X , F_Y ) \\ \Phi_Y = F_Y + \phi(F_Y , F_X ) ΦX=FX+ϕ(FX,FY)ΦY=FY+ϕ(FY,FX)
进而得到匹配关系(一个概率向量):
m ( x i , Y ) = s o f t m a x ( Φ Y Φ x i T ) m(x_i,Y) = softmax(\Phi_Y\Phi_{x_i}^T) m(xi,Y)=softmax(ΦYΦxiT)
可将其视为点x_i到Y中各个点的软指针。

3.SVD模块

使用软指针生成平均意义下的(即注意力机制)每个x_i对应的Y中的点:
y i ^ = Y T m ( x i , Y ) ∈ R 3 \hat{y_i} = Y^Tm(x_i, Y) ∈ R^3 yi^=YTm(xi,Y)R3
其中Y为NX3的矩阵表示点云Y中的所有点云。

得到两个点云之间的匹配关系 ( x i , y i ^ ) (x_i, \hat{y_i}) (xi,yi^)后,使用SVD分解得到从X到Y的变换矩阵 R X Y R_{XY} RXY 和平移向量 t X Y t_{XY} tXY:
首 先 计 算 两 个 点 云 的 中 心 : x ˉ = 1 N ∑ i = 1 N x i ,   y ˉ = 1 N ∑ i = 1 N y i 各 个 点 对 之 间 的 互 协 方 差 矩 阵 : H = ∑ i = 1 N ( x i − x ˉ ) ( y i − y ˉ ) S V D 分 解 : H = U S V T 变 换 矩 阵 : R X Y = V U T    ,    t X Y = − R X Y x ˉ + y ˉ 首先计算两个点云的中心:\bar x =\frac1N\sum_{i=1}^N x_i,\ \bar y =\frac1N\sum_{i=1}^N y_i \\ 各个点对之间的互协方差矩阵: H = \sum_{i=1}^N (x_i − \bar x)(y_i − \bar y)\\ SVD分解:H = USV^T \\ 变换矩阵:R_{XY} = VU^T \ \ ,\ \ t_{XY} = −R_{XY}\bar x + \bar y xˉ=N1i=1Nxi, yˉ=N1i=1NyiH=i=1N(xixˉ)(yiyˉ)SVDH=USVTRXY=VUT  ,  tXY=RXYxˉ+yˉ
其中SVD 分解在tensorflow和pytorch中都有实现。

LOSS函数

直接使用变换矩阵与真值之间的偏差作为损失:
L o s s = ∣ ∣ R X Y T R X Y G − I ∣ ∣ 2 + ∣ ∣ t X Y − t X Y G ∣ ∣ 2 + λ ∣ ∣ θ ∣ ∣ 2 Loss = ||R_{XY}^TR_{XY}^G-I||^2 + ||t_{XY}-t_{XY}^G||^2 + \lambda||\theta||^2 Loss=RXYTRXYGI2+tXYtXYG2+λθ2

实验内容以及分析

两个版本V1、V2:无注意力机制的为V1

在未见点云上进行测试:

image-20200714180617238

在未见类别的点云上进行测试:

在这里插入图片描述

鲁棒性测试:使用有噪声的输入

在这里插入图片描述

速度测试:ICP很快,可以看出其复杂度不高于线性,DCP在4096之前都很快,但是到4096突然变慢了10倍,复杂度应该高于线性。

image-20200714180749728

PointNet 与 DGCNN的对比:选择DGRCNN没错

在这里插入图片描述

MLP与SVD分解的对比: MLP是一个通用逼近器,因此与SVD做了一下对比:选择SVD没错

image-20200714181206930

PointNet作者指出特征维度对模型的精度是有很大影响的,越大越好,但是

高于阈值之后就影响甚微了。实验结果显示1024维优于512维度。这里作者并没有找到最优阈值,个人觉得用grid search找到最佳阈值然后再测试精度可能更好?

image-20200714181358783

最后作者提使用ICP作为后优化策略,即 使用DCP+ICP 可以得到更好的结果,但是只给出了示意图没有误差结果。

在这里插入图片描述

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值