零、概要
- 论文: 3DRegNet: A Deep Neural Network for 3D Point Registration
- tag:
CVPR 2020
;Registration
- 代码: https://github.com/3DVisionISR/3DRegNet
- 作者: G. Dias Pais, Srikumar Ramalingam, Venu Madhav Govindu, Jacinto C. Nascimento, Rama Chellappa, and Pedro Miraldo
- 机构: Instituto Superior T´ecnico, Lisboa; Google Research, NY; Indian Institute of Science, Bengaluru; University of Maryland, College Park
- 笔者整理了一个最近几年150多篇点云的论文列表,欢迎大家一块学习交流。
文章提出了一种用于新的用于3D点云配准的深度学习架构 - 3DRegNet。给定一组3D点对应关系,我们构建一个深度神经网络来解决如下两个挑战: (i)把点对应关系分类成inliers/outliers和(ii)回归(用于把3D点云对齐到相同参考坐标系)运动参数。关于回归,我们提出两种替代方法: (i)深度神经网络配置和(ii)用SVD估计变换的Procrustes方法。与有竞争性的baselines相比,文章中的correspondences-based的方法实现了更高的加速。作者进一步提出使用一个精化(refinement)网络(它包括一个较小的3DRegNet)来提高配准的准确性。在两个具有挑战性的数据集上进行大量实验表明,作者的方法优于其他方法并获得了最先进的结果。
一、论文的出发点和贡献
3D配准具有广泛的视觉、机器人和医学应用,是几何计算机视觉中经典和基础的问题。在3D点云配准中,往往是在有噪声(noisy)、异常(outlier)点对应关系的情况下计算两个点云的6自由度的运动参数。标准算法是使用RANSAC和ICP算法。本论文的重点是如何有效地处理异常(outlier)点对应关系;并且希望配准速度加速。
论文主要的贡献在于提出了一种新的深度神经网络架构来解决三维点云的配准问题,并有可能使用一个精细化网络来对结果进行微调。在实现显著加速的同时,作者的方法实现了state-of-the-art的性能。本文提出的架构包括两个子块: 分类和配准。前者的输入是一组来自两个点云的带有噪声的点对应关系,对每个点对应关系产生一个(置信度)权重参数,来表征当前的点对应关系是一个inlier还是outlier。后者直接产生6自由度的运动参数。
二、论文的方法
给定N个3D点对应关系 { ( p i , q i ) } i = 1 N \lbrace (p_i, q_i) \rbrace_{i=1}^N {(pi,qi)}i=1N, p i ∈ R 3 , q i ∈ R 3 p_i \in \mathbb R^3, q_i \in \mathbb R^3 pi∈R3,qi∈R3分别是第一个和第二个点云中的点,目标是计算变换参数(平移矩阵 R ∈ S O ( 3 ) R \in \mathbb {SO(3)} R∈SO(3)和平移向量 t ∈ R 3 t \in \mathbb R^3 t∈R3):
R ∗ , t ∗ = arg min R ∈ S O ( 3 ) , t ∈ t 3 Σ n = 1 N ρ ( q n , R p n + t ) R^*, t^* = \arg \min_{R \in \mathbb SO(3), t \in t^3} \Sigma_{n=1}^N\rho(\text{q}_n, R\text{p}_n + t) R∗,t∗=argR∈SO(3),t∈t3minΣn=1Nρ(qn,Rpn+t)
ρ ( a , b ) \rho(a, b) ρ(a,b)是某一种距离度量。
3DRegNet架构如Figure2所示,包含分类和配准模块。对于配准模块,可以使用DNN或者可微分的Procrustes。
网络的输入是N个点对应关系,输出是N + M + 3维向量。前N个表示权重向量 W : = { w i } i = 1 N W := \lbrace w_i \rbrace_{i=1}^N W:={wi}i=1N, w i ∈ [ 0 , 1 ) w_i \in [0, 1) wi∈[0,1)表示第 i i i个对应对 ( p i , q i ) (p_i, q_i) (pi,qi)是inlier的置信度。通过比较 w i w_i wi和阈值 τ \tau τ,我们可以把输入的点对应关系分类成inliers和outliers。接下来M个是旋转参数,即 ( v 1 , v 2 , . . . , v M ) (v_1, v_2, ..., v_M) (v1,v2,...,vM)。尽管三维旋转有3个自由度,但可能存在不同的参数化:如四元数和旋转矩阵等。剩下的三个参数是平移参数 ( t 1 , t 2 , t 3 ) (t_1, t_2, t_3) (t1,t2,t3)。
2.1 分类模块
这个模块包括三个部分: 1 x 1的卷积层 + C个ResNet层 + 1 x 1卷积层。 在处理B x N x 6的输入时,作者是把变换成4维的数据,即(B, 1, N, 6)。
- 第一个卷积层对初始的特征维度进行学习,使其变成维度为(B, 1, N, 128)的数据。
- 接下来的C个ResNet模块,每个网络的数据维度均是(B, 1, N, 128)的,第i个ResNet模块的输出是第i+1个ResNet模块的输入。
- 最后一个卷积层,将(B, 1, N, 128) 变为 (B, 1, N, 1),而后经过一个tanh(双曲正切)函数和ReLU激活函数,得到的每一个点对应关系的权重 w ∈ [ 0 , 1 ] w \in [0, 1] w∈[0,1], 维度为(B, N)。
2.2 配准模块
这个模块的输入来自分类模块的第一个卷积层和C各ResNet模块的输出,他们的输出都是相同的维度(B, 1, N, 128),在axis=2的维度上进行池化操作,得到(B, 1, 1, 128)。
- 将上述C+1个模块的输出进行池化并在axis维度上进行concat,输出(B, 1, C+1, 128)维度的特征。
- 将(B, 1, C+1, 128)经过一个kernel是3 x 3, stride是1 x 2的卷积层,输出(B, 1, D, 8)的特征 -> reshape成(B, D*8)。
- 经过1或2个全连接层(256 -> 256 -> M + 3),得到(B, M+3)的向量。前面M个表示旋转信息,后面的3个值表示平移信息。
另外一种配准模块是过滤掉outliers,通过SVD分解求解。
2.3 损失函数
损失函数来自分类模块和配准模块。
-
分类损失
分类损失是一个交叉熵损失:
L c k = 1 N Σ i = 1 N γ i k H ( y i k , σ ( o i k ) ) L_c^k = \frac{1}{N}\Sigma_{i=1}^N\gamma_i^kH(y_i^k, \sigma(o_i^k)) Lck=N1Σi=1NγikH(yik,σ(oik))k k k表示第 k k k个待配准的pair。 L c k L_c^k Lck表示第k个待配准pair的分类损失。 o i k o_i^k oik是分类模块中在经过tanh和ReLU函数之前的输出,维度是(N, 1), σ \sigma σ表示sigmoid激活函数。 H ( . . , . . ) H(..,..) H(..,..)表示交叉熵损失函数, y i k y_i^k yik表示ground truth,第 i i i个点对应关系是inlier或者outlier。 γ i k \gamma_i^k γik用于平衡第 k k k个pair的不同类别数目的分类损失。
-
配准损失
L r k = 1 N Σ i = 1 N ρ ( q i k , R k p i k + t k ) L_r^k = \frac{1}{N}\Sigma_{i=1}^N \rho(q_i^k, R^kp_i^k + t^k) Lrk=N1Σi=1Nρ(qik,Rkpik+tk)k k k表示第 k k k个待配准的pair, L r k L_r^k Lrk表示第 k k k个待配准pair的配准损失, ρ \rho ρ表示距离度量函数,如L1、L2等。
-
Total 损失
L = α ⋅ 1 K Σ k = 1 K L c k + β ⋅ 1 K Σ k = 1 K L r k L = \alpha \cdot \frac{1}{K}\Sigma_{k=1}^K L_c^k + \beta \cdot \frac{1}{K}\Sigma_{k=1}^K L_r^k L=α⋅K1Σk=1KLck+β⋅K1Σk=1KLrk
α \alpha α和 β \beta β是超参数。
2.4 细化(Refinement)网络
作者提出的架构包括两个3DRegNet,其中第二个用于回归优化(refinement)。第一个3DRegNet提供一个粗略的估计,用于比较大的旋转和平移量。第二个较小的3DRegNet用于优化,估计较小的变换。网络架构如图Figure3(a)所示。
设第一、二次的旋转矩阵和平移向量分别是 R 1 , t 1 , R 2 , t 2 R^1, t^1, R^2, t^2 R1,t1,R2,t2,输入为 X 0 X_0 X0,
- 第一次旋转平移: X 1 = R 1 X 0 + t 1 X_1 = R^1X_0 + t^1 X1=R1X0+t1
- 第二次旋转平移: X 2 = R 2 X 1 + t 2 = R 2 ( R 1 X 0 + t 1 ) + t 2 = R 2 R 1 X 0 + R 2 t 1 + t 2 X_2 = R^2X_1 + t^2 = R^2(R^1X_0 + t^1) + t^2 = R^2R^1X_0 + R^2t^1 + t^2 X2=R2X1+t2=R2(R1X0+t1)+t2=R2R1X0+R2t1+t2
因此,经过两次的旋转、平移, R = R 2 R 1 , t = R 2 t 1 + t 2 R = R^2R^1, t = R^2t^1 + t^2 R=R2R1,t=R2t1+t2。
需要注意的是,在第二个3DRegNet网络中,点对应关系变成为:
{ ( p i 1 , q i 1 ) } = { ( w i 1 ( R 1 p i + t 1 ) , w i 1 q i ) } \lbrace (p_i^1, q_i^1) \rbrace = \lbrace (w_i^1(R^1p_i + t^1), w_i^1q_i) \rbrace {(pi1,qi1)}={(wi1(R1pi+t1),wi1qi)}
这强制第二个网络获得较小的变换,来校正第一个网络的结果。此时损失函数是什么样的呢?
L = α ⋅ 1 K Σ k = 1 K 1 2 Σ r = 1 2 L c k , r + β ⋅ 1 K Σ k = 1 K 1 2 Σ r = 1 2 L r k , r L = \alpha \cdot \frac{1}{K}\Sigma_{k=1}^K\frac{1}{2}\Sigma_{r=1}^2L_c^{k, r} + \beta \cdot \frac{1}{K}\Sigma_{k=1}^K\frac{1}{2}\Sigma_{r=1}^2L_r^{k, r} L=α⋅K1Σk=1K21Σr=12Lck,r+β⋅K1Σk=1K21Σr=12Lrk,r
两个阶段的分类的监督信号比较好理解,都是一样的。
两个阶段的配准的监督信号是不一样的,具体怎样的我没有细看代码,但感觉可以这样设计: 第一个阶段的监督信号是 R gt R_{\text{gt}} Rgt和 t gt t_{\text{gt}} tgt,第二个阶段的监督信号是 R gt ( R 1 ) − 1 R_{\text{gt}}(R^1)^{-1} Rgt(R1)−1和 t gt − R 2 t 1 t_{\text{gt}} - R^2t^1 tgt−R2t1。
三、论文的实验
-
数据集
- ICL-NUIM: 4个场景, 25000个不同的pairs。
- SUN3D: 13个随机选择的场景, 37000个不同的pairs。
对于每一对pair,作者使用FPFH,提取大约3000个点对应关系。根据变换的GroudtTruth信息,通过比较距离与人工设置的阈值,将映射关系标记成inliers/outliers。选择合适的阈值使得outliers大约是全部映射点对的50%。对于ICL-NUIM,作者选择使用70%的pairs训练,30%用于测试。对于SUN3D,作者选择选择10个场景用于训练,3个场景用于测试。
-
训练
第一个3DRegNet的C=8, 第二个3DRegNet的C=4。batch size设置成16,训练1000个epoches。 α = 0.5 , β = 1 0 − 3 \alpha = 0.5, \beta=10^{-3} α=0.5,β=10−3。学习率设置为 1 0 − 4 10^{-4} 10−4,使用Adam优化器。
-
数据增强
为了在unseen的旋转点云上具有泛化能力,作者使用随机旋转来扩充训练数据集。作者采用了Curriculum Learning(CL)相关的算法来做数据增强。
-
实验结果
-
评估指标:
- 旋转: δ ( R , R GT ) = arc cos ( trace ( R − 1 R GT ) − 1 2 ) \delta(R, R_{\text{GT}}) = \text{arc cos}(\frac{\text{trace}(R^{-1}R_{\text{GT}}) - 1}{2}) δ(R,RGT)=arc cos(2trace(R−1RGT)−1)
- 平移: δ ( t , t GT ) = ∣ ∣ t − t GT ∣ ∣ \delta(t, t_{\text{GT}}) = ||t - t_{\text{GT}}|| δ(t,tGT)=∣∣t−tGT∣∣
- 分类: 分类误差, w i > = 0.5 − > w i = 1 ; w i < 0.5 − > w i = 0 w_i >= 0.5 -> w_i = 1; w_i < 0.5 -> w_i = 0 wi>=0.5−>wi=1;wi<0.5−>wi=0
-
距离度量
作者比较了L2-norm、L1-norm、Weighted L2-norm和German-McClure距离,实验结果如Table 1所示,L1-norm的效果最好。
-
旋转矩阵R的参数
作者比较了旋转的三种不同表示的性能: 最小李代数(minimal Lie algebra, 3个参数),四元数(4个参数), 旋转矩阵(9个参数),实验结果如Table 2所示,李代数的效果最好。
-
基于DNN的配准 / Procrustes.
作者比较了基于DNN和Procrustes的配准,实验性能如Table 2所示,基于DNN的方法在配准和分类方面均优于基于Procrustes方面。
-
点对应关系数量的敏感性
作者比较了pair中对应点对的数量,从30000个点的10%-100%,实验结果如Table 3所示,回归精度随着点对数量的减少而降低,分类精度也有些许影响。
-
数据增强
如Figure 4所示,数据增强随着旋转角度增大,明显提升了配准和分类精度。
-
3DRegNet细化
作者就第二个3DRegNet对配准性能的影响进行了实验,实验结果如Table 4所示,配准性能略有提高,分类准确度降低了2个点,但从Figure3也可以看到,这并没有影响最终的配准。
-
与其他网络的比较
作者比较了3DRegNet与FGR, ICP, RANSAC的性能,实验结果如Table 5所示。同时,作者比较了FGR + ICP, 3DRegNet + ICP算法。Table 5中U表示的是a
least square non-linear Umeyama refinement technique(Least-squares estimation of transformation parameters between two point patterns, 发表于TPAMI 1991)。作者另外分析了Cumulative distribution function,来证明3DRegNet的优势。
-
Unseen 场景的性能
Table 5(b)表示在unseen场景的各个不同算法的性能。
-
四、对论文的想法
- 优点
- 3DRegNet + 3DRegNet refinement,两个网络的思想感觉是个不错的思路。
- 分类损失 + 配准损失: 两个监督信息,在很多其它基于学习的配准网络中只有配准损失。
- 缺点
- 论文并没有和其它基于深度学习的配准算法进行比较
- 网络的输入是点对应关系(correspondences),应用起来不够简洁。