【论文笔记】无监督的激光雷达里程计CAE-LO 2020
LiDAR Odometry Leveraging FullyUnsupervised Convolutional Auto-Encoder for Interest Point Detection and Feature Description
代码链接
武汉大学测绘遥感信息工程国家重点实验室,
芬兰地理空间研究所遥感与摄影测量系和激光扫描研究卓越中心
湖北工业大学经济管理学院
本文工作:
- 本文提出了一种有效的激光点云关键点检测和特征点提取的方法,两种方法都是无监督的。
- 通过关键点匹配对求解关键帧之间的相对位姿,实现了激光里程计。
- 同时根据关键帧之间的相对位姿,逐帧地对相对位姿进行后优化,得到连续的位姿轨迹.
论文解决了两个任务,即点云的 关键点检测,和特征向量的提取。亮点在于:
- 在柱面投影图上检测关键点,将大量的无序点云转换成compact的二维矩阵,直接使用二维卷积进行处理,大大减少了计算量
- 由于柱面图局部尺度不同的问题,作者选择在尺度统一的3D体素网格中提取关键点的特征
论文方法:
- 先通过点云的柱面投影,检测关键点用于后续提取特征向量,同时提取扩展关键点(Extended Interest Points,EIPs),用于后续的帧间位姿优化。
- 在关键点的领域内进行体素化,并使用3D卷积提取特征。
- 根据关键点和特征求解原始的帧间相对位姿,在关键帧之间使用ICP算法进行优化,然后将优化的位姿量平均分配在两个关键帧之间的原始帧间相对位姿上,实现相对位姿的后优化。
关键点检测
1. 柱面投影
在柱面图上处理的,所以首先把点云投影到柱面图:
c
=
(
π
−
arctan
2
(
y
,
x
)
)
/
Δ
α
r
=
H
−
(
arcsin
(
z
/
x
2
+
y
2
+
z
2
)
/
Δ
β
−
β
d
/
Δ
β
)
\begin{array}{l} c=(\pi-\arctan 2(y, x)) / \Delta \alpha \\ r=H-\left(\arcsin \left(z / \sqrt{x^{2}+y^{2}+z^{2}}\right) / \Delta \beta-\beta_{d} / \Delta \beta\right) \end{array}
c=(π−arctan2(y,x))/Δαr=H−(arcsin(z/x2+y2+z2
)/Δβ−βd/Δβ)
考虑到泛化性和通用性,这里像素值只用了3通道的xyz,没有使用反射强度和range。
2. 特征图提取
然后用一个编解码结构的网络对其进行特征提取:
上图可知,三通道的输入首先被第一个卷积层提取为较厚的特征图,然后第二个卷积层处理成较薄的特征图。这个较薄的特征图稍后用来做关键点检测。为了实现无监督学习,作者在后面添加了编解码结构的网络,训练阶段强制模型输入输出完全相同。这样可以在保留原始输入信息的前提下最大限度的压缩点云信息。
在inference阶段,直接使用第二层卷积层的输出作为特征响应图即可。
3. 生成关键点score map
所谓score map 就是预测的每个像素是关键点的置信度。
一像素的领域为(2ℎ+1)×(2ℎ+1),那么需要计算其与((2ℎ+1)^2−1)个邻域像素的特征距离(L2距离)。选择最小的一个特征距离就,作为该像素到其邻域的差异性度量。差异性大的作为关键点。
除关键点之外,还有扩展关键点(EIPs)用于后续处理:改变邻域范围,原来是(2ℎ+1)×(2ℎ+1),变成了(2ℎ_E+1)×(2ℎ_E+1)
多尺度特征提取
有了关键点,就可以在关键点的三维邻域内生成voxel grid然后进行特征提取了。
对一个关键点的邻域,生成三个大小相同(????????×????????×????????,sp=16)、voxel size不同(????1,????2,????3)的体素网格。
大小相同,都是????????×????????×????????个网格数目,因此输入到3D卷积网络中后,得到的输出尺寸是相同的,便于后续处理。
网络的结构图:
与关键点检测的网络相同,使用编解码结构是为了强制输入输出相同,实现无监督学习。
inference阶段其实只用其生成的20维特征向量。
关键帧选取和里程计优化
原始里程计(即帧间相对位姿)使用ransac求解得到;为了得到更加精确的结果,需要在关键帧上对相对位姿进行优化。
1. 关键帧选择
一般是固定的每n步选择一帧作为关键帧,如果连续几帧的相对位姿都有大的误差,得到的关键帧之间累计的误差可能会很大,甚至没有overlap
本文提出了matching pairs transferring,选择关键帧,具体的没有太看懂,后续有需求了再详细看。
得到关键帧之后,使用ICP算法对其之间的位姿进行迭代优化。ICP的输入不是原始点云,而是EIPs(扩展关键点),主要为了去噪声和减少计算量。
注意原始的里程计是没有被优化的,因此在优化了关键帧之间的位姿之后,还需要反向优化关键帧之间的帧间位姿
论文将关键帧之间优化的位姿量平均分配到关键帧之间的所有帧间位姿上,解决了只优化关键帧出现的位姿轨迹跳变的问题:
Δ
R
i
∗
=
Eulers
2
R
(
i
n
R
2
Eulers
(
Δ
R
∗
)
)
Δ
t
i
∗
=
i
n
Δ
t
∗
\begin{array}{l} \Delta \boldsymbol{R}_{i}^{*}=\text {Eulers} 2 R\left(\frac{i}{n} R 2 \text {Eulers}\left(\Delta \boldsymbol{R}^{*}\right)\right) \\ \Delta \boldsymbol{t}_{i}^{*}=\frac{i}{n} \Delta \boldsymbol{t}^{*} \end{array}
ΔRi∗=Eulers2R(niR2Eulers(ΔR∗))Δti∗=niΔt∗