零、概要
- 论文: Fully Convolutional Geometric Features
- 标签:
ICCV 2019
;feature
,match
,registration
- 代码: https://github.com/chrischoy/FCGF
- 作者: Christopher Choy,Jaesik Park, Vladlen Koltun
- 机构: Stanford University, POSTECH, Intel Labs
- 笔者整理了一个最近几年250多篇点云的论文列表,欢迎大家一块学习交流。
从点云中提取几何特征是配准、重建、跟踪等应用的第一步。SOTA的方法往往需要计算底层特征作为输入或者提取基于patch的有限感受野的特征。在本论文中,作者提出了FCGF(Fully-Convolutional Geometric Features),它通过全卷积网络一次计算得到点云特征;作者还提出了新的度量学习损失,可以显著提升性能。FCGF是紧凑的,同时捕获了广泛的空间上下文,并可扩展到大型场景。论文中在室内数据集和室外数据集均进行了验证,FCGF在不需要预处理时达到了SOTA精度,同时比其它精确的办法快600倍,而且结构是紧凑的(32维)。
一、论文的出发点和贡献
在许多点云配准、跟踪和场景流估计(scene flow estimation)任务中,寻找几何点对应(geometric correspondences)关系是一个关键的步骤。因此,大量的工作集中在设计具有区分性的3D特征,进而建立对应关系。
早期的3D特征描述主要依赖于人工设计的特征描述子,如SHOT、FPH和FPFH等,这些局部描述子可以区分局部几何特征。最近,注意力逐渐转向了基于深度学习的三维特征,比如PPF-FoldNet(ECCV 2018),PPFNet(CVPR 2018)和3DFeat-Net(ECCV 2018)等。之前的这些工作中存在一些问题:
- 提取小的3D patch,将其映射到低维空间。这不仅限制了感受野,而且计算效率也很低,因为即使对于重叠的三维区域,网络的中间表示也都是单独计算的。
- 使用昂贵的底层几何特征作为输入降低了特征计算的速度。
- 只对一些interest points提取特征,导致分辨率(点的数量)下降,因此降低了后续的配准精度。
全卷积网络是高效的,因为它们在具有重叠感受野的神经元之间共享中间激活(intermediate activations)。此外,全卷积网络中不是直接操作小的patch,因此神经元具有更大的感受野。而且,全卷积网络产生密集的输出,这非常适用于详细描述场景的任务。
尽管全卷积网络具有这些优点,但由于三维数据的特点,全卷积网络并没有广泛应用到三维几何特征的提取。卷积网络用于3D数据时,标准输入是一个四维的数据(x, y, z, f): 三个空间维度(x, y, z)和一个特征维度f。但大多数三维体素都是空的,导致这种表示占用内存较大。
在论文中,作者采用一种稀疏tensor来表示3D数据,采用Minkowski卷积代替传统卷积,提出了ResUNet用于提取输入点云中每个点的特征,另外提出了新的loss用于全卷积度量学习。该网络不需要数据预处理(提取简单特征),也不需要patch的输入,而且能够产生具有SOTA区分性的高分辨率特征。作者在3DMatch数据集和KITTI数据集中验证了FCGF(Fully Convolutional Geometric Features)的表示能力和提取特征的速度,实验结果如Figure 1。
二、论文的方法
论文中的数据表示和卷积操作主要基于MinkowskiEngine,这里不详细介绍,更多信息请查看MinkowskiEngine主页。
2.1 点云数据的稀疏表示
MinkowskiEngine把点云表示成两部分: 坐标矩阵 C C C和特征矩阵 F F F。
C = [ x 1 y 1 z 1 b 1 : : x N y N z N b N ] C = \left[ \begin{matrix} x_1 & y_1 & z_1 & b_1\\ & : & : & \\ x_N & y_N & z_N & b_N \end{matrix} \right] C=⎣⎡x1xNy1:yNz1:zNb1bN⎦⎤ 和 F = [ f 1 T : f N T ] F = \left[ \begin{matrix} f_1^T \\ : \\ f_N^T \end{matrix} \right] F=⎣⎡f1T:fNT⎦⎤
其中 ( x i , y i , z i ) (x_i, y_i, z_i) (xi,yi,zi)表示点云的坐标, b i b_i bi表示 ( x i , y i , z i ) (x_i, y_i, z_i) (xi,yi,zi)属于batch中的哪个点云(MinkowskiEngine也是把点云组织成batch进行训练), N N N表示1个batch中所有点的数量, f i T f_i^T fiT表示第 i i i个点的特征,可以是1维或者3维或者其它维度的。
这样的表示,相比于3D卷积(X, Y, Z, D)的表示,可以节省空间。[N << XYZ -> N * 4 + N*D << XYZD, << 表示远小于]
2.2 稀疏点云数据的卷积
-
常规3D卷积:
x u out = Σ i ∈ V ( K ) W i x u + i in , for u ∈ Z 3 \text{x}_u^{\text{out}} = \Sigma_{\text{i} \in V(K)}W_i\text{x}_{u + \text{i}}^{\text{in}}, \quad \text{for} \quad u \in \mathbb Z^3 xuout=Σi∈V(K)Wixu+iin,foru∈Z3
u ∈ Z 3 u \in \mathbb Z^3 u∈Z3表示3D坐标, K K K表示卷积中的kernel_size,V(K)是3维空间中的offsets集合, W i ∈ N out × N in W_i \in \mathbb N^{\text {out}} \times \mathbb N^ \text{in} Wi∈Nout×Nin
-
Minkowski 卷积
x u out = Σ i ∈ N ( u , C in ) W i x u + i in , for u ∈ C out \text{x}_u^{\text{out}} = \Sigma_{\text{i} \in N(u, \mathbb C^{\text{in}})}W_i\text{x}_{u + \text{i}}^{\text{in}}, \quad \text{for} \quad u \in \mathbb C^{\text{out}} xuout=Σi∈N(u,Cin)Wixu+iin,foru∈Cout
对于常规3D卷积,可以看到变化的是 u ∈ C out u \in \mathbb C^{\text{out}} u∈Cout和 i ∈ N ( u , C in ) \text{i} \in N(u, \mathbb C^{\text{in}}) i∈N(u,Cin)。 C in \mathbb C^{\text{in}} Cin和 C out \mathbb C^{\text{out}} Cout是预定义的稀疏张量的输入坐标和输出坐标, N ( u , C in ) = { i ∣ u + i ∈ C in , i ∈ V ( K ) } N(u, \mathbb C^{\text{in}}) = \lbrace \text{i} | u + \text{i} \in \mathbb C^{\text{in}}, i \in V(K) \rbrace N(u,Cin)={i∣u+i∈Cin,i∈V(K)}。因此,相比于常规卷积,不是每一个(x, y, z)位置都会有一个卷积的输出,同时并不是每一个offset位置都会参与计算卷积。
2.3 网络模型的架构
论文中的模型架构ResUNet是一种U-Net类的网络架构,在编码和解码部分均包括残差结构,在解码和编码之间通过skip连接来增强特征的表达能力,如Figure 2所示。
- 残差结构: Res = [(Conv + Bn + ReLU) + (Conv + Bn)], Output = ReLU(input + Res(input)),其中的Conv, Bn, ReLU操作均为稀疏数据的卷积,即Minkowski下的卷积操作。
- 编码: 包括N(Figure2中N=3)个(Conv + Bn + Res)结构,kernel size一般设置为3,第一个Conv中的stride=1,其他Conv的stride一般设置为2。
- 解码: 包括N(数量同编码部分)个(transposed Conv + Bn + Res)结构,除了第一个transposed Conv结构外,其他transposed Conv结构的输入均是encoder和decoder进行concat后的tensor。同时,最后一个transposed Conv中的kernel size为1,stride为1,其它的transposed Conv中的kernel size均为3,stride均为2。
- 特征提取层: Conv(kernel size=1, stride=1),其后无Bn和ReLU结构。
- 官方代码: https://github.com/chrischoy/FCGF/blob/master/model/resunet.py
ResUNet架构中的MinkowskiEngine下的Conv, Bn, ReLU, transposed Conv换成常规的2D图像下面的对应操作,就是一个很普通的网络架构,关于MinkowskiEngine的一些基础知识和代码实践欢迎参考https://zhuanlan.zhihu.com/p/304117161。
2.4 损失函数
在作者的代码中,总共实现了4种不同的损失函数,分别是Contrastive Loss, Hardest-contrastive Loss, Triplet Loss和Hardest-triplet Loss。上述四种Loss主要基于一种思想: 如果 ( i , j ) (i, j) (i,j)是positive pairs,则它们特征 f i , f j f_i, f_j fi,fj间的距离应该满足 D ( f i , f j ) − > 0 D(f_i, f_j) -> 0 D(fi,fj)−>0(为了防止过拟合,要求 D ( f i , f j ) < m p D(f_i, f_j) < m_p D(fi,fj)<mp即可);如果 ( i , j ) (i, j) (i,j)是negative pairs,它们的特征 f i , f j f_i, f_j fi,fj的距离 D ( f i , f j ) D(f_i, f_j) D(fi,fj)应该满足 D ( f i , f j ) > m n D(f_i, f_j) > m_n D(fi,fj)>mn。 m p m_p mp和 m n m_n mn是positive pairs和negative pairs的margin。
-
Contrastive Loss
L ( f i , f j ) = I i j [ D ( f i , f j ) − m p ] + 2 + I ‾ i j [ m n − D ( f i , f j ) ] + 2 L(f_i, f_j) = I_{ij}[D(f_i, f_j) - m_p]_+^2 + \overline I_{ij}[m_n - D(f_i, f_j)]_+^2 L(fi,fj)=Iij[D(fi,fj)−mp]+2+Iij[mn−D(fi,fj)]+2
( i , j ) (i, j) (i,j)是positive pairs是 I i j = 1 I_{ij} = 1 Iij=1,否则 I i j = 0 I_{ij} = 0 Iij=0, I ‾ i j \overline I_{ij} Iij则相反。
positive pairs由3DMatch数据的G.T. correspondences获得,negative pairs随机产生,但通过hash过滤掉属于positive pairs的点对。如Figure 3所示,蓝色箭头连接的点表示positive pairs,橘色箭头连接的点表示negative pairs。
-
Hardest-contrastive Loss
L C = Σ ( i , j ) ∈ P { [ D ( f i , f j ) − m p ] + 2 / ∣ P ∣ + + λ n I i [ m n − min k ∈ N 2 D ( f i , f k ) ] + 2 / ∣ P i ∣ + λ n I j [ m n − min k ∈ N 1 D ( f j , f k ) ] + 2 / ∣ P j ∣ } \begin{aligned} L_C &= \Sigma_{(i, j) \in P}\lbrace [D(f_i, f_j) - m_p]_+^2 / |P| + \\ &+ \lambda_nI_i[m_n - \min_{k \in N_2}D(f_i, f_k)]_+^2/|P_i| \\ &+ \lambda_nI_j[m_n - \min_{k \in N_1}D(f_j, f_k)]_+^2/|P_j| \rbrace \end{aligned} LC=Σ(i,j)∈P{[D(fi,fj)−mp]+2/∣P∣++λnIi[mn−k∈N2minD(fi,fk)]+2/∣Pi∣+λnIj[mn−k∈N1minD(fj,fk)]+2/∣Pj∣}
P P P是positive pairs的集合,N1和N2分别表示从第一个点云和第二个点云随机选择的点的index。 I i I_i Ii是一个指示函数, k i = arg min k ∈ N 2 D ( f i , f k ) k_i = \arg \min_{k \in N2}D(f_i, f_k) ki=argmink∈N2D(fi,fk)如果 ( i , k i ) (i, k_i) (i,ki)是一个postive pairs,则 I i = 0 I_i = 0 Ii=0,否则 I i = 1 I_i = 1 Ii=1。 ∣ P i ∣ |P_i| ∣Pi∣表示有效negative pairs的数量。对于 I j I_j Ij和 ∣ P j ∣ |P_j| ∣Pj∣含义类似。
简单说,对于positive pairs,由数据集的G.T.获得;对于每一对positive pair ( i , j ) (i, j) (i,j),由 i i i根据特征距离产生一对hard negative pairs,由 j j j根据特征距离产生一对hard negative pairs,如Figure 3的第三个图所示,蓝色线连接的表示positive pairs,橘色线连接的是negative pairs。
-
Triplet Loss
L ( f , f + , f − ) = [ D ( f , f + ) + m − D ( f , f − ) ] + 2 L(f, f_+, f_-) = [D(f, f_+) + m - D(f, f_-)]_+^2 L(f,f+,f−)=[D(f,f+)+m−D(f,f−)]+2
m m m是positive pairs和negative pairs之间的margin。
对于三元组的随机采样是这样的: 对于positive pairs,由数据集的G.T.获得;对于每一对positive pair ( i , j ) (i, j) (i,j),随机产生一个 k k k,若 ( i , k ) (i, k) (i,k)是一个negative pair,则形成三元组 ( i , j , k ) (i, j, k) (i,j,k),如Figure 3的第二个图所示,否则在训练中放弃此三元组。
-
Hardest-triplet Loss
L T ( ) = 1 Z Σ ( i , j ) ∈ P { I i [ m + D ( f i , f j ) − min k ∈ N 2 D ( f i , f k ) ] + + I j [ m + D ( f i , f j ) − min k ∈ N 1 D ( f j , f k ) ] + } \begin{aligned} L_T() &= \frac{1}{Z} \Sigma_{(i, j) \in P}\lbrace I_i[m + D(f_i, f_j) - \min_{k \in N_2}D(f_i, f_k)]_+ \\ &+ I_j[m + D(f_i, f_j) - \min_{k \in N_1}D(f_j, f_k)]_+ \rbrace \end{aligned} LT()=Z1Σ(i,j)∈P{Ii[m+D(fi,fj)−k∈N2minD(fi,fk)]++Ij[m+D(fi,fj)−k∈N1minD(fj,fk)]+}
I i , I j , N 1 , N 2 I_i, I_j, N_1, N_2 Ii,Ij,N1,N2的含义同Hardest-contrastive Loss, Z Z Z表示所有有效Hardest三元组的数量。
简单的说,positive pairs由G.T.获得,对于每一对positive pair ( i , j ) (i, j) (i,j),对点 i i i从 N 2 N_2 N2找到特征距离最小的点 k i k_i ki,若 ( i , k i ) (i, k_i) (i,ki)不属于positive pais,则构成三元组 ( i , j , k i ) (i, j, k_i) (i,j,ki),否则舍弃此无效三元组;对点 j j j进行同样的操作,得到三元组 ( i , j , k j ) (i, j, k_j) (i,j,kj)。如Figure 3的第四个图所示,由一对positive pair(蓝色的圆)产生了两个三元组。
-
Loss实现和采样策略的源码: https://github.com/chrischoy/FCGF/blob/master/lib/trainer.py
2.5 训练
优化器是SGD,初始学习率0.1,指数衰减学习率( γ = 0.99 \gamma = 0.99 γ=0.99)。Batch size设置为4,训练100个epoches。在训练时对数据采用随机scale(0.8 - 1.2)和随机旋转(0-360°)的增强。
三、论文的实验
3.1 数据集
- 3DMatch(内容较多,请查阅https://github.com/zhulf0804/3D-PointCloud/tree/master/3DMatch)
- KITTI
3.2 评估指标
-
Feature-match Recall(FMR, for 3DMatch)
R = 1 M Σ s = 1 M 1 ( [ 1 ∣ Ω s ∣ Σ ( i , j ) ∈ Ω s 1 ( ∣ ∣ T ∗ x i − y j ∣ ∣ < τ 1 ) ] > τ 2 ) R = \frac{1}{M} \Sigma_{s=1}^M 1([\frac{1}{|\Omega_s|}\Sigma_{(i, j) \in \Omega_s}1(||T^* \text{x}_i - \text{y}_j|| < \tau_1) ] > \tau_2) R=M1Σs=1M1([∣Ωs∣1Σ(i,j)∈Ωs1(∣∣T∗xi−yj∣∣<τ1)]>τ2)
M M M表示pairs点云对的数量, 1 1 1表示指示函数, Ω s \Omega_s Ωs是第 s s s个pair的correspondences, T ∗ T^* T∗表当前pair点云的G.T.的R,t变换。 y j \text{y}_j yj是 x i \text{x}_i xi在 Y Y Y中选择的Feature Distance最小的点,即 y j = arg min y j ∣ ∣ F x i − F y j ∣ ∣ , y j ∈ Y \text{y}_j = \arg \min_{\text{y}_j} ||F_{\text{x}_i} - F_{\text{y}_j}||, \text{y}_j \in Y yj=argminyj∣∣Fxi−Fyj∣∣,yj∈Y。 τ 1 \tau_1 τ1和 τ 2 \tau_2 τ2是两个超参数,常取值 τ 1 = 0.1 \tau_1 = 0.1 τ1=0.1, τ 2 = 0.05 \tau_2 = 0.05 τ2=0.05。
简单的说,就是有M个点云对,对每一个点云对做一个是特征好/坏的判断: 在真实R,t的情况下,计算 ( x i , y j ) (\text{x}_i, \text{y}_j) (xi,yj)距离小于 τ 1 \tau_1 τ1的比例r,如果r大于 τ 2 \tau_2 τ2,则表示这个点云特征好,否则特征是坏的。
-
Registration Recall(for 3DMatch)
E RMSE = 1 Ω ∗ Σ ( x ∗ , y ∗ ) ∈ Ω ∗ ∣ ∣ T ^ i , j x ∗ − y ∗ ∣ ∣ 2 E_{\text{RMSE}} = \sqrt {\frac{1}{\Omega_*}\Sigma_{(\text{x}^*, \text{y}^*) \in \Omega_*} ||\hat T_{i, j}\text{x}^* - \text{y}^*||^2} ERMSE=Ω∗1Σ(x∗,y∗)∈Ω∗∣∣T^i,jx∗−y∗∣∣2
Ω ∗ \Omega_* Ω∗表示 ( i , j ) (i, j) (i,j)点云对中correspondences的数量, ( x ∗ , y ∗ ) (\text{x}^*, \text{y}^*) (x∗,y∗)表示G.T.的pair, T ^ i , j \hat T_{i, j} T^i,j表示基于 ( i , j ) (i, j) (i,j)点云对预测的R,t变换。
对于具有至少30% overlap的点云对,如果 E RMSE < 0.2 E_\text{RMSE} < 0.2 ERMSE<0.2,则表示这是一个正确的点云对。
3.3 实验结果
主要介绍3DMatch数据集上的实验结果。
- 精度和速度
作者在3DMatch测试集中比较了FCGF与传统方法和深度学习方法的性能,如Table 1所示,第1列是方法名称,第2列是FMR值(及其标准差),第3列是在旋转的3DMatch数据集中的FMR值(及其标准差),第4列表示特征描述子的维度和提取特征的时间。从表中可以看到,FCGF提取特征的速度快,特征简洁(只有32维),在3DMatch数据集和旋转增强的3DMatch数据集均有最高的FMR。
在3DMatch测试集中Registration recall的比较如Table 5所示,FCGF在7个场景和平均情况下均达到了最高的Registration recall。
- Ablation Study
作者测试了不同loss下的性能,实验结果如Table3所示。由表格可以看到,对于contrastive Loss,normalized feature比非normalized feature要好,hardest-contrastive loss比常规(随机的)contrastive loss结果要好,同时可以观察到hardest-contrastive loss是所有loss中结果是最好的。对于triplet loss,normalized feature比非normalized feature要差,这个结论和contrastive loss中是相反的;hardest-triplet loss要比常规(随机的)triplet-loss结果要好,但其容易导致collapse。综合对比,hardest-contrastive loss在3DMatch数据集中是最好的。
作者测试不同的 m p m_p mp和 m n m_n mn组合对于实验结果的影响,实验结果如Table 4所示, m n / m p m_n / m_p mn/mp对结果的影响较大,一般来说 m n / m p m_n / m_p mn/mp越大,结果越好;但如果其比值太大(如超过30),结果开始下降。
- 可视化
FCGF特征的t-SNE显示如Figure 5所示。
四、总结
-
论文基于MinkowskiEngine实现了点云的全卷积网络,点云和卷积等采用稀疏表示,优化了显存。
-
作者提出了hardest-contrastive loss和hardest-triplet loss,利用点云数据中的correspondences实现了特征的有效学习,并通过哈希的方式加快了生成二元组和三元组的速度。
-
不足: 基于MinkowskiEngine的神经网络在量化点云时会丢掉部分点云信息。