清库存系列,拖得有些久啊。
1. 概要
论文:Fully-Convolutional geometric features
代码:https://github.com/chrischoy/fcgf
背景知识补充:
在逆向工程中通过测量仪器得到的产品外观表面的点数据集合也称之为点云,通常使用三维坐标测量机所得到的点数量比较少,点与点的间距也比较大,叫稀疏点云;而使用三维激光扫描仪或照相式扫描仪得到的点云,点数量比较大并且比较密集,叫密集点云。
2. 动机
现有方法往往需要计算底层特征作为输入 或者基于块的有限感受野特征。
具有区分性的3D特征,尤其是配准、跟踪、场景流任务中。
所以本文提出了FCGF,通过全卷积网络以此计算得到点云特征,无需与处理,结构紧凑(32维)。
具体而言就是: 使用Minkowski卷积系数表达+使用ResUnet提取特征+新loss度量
基本上可以理解成为Minkowski的U-Net卷积形式,利用Minkowski的稀疏性+残差与U-Net特征的保留实现紧凑表达。
3. 方法
整体框架:
基本就是得益于U-Net+残差的好效果了
残差结构: 2个卷积操作在输出上,如右边橘色方框所示。
编码器:3个(Conv+BN+Res)的结构,蓝色模块,核大小:
3
×
3
3\times 3
3×3, 第一个卷积的stride=1,剩余都是2。
解码器:3个(Transposed Conv+BN+Res)结构,黄色模块,除去第一个Transposed Conv,剩余都有两个输入。
特征提取层:最后一个Conv,输出32通道;
点云表达:坐标矩阵C+特征F,也就是明科夫斯基卷积的模式。
损失函数
4中损失函数:
- 对比损失(Contrastive loss)
- 三元组损失(Triplet loss)
- 难样例-对比损失(Hardest-contrastive)
- 难样例-三元组(Hardest-triplet)
基本设计思想满足:
如果(i, j)是正样例对,则他们的特征的距离满足
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)是负样本对,则他们之间的特征应满足
D
(
f
i
,
f
j
)
>
m
n
D(f_i, f_j) >m_n
D(fi,fj)>mn。
m是阈值。下面比对了四种方法的区别:
蓝色箭头:正样本对; 橘色:负样本对;
对比损失
公式解析:
I
i
j
=
1
I_{ij}=1
Iij=1:(i, j)是正样本对; 否则
I
i
j
=
0
I_{ij}=0
Iij=0
I
ˉ
i
j
=
1
\bar{I}_{ij}=1
Iˉij=1: (i, j)是负样本对; 否则
I
ˉ
i
j
=
0
\bar{I}_{ij}=0
Iˉij=0
正样本对由3DMatch数据的GT的近邻获得,而负样本则是随机产生,通过哈希表过滤掉其中属于正样本的点。
难样例-对比损失
公式解析:
公式分为三个部分,正样本衡量的部分不变,同对比损失。只是把负样本扩充出来了了两部分,按比例来计算了。也就是细化了负样本当中容易区分成正样本的部分的损失。
P
P
P: 正样本个数
P
i
P_i
Pi与
P
j
P_j
Pj: 均为负样本个数,分别针对两个正样本分别对应一个负样本,所以有两个部分组成。
图示3非常清楚。
三元组损失
公式解析:
希望最小化两个正样本的距离,同时最大化两个负样本的距离。
f
f
f:当前特征;
f
+
f_+
f+:
f
f
f的正样本
f
−
f_-
f−:
f
f
f的负样本
难样例-三元组损失
公式解析:
就是对一对正样本(i, j)分别对
i
i
i构建一个三元组,对
j
j
j构建一个三元组。每个点对应有负样本,所以变成了两项的三元组损失。希望还是正样本间距越大,负样本间距越小。
4. 实验结果
实验设置
优化器是SGD,初始学习率0.1,指数衰减学习率( γ = 0.99 \gamma = 0.99 γ=0.99)。Batch size设置为4,训练100个epoches。在训练时对数据采用随机scale(0.8 - 1.2)和随机旋转(0-360°)的增强。
数据集
3D Match
KITTI
评估指标
-
Feature-match Recall (FMR)
公式解析:每个点云对特征好坏的判断的平均值。
1 1 1:指示函数
Ω s \Omega_s Ωs: 第 s s s个pair的近邻
T ∗ T^* T∗:点云对的平移旋转变换
y j = a r g m i n y j ∣ ∣ F x i − F y j ∣ ∣ y_j = argmin_{y_j} ||F_{xi}-F_{yj}|| yj=argminyj∣∣Fxi−Fyj∣∣。也就是 x i x_i xi在Y中特征距离最小的点。
τ 1 = 0.1 , τ 2 = 0.05 \tau_1=0.1, \tau_2=0.05 τ1=0.1,τ2=0.05 -
Registration recall
公式解析: 衡量两个点对(i, j)与其估计的点对 T ^ i , j \hat{T}_{i,j} T^i,j的MSE距离。
Ω ∗ \Omega^* Ω∗: 点对集合, 如果(i , j)覆盖率在30%以上,那么认为 E R M S E < 0.2 m E_{RMSE}<0.2m ERMSE<0.2m则是正确的匹配对。 -
相关旋转与转换损失:
R T E = ∣ T ^ − T ∗ ∣ RTE = |\hat{T} - T^*| RTE=∣T^−T∗∣
R R E = a r c o s s ( ( T r ( R ^ T R ∗ ) − 1 ) / 2 ) RRE = arcoss((Tr(\hat{R}^TR^*)-1)/2) RRE=arcoss((Tr(R^TR∗)−1)/2), R ^ \hat{R} R^是预测出的旋转矩阵, R ∗ R^* R∗是GT。
实验
特征匹配recall图,可以看到所提出方法最佳
可视化匹配对的图:
可视化KITTI数据集的效果:
3DMatch数据集效果:维度低,效果好。
消融实验:输出特征维度:32最佳。
消融实验:
对于对比损失,归一化的特征比非归一化的特征要好
难样例-对比损失比 对比损失要好,而且是所有结果当中最佳的。
对于三元组损失,非归一化的特征比归一化的特征好。
难样例-三元组损失比 三元组损失要好,但是很容易导致坍塌。
不同阈值设计效果,
一般来讲,
m
n
m
p
\frac{m_n}{m_p}
mpmn越大,结果越好;但如果>30,效果开始下降。
3D Match数据集:配准Recall结果。平均效果最好。
KITTI数据集上的效果:
5. 结论及思考
- 基于Minkowski卷积的全连接网络,稀疏表达优化了显存;
- 稀疏表达的量化会丢失部分点云信息;
- 损失设计当中,使用哈希的方式加快生成三元组;
- 后续工作是将其用于端到端的点云注册任务当中;