Roreg:Pairwise Point Cloud Registration with Oriented Descriptors and Local Rotations 论文解析
Roreg:Pairwise Point Cloud Registration with Oriented Descriptors and Local Rotations 论文解析(先看原文 跳转链接)
1、简介
一个被广泛接受的常见配准流程包含了4个组成部分:feature detection, feature
description, feature matching, and transformation estimation(特征检测、特征描述、特征匹配、变换估计):
- 特征检测:检测重复、可匹配的关键点
- 特征描述:从检测出的关键点中抽取不同的描述子
- 特征匹配:匹配抽取的不同描述子,从而去找到可靠的对应点
- 变换估计:根据对应点去找到一个严格的变换矩阵,从而实现点云的配准
面临的问题:
- 特征检测:关键点的定义是模糊的,不能为学习检测器提供明确的指导
- 特征描述:基于学习的描述子需要对未知的旋转具有不变性,这通常依赖外部局部参考框架(LRF)和手工设计的旋转不变属性,这些属性在存在噪声或密度变化的情况下既不稳定也不具有区分性
- 特征匹配:重复的模式和点密度的变化仍然使得匹配器难以找到正确的对应关系
- 变换估计:从众多错误的对应点中,找到正确的对应点用于匹配非常困难
本文认为,通过利用所谓的定向描述符(oriented descriptors)和局部旋转(local rotations),可以解决上述所有挑战。
定向描述符额外编码了局部方向信息,并且通过对齐两个定向局部描述符可以估计局部旋转;通过利用局部旋转可以仅仅使用一组对应点,便能计算最终的变换矩阵。现有的配准方法大多没有局部旋转的信息,对于获取的对应点知道他们应当重合,却不知道是否需要旋转,想要获取两片点云的旋转和平移量,至少需要三组正确的对应点。
难点:如何设计定向描述符;如何在配准流程中利用局部旋转?
- 设计定向描述符(RoReg-Desc): { ( F p i , d p i ) ∣ p i ∈ P } \{(F_{pi},d_{pi})|p_i\in P\} {(Fpi,dpi)∣pi∈P}
旋转等变(rotation-equivariance)
F
p
i
F_{pi}
Fpi:在点云配准中,等变性指的是当输入点云经过某种变换(例如旋转、平移)后,相应的配准结果也会相应地进行相同的变换。换句话说,等变性意味着算法能够保持相对位置和几何关系的一致性,不受变换的影响。用于保存方向信息。
旋转不变(rotation-invariance)
d
p
i
d_{pi}
dpi:在点云配准中,不变性指的是算法在处理点云时对某种变换保持不变。不变性意味着算法能够忽略输入点云的某些变化,例如旋转、平移或尺度变化,而仍能够得到相同的配准结果。用于点云匹配。
- 在配准流程中利用局部旋转
本文的创新:局部旋转估计流程图
给定两片需要配准的点云P、Q,我们的目标是找到他们两者之间的变换矩阵,将他们对齐到同一坐标系下。首先抽取两片点云的定向描述符(RoReg-Desc): { ( F p i , d p i ) ∣ p i ∈ P } \{(F_{pi},d_{pi})|p_i\in P\} {(Fpi,dpi)∣pi∈P}、 { ( F q i , d q i ) ∣ q i ∈ Q } \{(F_{qi},d_{qi})|q_i\in Q\} {(Fqi,dqi)∣qi∈Q}。再从P、Q中根据选取检测得分高的点云作为点云的关键点 P k P_k Pk、 Q k Q_k Qk;使用旋转相干匹配器从关键点 P k P_k Pk、 Q k Q_k Qk中找到对应点 { ( p k , q k ) ∣ p k ∈ P k , q k ∈ Q k } \{(p_k,q_k)|p_k \in P_k, q_k \in Q_k\} {(pk,qk)∣pk∈Pk,qk∈Qk},最后使用OSE-RANSAC计算变换矩阵。
2、框架组成
2.1 工具介绍
- 二十面群组(G):用于映射特征图
顶点:5次x12点=60种旋转(72度)
面中心:3次20面=60种旋转(120度)
边中点:2次x30边=60种旋转(180度)
为在二十面群组上定义卷积神经层,显然能够从60个不同的旋转视角提取点云的特征,但本文选取13个角度,定义一个大小为13的领域集合H(三维的卷积核)。 - 局部旋转估计
从正确匹配的点对(p,q)中估计局部旋转,目标是从两个匹配的RoReg - descs的旋转等变部分(Fp, Fq)中估计局部旋转R(p,q)。这种局部旋转估计将用于后续的检测、匹配和变换估计
-
粗旋转
遍历{g∈G}(二十面体群组)中的所有60个旋转,找到最小L2距离的旋转矩阵,并选择它作为粗旋转,计算公式如下:
R c = a r g m i n ∣ ∣ F q − P q ∘ F p ∣ ∣ 2 R_c = argmin||F_q - P_q \circ F_p||_2 Rc=argmin∣∣Fq−Pq∘Fp∣∣2 -
精旋转
单次旋转的幅度间隔太大,不能进行连续的精细化旋转,不能通过寻找最佳排列直接得到精确的旋转我们使用回归器对旋转残差 R ϵ R_\epsilon Rϵ进行回归。
Q u a t ( R ϵ ) = η ( [ F q ; P R c ∘ F p ] ) Quat(R_\epsilon) = \eta([F_q;P_{R_c} \circ F_p]) Quat(Rϵ)=η([Fq;PRc∘Fp])
群G是SO(3)的离散化(单次旋转的幅度间隔太大,不能进行连续的精细化旋转),我们不能通过寻找最佳排列直接得到精确的旋转,使用回归器对旋转残差进行回归,对p、q两个的特征F进行通道上的拼接。对p点特征进行粗旋转的约束后,使用先前构造的大小为13的二十面体卷积核,进行三次卷积后,获取到一个单特征向量,将其输入到多层感知机中,计算出的四元数作为旋转残差。
2.2 特征描述:从检测出的关键点中抽取不同的描述子
给定点云P,我们的目标是在每个点
p
∈
P
p \in P
p∈P上提取一个RoReg-Desc:
{
(
F
p
i
,
d
p
i
)
∣
p
i
∈
P
}
\{(F_{pi},d_{pi})|p_i \in P\}
{(Fpi,dpi)∣pi∈P},即提取每个点的旋转等变部分
F
∈
R
60
×
n
F \in R^{60 \times n}
F∈R60×n 和旋转不变部分
d
∈
R
n
d \in R^n
d∈Rn,在指定的半径中,使用两个顺序的模组(群特征提取器、群特征嵌入器)完成这项工作。
- 群特征提取器:将提取的点云块导入二十面群组中,进行60次不同的旋转,每次使用FCGF全卷积神经网络(也可使用PointNet、D3Feats,但在测试数据集上的效率和效果没有FCGF好)提取点云骨干,从而得到了60维度一个二十面体特征图 f 0 ∈ R 60 × n 0 f_0 \in R^{60 \times n_0} f0∈R60×n0
- 群组特征嵌入器:通过三层卷积神经网络,卷积核为:
[
f
l
+
1
(
g
)
]
j
=
∑
1
13
w
j
,
i
T
f
l
(
h
i
g
)
+
b
j
[f_{l+1}(g)]_j = \sum_1^{13}w_{j,i}^Tf_l(h_ig)+b_j
[fl+1(g)]j=∑113wj,iTfl(hig)+bj
在F上沿行方向进行平均池化,便能计算出旋转不变部分
d
∈
R
n
L
d \in R^{nL}
d∈RnL从而能够构造出定向描述符:
{
(
F
p
i
,
d
p
i
)
∣
p
i
∈
P
}
\{(F_{pi},d_{pi})|p_i\in P\}
{(Fpi,dpi)∣pi∈P}
2.3 特征检测:检测重复、可匹配的关键点
检测的目的是从点云中选择一组可重复匹配的关键点,用于后续的特征匹配和变换估计。给定一个点云,我们首先按照提取每个点上RoReg-Descs。然后,我们从RoReg-Descs中预测检测分数,并选择分数较大的点作为关键点。对于一个P点云中的点,我们使用该点的RoReg-Descs F,计算每个点p∈P上的检测分数:
s
p
=
S
i
g
m
o
i
d
(
∅
(
F
p
)
)
s_p = Sigmoid(\varnothing(F_p))
sp=Sigmoid(∅(Fp))
其中
∅
\varnothing
∅是一个网络,在
F
p
F_p
Fp上应用几个组卷积层和MLPs来回归检测分数。检测的关键问题是如何定义关键点并构造合适的检测损失函数来训练检测器网络的
∅
\varnothing
∅
- 我们将关键点定义为不仅可以建立正确的对应关系,而且可以从其方向估计正确的局部旋转的点。
- 基于关键点定义,我们构造一个旋转引导检测损失函数如下:
抽取两片点云的定向描述符(RoReg-Desc): { ( F p i , d p i ) ∣ p i ∈ P } \{(F_{pi},d_{pi})|p_i\in P\} {(Fpi,dpi)∣pi∈P}、 { ( F q i , d q i ) ∣ q i ∈ Q } \{(F_{qi},d_{qi})|q_i\in Q\} {(Fqi,dqi)∣qi∈Q},对于每个点 p i pi pi,我们找到一个匹配的点 q i = a r g m i n q ∈ Q ∣ ∣ d q − d p i ∣ ∣ 2 qi = argmin_{q \in Q}||d_q - d_{pi}||_2 qi=argminq∈Q∣∣dq−dpi∣∣2,形成匹配的点云组 ( p i , q i ) (pi, qi) (pi,qi),使用局部旋转估计获得一个局部旋转 R ( p i , q i ) R(pi, qi) R(pi,qi),转引导检测损失函数如下定义:
l s = ∑ i s p i + s q i ∑ k s p k + s q k Δ ( R p i , q i , R g t , p i , q i ) l_s = \sum_i\frac{s_{pi}+s_{qi}}{\sum_k s_{pk} + s_{qk}} \Delta (R_{pi,qi},R_{gt},pi,qi) ls=i∑∑kspk+sqkspi+sqiΔ(Rpi,qi,Rgt,pi,qi)
- 提出的旋转引导损失函数检查了估计旋转的正确性。这样的旋转检查可以防止选择方向不明确的点(如平面点和线点)被选作关键点;
- 先前诸多算法随机抽取点,从中选取关键点。使用评价得分的方式选取关键点,避免了从负面样本选取关键点中可能,使用特征检测有很好的收敛性。
2.4 特征匹配:匹配抽取的不同描述子,从而去找到可靠的对应点
给定检测到的关键点Ps、Qs及其RoReg – descs,旋转相干匹配器的目标是估计一系列对应点{(pk, qk)}和对应点的匹配分数{Sk}。旋转相干匹配器的关键设计是基于正确对应估计的局部旋转是相干的,而错误对应估计的局部旋转是随机分布的。因此,我们在匹配器中加入了局部旋转相干性,以提高估计对应的准确性。
- 旋转引导注意块(M层)
旋转引导的注意块处理输入特征有两个分支:顶部分支由交叉注意层和自注意层组成,它们交叉和自身交换点云信息;底部分支由旋转估计层和旋转相干层实现,负责估计局部旋转并提取局部旋转相干性进行匹配。
- 旋转估计层:估计两个特征之间的旋转兼容性,计算出一个表示两者在局部方向旋转的特征向量
E
p
i
(
m
)
^
∈
R
60
\hat{E_{pi}^{(m)}} \in R^{60}
Epi(m)^∈R60
单层的旋转引导注意力块,将一对关键点的m维度描述子输入,下层的旋转估计层,先对旋转不变部分进行假定的匹配;二者的旋转等变部分保存两者的方向信息,将他们聚合为一个特征向量 E p i ( m ) ^ ∈ R 60 \hat{E_{pi}^{(m)}} \in R^{60} Epi(m)^∈R60,特征向量的值表示两点在60个方向的对齐后的距离,所以值越大,两者旋转兼容就越差。 - 旋转相干层:旋转估计层处理,Ps点云中每一个点都有旋转特征向量,后面则需要提取不同点之间的旋转相干性特征
使用多上下文归一化层进行归一化,旋转相干特征通常集中在平均特征向量周围,而非相干特征则分散在远离平均特征向量的地方。通过对所有点的局部旋转进行特征归一化,学习局部旋转相干性。获得该点的旋转相干特征: E p i ( m ) = C o n t e x t N o r m ( E p i ( m ) ^ ) E_{pi}^{(m)}=ContextNorm(\hat{E_{pi}^{(m)}}) Epi(m)=ContextNorm(Epi(m)^)
顶部分支由交叉注意层和自注意层组成:现有的深度学习配准方法采用注意层更新不变描述符进行匹配,我们则在次基础上将点对的旋转相干性特征附加到自关注层的值矩阵中。处理后的特征描述子维度加1,并输入到下一层旋转引导注意力块,经过M次处理,则获取到M维度的描述子。
- 最优传输层
旋转引导注意块会把特征点旋转相干特征与自身的旋转描述子叠加,形成一个特征矩阵C,使用Sinkhorn算法计算匹配得分矩阵S,选取得分前50%的点对,作为最终匹配的对应点。
2.5 变换估计:根据对应点去找到一个严格的变换矩阵,从而实现点云的配准
标准的RANSAC算法中,会随机选择一个对应三元组来计算点云配准的变换。为确保配准变换的精度,会选取随机大量的内点。假设有n组对应点,将会有不少于n × (n − 1) × (n − 2)/6 个可行的三元组被用作计算时间复杂度为
n
3
n^3
n3,由于对应点间有局部旋转估计,所以我们可以使用一组对应点,直接用
R
^
=
R
k
\hat{R}=R_k
R^=Rk、
t
^
=
q
k
−
R
p
k
^
\hat{t} = qk - \hat{R_{pk}}
t^=qk−Rpk^来计算变换假设
(
R
^
,
t
^
)
(\hat{R},\hat{t})
(R^,t^);最后使用采用加权Procrustes算法,对预测的SE(3)变换(R, t)进行细化:
(
R
,
t
)
=
a
r
g
m
i
n
R
,
t
∈
S
E
(
3
)
∑
k
∈
l
n
l
i
e
r
S
k
∣
∣
q
k
−
R
p
k
−
t
∣
∣
2
(R,t) = argmin_{R,t \in SE(3)} \sum_{k \in lnlier}S_k||qk - R_{pk} - t||_2
(R,t)=argminR,t∈SE(3)k∈lnlier∑Sk∣∣qk−Rpk−t∣∣2