【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019

厦门大学,路易斯安那州立大学

本文提出了激光里程计LO-Net,其通过多任务学习对点云数据同时进行法向量估计、动态区域预测、相机位姿回归。

此外还设计了一个scan2map 的建图模块来降低累计误差、提升里程计的精度。

达到了超越DP-based方法、与几何结构方法SOTA–LOAM相似的里程计性能。

网络结构

网络输入为前后帧的点云数据,网络分为三个部分:

  1. 法向量估计网络
  2. 动态区域mask估计网络
  3. 位姿回归孪生网络
    【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第1张图片

最后,还有一个将当前帧的点云注册到map中的建图模块,负责将预测的相对位姿根据map转换为绝对位姿然后输出。

点云数据encoding:

处于速度的考虑,作者选择将点云投影到圆柱平面上:
α = arctan ⁡ ( y / x ) / Δ α β = arcsin ⁡ ( z / x 2 + y 2 + z 2 ) / Δ β \begin{array}{l} \alpha=\arctan (y / x) / \Delta \alpha \\ \beta=\arcsin \left(z / \sqrt{x^{2}+y^{2}+z^{2}}\right) / \Delta \beta \end{array} α=arctan(y/x)/Δαβ=arcsin(z/x2+y2+z2 )/Δβ
其中 Δ α    Δ β \Delta \alpha \ \ \Delta \beta Δα  Δβ分别是水平和垂直方向上连续光束发射器之间的平均角分辨率。
位于 ( α , β ) (\alpha,\beta) (α,β)处的像素包含距离信息: r = x 2 + y 2 + z 2 r=\sqrt{x^{2}+y^{2}+z^{2}} r=x2+y2+z2 以及激光强度信息。
对于多个点同时对应到一个像素的情况,只保留距离激光雷达最近的点。

投影后得到的柱面图尺寸:H×W×C

几何一致性约束

论文将几何一致性约束分别加入到三个网络模块的损失函数中,提升了网络的预测精度。

1. 法向量估计

假设柱面投影函数为P,前后帧的相对位姿变换为 T t T^t Tt,那么可以根据t-1时刻的柱面投影图 X t − 1 α β X_{t-1}^{\alpha \beta} Xt1αβ推出t时刻的柱面投影图 X t α β X_{t}^{\alpha \beta} Xtαβ
X ^ t α β = P T t P − 1 X t − 1 α β \hat{X}_{t}^{\alpha \beta}=P T_{t} P^{-1} X_{t-1}^{\alpha \beta} X^tαβ=PTtP1Xt1αβ

为了衡量预测的柱面图 X t α β X_{t}^{\alpha \beta} Xtαβ与真实的点云南数据投影后的柱面图之间的差异,作者选择使用法向量相似度最为衡量依据。原因在于由于点云的稀疏性,前后帧的点云并非是一一对应的,因此直接衡量对应点之间的距离会导致很大的误差。而法向量可以反映道路的平滑表面和清晰的边缘。如果在map中只保留平滑平面上的点,那么在注册点云时其法向量应当是非常相近的。

传统的点云法向量估计可以采用PCA的方法,但是在网络传播时计算特征值非常慢,因此本文采用了一种巧妙的设计:

  • 直接计算该点附近四个点分别到该点的向量的法向量,然后将求得的法向量平均,得到该点处的法向量,如图:
    【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第2张图片

    计算公式:
    N ( X i ) = ∑ X k i , X i j ∈ P ( w i k ( X i k − X i ) × w i j ( X i j − X i ) ) \mathcal{N}\left(X^{i}\right)=\sum_{X^{i}_{k}, X^{i} j \in \mathcal{P}}\left(w_{i k}\left(X^{i_{k}}-X^{i}\right) \times w_{i j}\left(X^{i_{j}}-X^{i}\right)\right) N(Xi)=Xki,XijP(wik(XikXi)×wij(XijXi))

根据法向量计算损失函数值:
L n = ∑ α β ∥ N ( X ^ t α β ) − N ( X t α β ) ∥ 1 ⋅ e ∣ ∇ r ( X ^ t α β ) ∣ \mathcal{L}_{n}=\sum_{\alpha \beta}\left\|\mathcal{N}\left(\hat{X}_{t}^{\alpha \beta}\right)-\mathcal{N}\left(X_{t}^{\alpha \beta}\right)\right\|_{1} \cdot e^{\left|\nabla r\left(\hat{X}_{t}^{\alpha \beta}\right)\right|} Ln=αβN(X^tαβ)N(Xtαβ)1er(X^tαβ)
第一项是同一柱面图像素格之间的法向量距离,第二项是权重,其表示深度r关于像素坐标的导数,也就是说边缘区域权重更大。

2. 里程计regression:

网络结构:先使用encoder对加入了法向量信息的点云数据进行编码,然后接4层卷积层和3层全连接层输出坐标和四元数位姿。
考虑到网络的参数量,将绝大部分卷积换成了fireConv层。
位姿损失函数借鉴了PoseNet2:
L o = L x ( S t − 1 ; S t ) exp ⁡ ( − s x ) + s x + L q ( S t − 1 ; S t ) exp ⁡ ( − s q ) + s q s x = 0.0 s q = − 2.5 \begin{aligned} \mathcal{L}_{o} &=\mathcal{L}_{x}\left(S_{t-1} ; S_{t}\right) \exp \left(-s_{x}\right)+s_{x} \\ &+\mathcal{L}_{q}\left(S_{t-1} ; S_{t}\right) \exp \left(-s_{q}\right)+s_{q} \end{aligned}\\ s_{x}=0.0 \quad s_{q}=-2.5 Lo=Lx(St1;St)exp(sx)+sx+Lq(St1;St)exp(sq)+sqsx=0.0sq=2.5

其中 L x ( S t − 1 ; S t ) = ∥ x t − x ^ t ∥ l L q ( S t − 1 ; S t ) = ∥ q t − q ^ t ∥ q ^ t ∥ ∥ l \begin{aligned} \mathcal{L}_{x}\left(S_{t-1} ; S_{t}\right) &=\left\|x_{t}-\hat{x}_{t}\right\|_{l} \\ \mathcal{L}_{q}\left(S_{t-1} ; S_{t}\right) &=\left\|q_{t}-\frac{\hat{q}_{t}}{\left\|\hat{q}_{t}\right\|}\right\|_{l} \end{aligned} Lx(St1;St)Lq(St1;St)=xtx^tl=qtq^tq^tl

3.动态区域MASk预测:

这里主要是把属于动态物体的点云找出来,给一个属于[0,1]范围的较低的置信度 M ( X t α β ) M(X_t^{\alpha\beta}) M(Xtαβ),避免其影响里程计精度。mask预测网络采用了encoder-decoder的结构,encoder网络的权重与位姿回归网络encoder共享权重,decoder同样采用了FireDeconv层。
将该置信度应用到之前的法向量估计损失函数上:
L n = ∑ α β M ( X t α β ) ∥ N ( X ^ t α β ) − N ( X t α β ) ∥ 1 ⋅ e ∣ ∇ r ( X ^ t α β ) ∣ \mathcal{L}_{n}=\sum_{\alpha \beta} \mathcal{M}\left(X_{t}^{\alpha \beta}\right)\left\|\mathcal{N}\left(\hat{X}_{t}^{\alpha \beta}\right)-\mathcal{N}\left(X_{t}^{\alpha \beta}\right)\right\|_{1} \cdot e^{\left|\nabla r\left(\hat{X}_{t}^{\alpha \beta}\right)\right|} Ln=αβM(Xtαβ)N(X^tαβ)N(Xtαβ)1er(X^tαβ)
然而网络在训练过程中会偷懒将所有置信度置为0来达到最小损失,因此需要额外约束,作者使用了交叉熵:
L r = − ∑ α β log ⁡ P ( M ( X t α β ) = 1 ) \mathcal{L}_{r}=-\sum_{\alpha \beta} \log P\left(\mathcal{M}\left(X_{t}^{\alpha \beta}\right)=1\right) Lr=αβlogP(M(Xtαβ)=1)
注意置信度是没有label数据的,可以看出这里是默认了所有label为1(即静态区域)。

最后的损失函数:
L = L o + λ n L n + λ r L r \mathcal{L}=\mathcal{L}_{o}+\lambda_{n} \mathcal{L}_{n}+\lambda_{r} \mathcal{L}_{r} L=Lo+λnLn+λrLr

建图:scan2map 优化

为了减小累计误差,使用法向量和mask选择平滑区域、静态区域的点注册到map中,流程图:
【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第3张图片

图中操作符含义:


* :平滑性度量c
使用平滑卷积核K对每个点法向量进行卷积:
c = ∑ k = 1 3 ( K ∗ N k ) 2 c=\sum_{k=1}^{3}\left(K * \mathcal{N}_{k}\right)^{2} c=k=13(KNk)2

C最小的前 n C n_C nC个点则被认为是平滑区域的点,之后会被注册到map中去。


∏ \prod :计算绝对位姿的初始估计值(之后还有refine):
M init = M t − 1 M t − 2 − 1 M t − 1 \mathbf{M}_{\text {init}}=\mathbf{M}_{t-1} \mathbf{M}_{t-2}^{-1} \mathbf{M}_{t-1} Minit=Mt1Mt21Mt1


Ψ \Psi Ψ:利用相对位姿 T t T_t Tt的线性插值消除点云的运动失真:
然后使用绝对位姿的初始估计值将点云 S t S_t St转换到map中,为之后的点云精细配准做好准备。该步骤期望找到最优的绝对位姿变换:
M ^ o p t = arg ⁡ min ⁡ M ^ ∑ i ( ( M ^ ⋅ p i − m i ) ⋅ n i ) 2 \hat{\mathbf{M}}_{o p t}=\underset{\hat{\mathbf{M}}}{\arg \min } \sum_{i}\left(\left(\hat{\mathbf{M}} \cdot \boldsymbol{p}_{i}-\boldsymbol{m}_{i}\right) \cdot \boldsymbol{n}_{i}\right)^{2} M^opt=M^argmini((M^pimi)ni)2

注意这里只要求投影点到目标点的向量 M ^ ⋅ p i − m i \hat{\mathbf{M}} \cdot \boldsymbol{p}_{i}-\boldsymbol{m}_{i} M^pimi沿着目标点处的法向量的投影最小即可,不要求两点完全重合。(map中的点都是平滑平面上的点,这样避免点云稀疏性带来的问题)


θ \theta θ:迭代配准。
进行固定数目的迭代后得到精细化的配准结果:
最终的绝对位姿变换:
M t = ∏ k = 1 n i t e r M ^ k M i n i t \mathbf{M}_{t}=\prod_{k=1}^{n_{i t e r}} \hat{\mathbf{M}}_{k} \mathbf{M}_{i n i t} Mt=k=1niterM^kMinit


Φ \Phi Φ: 通过对Mt-1和Mt之间的车辆运动进行线性插值,从当前点云St生成新的点云。


∑ , N \sum,N ,N: 删除旧数据,加入新数据,map只保留100个scan数据。

实验评估:

KItti上训练,Ford上测试。

里程计性能:

【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第4张图片

【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第5张图片 【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第6张图片

法向量预测结果评估:

【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第7张图片

只有论文方法同时满足 边沿清晰,表面平滑。
【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第8张图片

使用PCA(r=0.1)计算的结果作为label

动态区域估计:

【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第9张图片

很好的区分了动态点云。

速度

veldyne激光雷达的扫描频率为10HZ,因此推理速度小于0.1s即可:
【论文笔记】激光里程计网络 LO-Net:Deep Real-time Lidar Odometry2019_第10张图片

可以实时运行,时间主要花费在Mapping上。论文提到现有代码部分运行在CPU上,未来考虑全部运行在GPU上,以及可以使用多线程

待改进的问题

  1. 为了速度使用柱面图最为点云数据的表示形式,到那时三维视觉中直接使用点云更 practical
  2. 训练过程使用了真值,计划使用循环神经网络消除对真值数据的需求。

你可能感兴趣的:(点云处理,激光里程计)