零、概要
- 论文: D3Feat: Joint Learning of Dense Detection and Description of 3D Local Features
- tag:
CVPR 2020
;keypoints
,registration
- 代码: https://github.com/XuyangBai/D3Feat
- 作者: Xuyang Bai, Zixin Luo, Lei Zhou, Hongbo Fu, Long Quan, Chiew-Lan Tai
- 机构: Hong Kong University of Science and Technology, City University of Hong Kong
- 笔者整理了一个最近几年150多篇点云的论文列表,欢迎大家一块学习交流。
0.0 摘要
一个成功的点云配准通常依赖于通过有区分性的3D局部特征建立鲁棒的稀疏匹配。尽管基于学习的三维特征描述子发展迅速,但三维特征检测器却很少受到关注,更没有考虑到这两个任务的联合学习。在这篇论文中,作者利用一个3D全卷积网络来处理三维点云,并提出一个新颖且实用的学习机制,可以密集地预测每个3D点的检测分数(detection score)和特征描述。特别地,作者提出了一种克服3D点云固有密度变化的关键点选择策略,并进一步提出了在训练过程中有特征匹配结果引导的自监督检测器损失函数。最后,D3Feat在indoor和outdoor数据集上均获得了SOTA结果,在ETH数据集上显示了其强大的泛化能力。在实际应用中,作者表明,通过采用可靠的特征检测器,只需对少量特征进行采样,就可以实现精确、快扫的点云对齐(alignment)。
一、论文的出发点和贡献
点云配准的目的是寻找两个具有重叠(overlap)点云直接最佳变换,这是SLAM等应用的基本任务。而局部关键点的检测和描述是获得鲁棒点云对齐结果的两个关键。
对于关键点检测,随机选择一组点进行特征描述,是一个选择。这会带来以下几个问题: (1)随机选择的点可能位于非显著区域(如平面等)或者属于噪声点,影响匹配结果; (2)为了获得完整的场景覆盖,需要对随机点进行过采样,这会大大降低整个匹配过程的效率。作者认为,少量的关键点就足以成功地对齐点云,而良好的关键点点位可以进一步提高配准精度。
然而,基于学习的三维关键点检测器在以往的研究中并没有得到足够的重视。3DFeat-Net[ECCV 2018]预测了patch-wise的检测分数,只考虑了有限的空间上下文,并且在实践中对整个点云进行dense预测时并不使用。USIP[ICCV 2019]提出了无监督方法来学习关键点检测,但其无法对检测分数进行密集预测;同时,USIP没有检测器和描述器的联合训练,产生的检测器可能与描述符的能力不匹配,从而限制了学习到的3D特征。
因此,作者提出了D3Feat(Dense Detection and Description of 3D local Features),实现特征检测器和特征描述子的联合学习。作者的主要贡献:
- 基于全卷积网络,采用联合学习框架实现3D局部特征检测和描述.
- 提出了一种新的密度不变(density-invariant)的关键点选择策略,这是获得3D点云可重复关键点的重要策略。
- 提出了一种自监督的检测器损失,该方法利用训练过程中的特征匹配结果进行有意义的指导,这保证了描述子和检测器的收敛性。
二、论文的方法
给定一组点集 P ∈ R N × 3 P \in \mathbb R^{N \times 3} P∈RN×3和对应的一组特征 F i n ∈ R N × D i n F_{in} \in \mathbb R^{N \times D_{in}} Fin∈RN×Din,令 x i x_i xi和 f i f_i fi分别表示P中的第 i i i个点和 F i n F_{in} Fin中的第 i i i个特征。
2.1 密集特征描述子(Dense Feature Description)
D3Feat的骨干网络是全卷积网络,如Figure 1(Left)所示,它是一种U-Net式的网络架构,其中的卷积层是采用的normalized的KPConv(kernel point convolution):
( F i n ∗ g ) = 1 ∣ N x ∣ Σ x i ∈ N x g ( x i − x ) f i (F_{in} * g) = \frac{1}{|N_x|}\Sigma_{x_i \in N_x}g(x_i - x)f_i (Fin∗g)=∣Nx∣1Σxi∈Nxg(xi−x)fi
经过上述全卷积网络,输出学习到的特征 F ∈ R N × c F \in \mathbb R^{N \times c} F∈RN×c, c c c是特征向量的维度,可以看到网络输出了每个点的特征。最终的特征采用L2归一化到了单位长度。
2.2 密集关键点检测(Dense Keypoint Detection)
前面已经提取了每个点的特征,这里面对的问题是如何利用学习到的特征来刻画关键点 ?
作者借鉴D2-Net(CVPR 2019)中的思想,定义3D点云中关键点。对于点 x i x_i xi,首先在特征通道(channel)方向上寻找最大值,记其索引为k;接着和点 x i x_i xi的邻域内的其他点 x j ∈ N x i x_j \in N_{x_i} xj∈Nxi的特征在第k维上进行比较,如果第 i i i个点 x i x_i xi的第k个特征 F i , k F_{i, k} Fi,k大于邻域内其它点的第k个特征 F j , k , j ∈ x j F_{j, k}, j \in x_j Fj,k,j∈xj,则表示这个点是关键点。通俗地讲,关键点就是特征在通道维度和空间维度都是最大值(可能不是那么准确)的点。
为了和论文中的符号对应,定义 D k = F : k , D k ∈ R N , k = 1 , 2 , . . . , c D^k = F_{:k}, D^k \in \mathbb R^N, k = 1, 2, ..., c Dk=F:k,Dk∈RN,k=1,2,...,c, 其中 F : k F_{:k} F:k表示 F ∈ R N × c F \in \mathbb R^{N \times c} F∈RN×c的第 k k k列,那么
x i x_i xi是关键点 <=> k = arg max t D i t k = \arg \max_{t} D_i^t k=argmaxtDit & i = arg max j ∈ N x I D j k i = \arg \max_{j \in N_{x_I}}D_j^k i=argmaxj∈NxIDjk
在网络的预测阶段,采用了这种方式选择关键点。在网络的训练阶段,作者没有直接采用上述方式, 而是定义saliency score和channel max score, 如Figure 1(right)。
作者设计了一种密度不变性(density-invariant)的显著性分数(saliency score):
α i k = l n ( 1 + exp ( D i k − 1 N x i Σ x j ∈ N x i D j k ) ) \alpha_i^k = ln(1 + \text{exp}(D_i^k - \frac{1}{N_{x_i}}\Sigma_{x_j \in N_{x_i}}D_j^k)) αik=ln(1+exp(Dik−Nxi1Σxj∈NxiDjk))
通过计算当前点 x i x_i xi的特征与局部邻域的平均特征之间的差值来得到当前点 x i x_i xi的显著性分数,而且 α i k \alpha_i^k αik表示第 i i i个点第 k k k个特征的显著性。
对于点 x i x_i xi,选择最有代表性的通道,作者设计了channel max score:
β i k = D i k max t D i t \beta_i^k = \frac{D_i^k}{\max_t D_i^t} βik=maxtDitDik
最终,关键点检测得分为:
s i = max k α i k β i k s_i = \max_k\alpha_i^k\beta_i^k si=kmaxαikβik
这样就获得了每个点表示关键点的分数,论文中选择具有比较高分数的点作为关键点。
2.3 训练
到这里,已经说明了如何产生特征描述子,以及如何使用特征描述子来刻画关键点分数。但是,如何训练呢?
设计合适的监督信号是特征描述子和关键点检测器联合学习的关键。作者使用了度量学习loss来监督描述子,使用自监督loss来监督特征点检测器。
给定两个具有overlap的点云P和Q,和n个pairs的对应点(correspondence points)(论文中设置n=64)。假设 ( A i , B i ) (A_i, B_i) (Ai,Bi)表示第 i i i个对应点对, d A i d_{A_i} dAi和 d B i d_{B_i} dBi表示对应的特征, s A i s_{A_i} sAi和 s B i s_{B_i} sBi表示对应的关键点score。
-
特征描述子损失(Descriptor loss)
特征描述子损失是一个constrastive loss,
d p o s ( i ) = ∣ ∣ d A i − d B i ∣ ∣ 2 d_{pos}(i) = ||d_{A_i} - d_{B_i}||_2 dpos(i)=∣∣dAi−dBi∣∣2
d n e g ( i ) = min { ∣ ∣ d A i − d B j ∣ ∣ 2 , s . t . ∣ ∣ B j − B i ∣ ∣ 2 < R } d_{neg}(i) = \min \lbrace||d_{A_i} - d_{B_j}||_2, s.t. ||B_j - B_i||_2 < R \rbrace dneg(i)=min{∣∣dAi−dBj∣∣2,s.t.∣∣Bj−Bi∣∣2<R}
这里R是安全半径, B j B_j Bj是安全半径之外的hardest的负样本。
Contrastive margin loss定义为:
L d e s c = 1 n Σ i [ max ( 0 , d p o s ( i ) − M p o s ) + max ( 0 , M n e g − d n e g ( i ) ) ] L_{desc} = \frac{1}{n}\Sigma_i[\max(0, d_{pos}(i) - M_{pos}) + \max(0, M_{neg} - d_{neg}(i))] Ldesc=n1Σi[max(0,dpos(i)−Mpos)+max(0,Mneg−dneg(i))]
M p o s M_{pos} Mpos是positive pairs的margin, M n e g M_{neg} Mneg是negative pairs的margin。论文中 M p o s = 0.1 , M n e g = 1.4 M_{pos} = 0.1, M_{neg} = 1.4 Mpos=0.1,Mneg=1.4
-
检测器损失(Detector loss)
L d e t = 1 n Σ i [ ( d p o s ( i ) − d n e g ( i ) ) ( s A i + s B i ) ] L_{det} = \frac{1}{n}\Sigma_i[(d_{pos}(i) - d_{neg}(i))(s_{A_i} + s_{B_i})] Ldet=n1Σi[(dpos(i)−dneg(i))(sAi+sBi)]
直观上,如果 d p o s ( i ) < d n e g ( i ) d_{pos}(i) < d_{neg}(i) dpos(i)<dneg(i),表明这个correspondence points可以正确的匹配上,因此 L d e t L_{det} Ldet使 S A i S_{A_i} SAi和 S B i S_{B_i} SBi尽量大; 相反,如果 d p o s ( i ) > d n e g ( i ) d_{pos}(i) > d_{neg}(i) dpos(i)>dneg(i),表明该correspondence points不可以正确匹配上,因此 L d e t L_{det} Ldet使 S A i S_{A_i} SAi和 S B i S_{B_i} SBi尽量小。即,检测器应该对匹配正确的pairs预测较高的分数,对不匹配的pairs预测较低的分数。
三、论文的实验
暂略。