社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【泡泡图灵智库】LO-Net:基于深度学习的实时激光雷达里程计

泡泡机器人SLAM • 2 年前 • 300 次点击  

泡泡图灵智库,带你精读机器人顶级会议文章

标题:LO-Net: Deep Real-time Lidar Odometry

作者:Qing Li, Shaoyang Chen, Cheng Wang, Xin Li,  Chenglu Wen, Ming Cheng, Jonathan Li

机构:厦门大学,路易斯安娜州立大学

来源:CVPR 2019

编译:程骞

审核:   zhuhu

这是泡泡图灵智库推送的第788篇文章,欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权

摘要

大家好,今天为大家带来的文章是LO-Net: Deep Real-time Lidar Odometry。

我们提出了一种新的基于深度卷积网络LO算法LO-Net,用于实时激光雷达里程计估计。与大多数现有的激光雷达里程计(LO)估计不同,凭借单独设计的特征选择、特征匹配和姿态估计pipeline,LO-Net可以以端到端的方式进行训练。利用新的掩模加权几何约束损失,LO-Net可以有效地学习激光里程计估计的特征表示,并可以隐式地利用数据中的序列依赖性和动态。我们还设计了一个scan-to-map的模块,它利用在LO-Net中学习到的几何和语义信息来提高估计精度。在基准数据集上的实验表明,LO-Net优于现有的基于学习的方法,并且与基于几何的最佳方法LOAM具有相似的精度。

主要工作与贡献

  1. 我们提出了一种新的scan-to-scan的激光雷达里程计估计网络,该网络同时学习估计动态区域的法线和掩模

  2. 我们在网络中加入了时空几何一致性约束,它提供了连续扫描帧之间的高阶交互,并有助于更好地规范里程计学习过程。

  3. 我们将一个有效的建图模块结合到pipeline中。通过利用从LO-Net中学习到的正常信息和掩模信息,我们仍然可以实现实时但更准确的里程计估计。

算法流程

1. 系统流程

图1. 上半部分:LO-Net的算法流程。下半部分:特征提取层(红色虚线)和掩模预测层(黑色虚线)的网络体系结构。我们的网络以两个连续的激光雷达扫描作为输入,并推断出相对的6自由度姿态。输出数据将由建图模块进行进一步处理。

里程计估计算法普遍使用移动机器人获得的连续点云作为输入。我们的LO-Net可以通过处理点云序列而不是单帧扫描来解释和利用更多的信息。LO-Net学习到的特征可以表征LO问题的几何信息。如图1所示,我们的LO-Net架构由一个法向量估计子网络、一个掩模预测子网络和一个姿态回归孪生主网络组成。LO-Net以连续两次扫描(St−1;St)作为输入,并联合估计激光雷达数据之间的6自由度相对姿态、点向法向量和每次扫描的移动对象的掩码。尽管经过了联合训练,但这三个模块都可以独立地用于推理。然后,通过激光雷达建图来细化LO-Net的输出,该建图将激光雷达点云注册到一个全局构造的地图上。最终的输出是扫描St相对于初始参考位置的变换,即每个St在世界坐标系中的姿态。

2. 算法模块

2.1 激光雷达数据编码

如图2所示,具有环形结构的三维激光雷达点云通常用笛卡尔坐标表示。为了将原始的稀疏和不规则的点云转换为可以输入网络的结构化表示,我们通过圆柱投影[6]将激光雷达数据编码为点云矩阵。给定激光雷达坐标系(X、Y、Z)中的一个三维点p=(x、y、z),投影函数为

其中,α和β是记录这些点在矩阵中的位置的索引。∆α和∆β分别为连续光束发射器在水平方向和垂直方向上的平均角分辨率。点云矩阵(α,β)处的元素填充了激光雷达点p的强度值和范围值r 。当多个点被投影到同一位置时,我们保持该点更接近激光雷达。将此投影应用于激光雷达数据后,我们得到一个大小为H×W×C的矩阵,C是矩阵通道的数量。图9显示了该矩阵的范围通道的一个例子。

图2. 数据编码和法向量估计

2.2 几何一致性约束

法向量估计。如图2所示,给定一个3D点Xi及网格上其k个邻居Xij,j=1,2,……,k。则法向量N(Xi)可以用下式表示:

其中式中(Xik−Xi)是一个三维向量,wik是Xik相对于Xi的权值,[·]T是一个k×3向量。||N(Xi)||2 = 1.我们将wik 设为e−0.2|r(Xik)−r(Xi)|),以对与Xi具有相似范围值r的点施加更多的权重,否则施加更小的权重。求解方程(2)的一种常用策略是进行主成分分析(PCA),并将法向量估计转换为由Xi的邻居创建的协方差矩阵的特征向量/特征值的计算。在我们的工作中,这种法向量估计需要被嵌入到网络中。协方差矩阵及其特征向量的计算使得训练和估计效率低下。因此,我们通过计算Xi的四个邻居上的加权交叉积来简化法向量估计。然后我们使用移动平均滤波器[20]来平滑法向量。这可以表述为

其中P为Xi相邻点的集合,对钟排序,如图2所示的{Xi1, Xi2, Xi3, Xi4 }。最后的法向量被归一化为1。

由于扫描序列的时间空间几何一致性,一个点云矩阵中的点在另一个点云矩阵中应该有对应的点。设Xt-1αβ和Xtαβ分别为连续数据矩阵St−1和St的空间对应的点元素。二者的变换关系为:

其中,Tt是连续扫描之间的相对刚性姿态变换。P为投影过程,P−1为其逆运算。因此,Xtαβ和Xtαβ是一对匹配元素,我们可以度量对应元素之间的相似性,以验证姿态变换的正确性。由于激光雷达的测量精度问题,噪声不可避免地存在于坐标和强度值中。我们比较了正常的N(x),因为它反映了光滑的表面布局和道路环境的清晰的边缘结构(见图8)。因此,位姿变换的约束可以表示为最小化

其中,∇r(Xtαβ)是局部范围平滑测量,∇是差分算符。e|·|是为了让损失函数更多地关注场景中急剧变化的区域。

2.3 激光雷达里程计回归

为了推断扫描St−1和St扫描之间的6自由度相对位姿,我们构建了一个双流网络。网络的输入是用点向法向量编码的点云矩阵。如图1所示,LO-Net将来自两个独立的特征提取网络流的特征连接起来,然后将这些连接起来的特征传递给以下四个卷积单元。最后三个全连接的层输出输入扫描之间输出6自由度姿态。最后两个全连通层的尺寸分别为3和4,分别用于回归平移x和旋转四元数q。最后,我们得到一个7维向量,它可以转换为一个4×4变换矩阵。

为了减少模型参数的数量和计算成本,我们用fireConv[15]代替了大部分的卷积层,用于激光雷达点云[35]的目标检测。我们遵循[15]来构建我们的特征提取层。由于中间特征的宽度远远大于其高度,因此我们在特征提取过程中只使用最大池法对宽度进行降采样。详细的网络架构在补充材料中有所说明。

同时学习位置和方向方向。在我们的方法中,我们选择四元数来表示旋转,因为它是一个连续的和平滑的旋转表示。四元数q和−q映射到相同的旋转上,所以我们需要将它们约束在一个单位半球上。我们使用Lx(St−1;St)和Lq(St−1;St)来分别演示如何学习相对平移和旋转分量。

其中xt和qt为相对平移和旋转分量,xtqt表示它们预测的对应分量。l是欧几里得空间中的距离范数,我们在本文中使用ℓ2-范数。由于平移分量和旋转姿态分量在尺度和单位上的差异,之前的工作[17,34]给旋转损失提供了一个权重正则化器λ来联合学习6自由度姿态。然而,当使用来自不同场景的新数据时,需要调整超参数λ。为了避免这个问题,我们使用两个可学习的参数sx和sq来平衡损失项[16]中的平移分量和旋转分量之间的尺度。

我们在训练期间对所有场景使用sx=0.0和sq=−2.5作为初始值。

2.4 掩码预测

在静态刚性场景中给定连续扫描St−1和St,我们可以通过变换和圆柱投影得到编码数据矩阵对的点匹配关系,如第2.2节所示。激光雷达点云被认为是场景的三维模型,通常包含道路环境中的汽车、行人等动态对象。这些因素可能会抑制里程计回归的学习管道。

基于编码解码器架构(见图1),我们部署掩模预测网络[43,38]来学习如何补偿动态对象以提高学习特征的有效性和网络的鲁棒性。编码层与里程计回归网络的特征提取层共享参数,并同时联合训练这两个网络。反褶积层是fireDeconv[15]的变体,采用了跳过连接。详细的网络体系结构在补充材料中有所描述。

预测的掩模M(Xtαβ)∈[0,1]表示了几何一致性是否可以建模的区域,并隐式地保证了在姿态回归网络中学习到的特征的可靠性。因此,方程(5)中表示的几何一致性误差由下式定义:

请注意,我们没有使用地面真实标签或监督来训练掩模预测。该网络可以通过将预测掩码的所有值设置为0来最小化损失。为了避免这种情况,我们添加了一个交叉熵损失作为一个正则化项

我们最终的里程计回归目标函数是

2.5 建图:扫描到建图的细化

连续扫描到扫描匹配可能会引入累积误差,而且当连续帧之间的可用公共特征点有限时,也可能会受到影响。因此,我们维护一个从以前的扫描重建的全局地图,然后使用该地图和当前扫描之间的配准来细化里程计。与传统的扫描到建图方法[41,42]直接匹配所有检测到的边点和平面点不同,我们使用正常信息(由LO-Net估计)从平滑区域中选择点,并使用掩模(也是LO-Net的输出)来排除移动对象中的点。

在测试时间t时,设[Tt,St]为来自LO-Net的数据。Tt是LO-Net计算的里程计结果,用作建图的初始姿态。St是一个包含每个点的强度、范围、法线值和掩模值的多通道数据矩阵。每个点的坐标可以根据其范围值计算出来。建图模块将扫描和里程计作为输入,然后将点云匹配到全局建图上。图3显示了我们的建图模块的示图。细节如下:

图3. 建图模块连续计算了激光雷达在世界坐标系中的低漂移运动,并利用激光雷达数据构建了一个遍历环境的三维地图。文中解释了函数符号的具体含义

∗:基于St的法向量通道,我们定义了c来评估局部区域的平滑性:

其中,Nk为St的法向量通道。符号∗表示卷积运算。K是一个3×5的卷积核。对于K,中心元素的值为-14,其他元素的值为1。我们为St中的每个点计算c,并按递增的顺序对值进行排序。列表中的第一个nc点,除了掩模的标记点,被选择为平面点,因为它们在平滑区域。

Π:计算激光雷达姿态相对于其第一个位置的初始估计值:Minit=Mt−1Mt−2−1Mt−1,其中Mt是t时刻的激光雷达变换。

Ψ:利用Tt的线性插值来补偿自我运动,从而消除了St中激光雷达点云的运动畸变。然后,使用Minit将校正后的扫描St转换为地图所在的全局坐标系,并准备匹配。

 假设pi=(pix,piy,piz,1)T是扫描St中的一个点,mi=(mix,miy,miz,1)T是之前扫描建立的地图中的对应点,ni=(nix,niy,niz,1)T是mi处的单位法向量。建图的目标是找到最优的三维刚体变换:

Θ:通过求解方程(12)迭代注册扫描到建图上,直到最大迭代次数。然后,通过累积迭代 Mk和初始姿态Minit来计算最终的变换Mt

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

Σ,N:在地图中添加新的点云。然后,删除最早的点云扫描,只在地图中保留转换后的扫描。

这种基于建图的细化与扫描序列一起迭代执行。它可以进一步提高估计的精度,如第2.2节所示。

实验结果

我们使用的点云数据由Velodane HDL-64 3D激光雷达传感器捕获(64束激光束,10Hz,收集约130万点/秒)捕获。因此,在对数据矩阵进行编码时,我们考虑了点云的稀疏性,设置了H=64和W=1800。通过裁剪矩阵的两端,输入数据矩阵的宽度被调整为1792。在训练过程中,将输入序列的长度被设置为3。我们通过选择扫描[St−2,St−1],[St−1,St],[St−2,St]来形成时间对。LO-Net预测了成对之间的相对转换。整个框架都是用流行的张量流库[1]来实现的。在训练过程中,使用KITTI三维目标检测数据集对掩模预测网络进行预训练,并同时训练所有层。初始学习速率为0.001,每10个周期后呈指数衰减,直到0.00001。式(10)的损失权值分别设置为λn=0.15和λr=0.05,batch size为8。

我们选择了默认参数的Adam[18]求解器以进行优化。该网络是在一个NVIDIA 1080TiGPU上进行训练的。对于建图模块,我们设置了每个扫描的点数nc=0.01HW,地图中的扫描数量nm=100,迭代次数niter=15。

3.1 数据集

KITTI:KITTI数据集[10,11]由22个独立的序列、立体灰度和彩色相机图像、动态激光雷达传感器捕获的点云和校准文件组成。序列00-10(23201个扫描)提供了从IMU/GPS读数中获得的地面真实姿态。对于序列11-21(20351个扫描),没有可用的地面真相,并为基准测试目的提供。该数据集是在各种具有动态物体和植被的道路环境中驾驶时捕获的,如高速公路、乡村道路和城市地区。行驶速度高达90公里/小时。

FORD:FORD校园视觉和激光雷达数据集[22]由时间同步的2D全景图像、3D激光雷达点云和IMU/GPS数据组成。和KITTI一样,激光雷达数据集是通过安装在车辆顶部的三维激光雷达捕获的。该数据集包含在不同城市环境中收集的两个环路闭合序列,并且比KITTI数据集有更多的移动车辆。

3.2 里程计结果

基线:我们将我们的方法与几种经典的激光雷达里程计估计方法进行了比较:icp-point2point(ICP-po2po)、icp-point2plane(ICP-po2pl)、GICP[28]、CLS[32]、LOAM[42]和Velas等[33]。前两种ICP方法都是使用点云库[27]实现的。据我们所知,[33]是唯一一种基于深度学习的激光雷达里程计方法,具有可比较的结果,但它没有公开的代码。我们的实验包含了使用公开可用代码的其他评估方法的结果,以及一些结果甚至比最初发表的论文更好。对于LOAM算法,它在KITTI里程计评估基准[11]中获得了基于激光雷达的方法中最好的结果。为了使基于地图的负荷优化能够在每次输入扫描中运行,并确定算法的全部潜力,我们在最初发布的代码中进行了一些修改和参数调整。环闭合检测并不是用于所有的方法,因为我们的目标是测试准确的里程计估计的极限。

图4. 轨迹(红色)和在Ford数据集1上建立的LONet+地图。我们重建的轨迹(不强制环路闭合)有小的漂移,并准确地形成闭环(黄色圆圈)。

我们首先在KITTI数据集上进行了训练和测试实验。然后,基于仅在KITTI数据集上训练的模型,我们直接在Ford数据集上测试模型,而无需进行任何进一步的训练或微调。我们使用KITTI里程计评价指标[11]来定量分析里程计估计的准确性。

表1. KITTI和Ford数据集的odometry结果。我们的网络在KITTI序列上进行训练,然后在两个数据集上进行测试。

表1显示了该方法在KITTI和Fort数据集上的评价结果。可以看出,LO-Net+建图的结果略优于LOAM,且明显优于其他结果。虽然两个数据集之间存在差异,如不同的激光雷达校准参数和不同的系统来获取地面真实值,但我们的方法仍然在被评估的方法中达到了最好的平均性能。

图5. 我们方法在KITTI Seq 10上生成的三维轨迹图。该建图模块有效地减少了在LO-Net中产生的垂直漂移

图5显示了我们的方法在不同阶段的三维轨迹图。图4和图6显示了由不同方法产生的一些轨迹。图7显示了KITTI Seq 00-10上的平均评估误差。在我们的补充材料中显示了KITTI和Ford数据集的更多估计轨迹。

图6. KITTI Seq 08的轨迹图与地面真值。我们的LO-Net+建图产生了最准确的轨迹

图7. 对KITTI序列00-10的评估结果。我们展示了平移和旋转相对于路径长度间隔的平均误差。我们的LO-Net+建图在所有评估方法中取得了最好的性能。

消融实验:为了研究在第3节中提出的不同损耗分量的重要性,我们通过训练和测试使用不同损耗组合的LO-Net,对KITTI数据集进行了消融研究。如表2所示,该网络在进行完全损耗训练时,该网络的平均性能最好。

3.法向量结果

由于KITTI和Ford数据集不能为法向量评估提供基准,我们比较了用PCA和Holzer[14]的方法计算出来的法向量结果。主成分分析通过从其周围的相邻点拟合一个最小二乘平面来估计某一点上的表面法线。在我们的实验中,我们选择了半径r=0.5m和r=1.0m作为尺度因子,以确定一个点的最近邻集合。如图8所示,我们估计的法线可以提取出平滑的场景布局和清晰的边缘结构。为了定量比较,对r=为0.5m的PCA计算出的法线进行插值并作为地面真实值。然后利用点余弦距离计算预测的法态值与地面真实值之间的误差。

其中,角度ei为pi点处的正态误差,ni和ˆni分别为点pi的地面真值和预测的法态向量。ˆni∈N表示点是具有地面真正态的有效点。在KITTI数据集上执行的正常评估如表3所示,我们的方法在大多数指标下优于其他方法。这些指标包括ei的平均值和中值,以及角度落在给定阈值[9,37]范围内的"好法线"。“GT中值”表示我们为所有点设置了一个正常方向,并使用地面真相的中值作为基线。评价表明我们估计的法线可以作为道路场景的几何一致性约束的可靠性质。

图8. 在KITTI数据集上的正常结果的可视化比较。不同的颜色表示不同的正常方向。我们的结果显示了光滑的表面布局和清晰的边缘结构。这些图像经过了裁剪和重塑以获得更好的可视化。

3.4 掩码可视化

我们在图9中可视化了我们的网络预测的掩码示例。突出显示的区域表明,LO-Net已经学会了识别动态物体,并倾向于掩盖植被为无法解释,并表明该网络在里程计回归中对这些区域的关注较少。动态对象和扫描序列之间的关系对于里程计估计问题很重要。它们很难显式地建模,但可以由我们的网络隐式地学习。

图9. 在数据矩阵及其相应的RGB图像的范围通道上的掩模的样本可视化。黄色像素表示周围环境中不确定的点,如移动汽车、自行车等点。这些图像被裁剪和重塑,以更好地可视化。

3.5 运行时间

激光雷达扫描点云是连续输入的,及时处理这些数据对于机器人应用是至关重要的。请注意,与基于图像的计算机视觉应用不同,常用的激光雷达传感器,如KITTI和Ford数据集中使用的velodyne HDL-64以10Hz的速度旋转,即每次扫描0.1秒。因此,这里的实时性能意味着每个扫描数据的处理时间都小于0.1s。我们选择了NVIDIA 1080 Ti GPU和英特尔酷睿i7 3.4 GHz 4核CPU。在测试时,LO-Net的数据批大小设置为1。表4显示了Seq上的平均运行时间。00年的KITTI数据集。我们的框架的平均处理时间每次扫描约为80.1 ms。合理地说,我们的大部分运行时间都花在了建图过程上。与大多数传统的激光雷达里程计估计算法相比,包括3.2节中评估的方法,我们基于地图的优化是闪电般的快速,因为我们使用了新的新表示。我们的方法通过在GPU平台上的直接pipeline现实时性能。对于性能较低的平台,我们还可以通过LO-Net的并行性和建图来加快处理速度。目前,我们的框架的一些部分运行在CPU上,我们可以在GPU上实现它们,以进一步提高速度。

结论

我们提出了一种新的学习框架LO-Net来进行激光雷达里程计估计。将一个有效的建图模块耦合到估计框架中,以进一步提高性能。在公共基准上的实验证明了我们的框架比现有方法的有效性。但是仍然有一些挑战需要解决:

1)点云被编码到数据矩阵中,以便输入网络。直接处理三维点云对于三维视觉任务更加实用。

2)我们目前的网络是用地面真实数据进行训练的。这就限制了网络的应用程序场景。

在我们未来的工作中,我们将更详细地研究由网络学习到的几何特征表示。我们还计划在这个网络中加入循环单元,以构建与时间相关的特征。我们希望能剔除一个端到端框架,以免除代价高昂的地面真值收集工作。


如果你对本文感兴趣,想要下载完整文章进行阅读,可以关注【泡泡机器人SLAM】公众号

点击阅读原文, 即可获取本文下载链接。

欢迎来到泡泡论坛,这里有大牛为你解答关于SLAM的任何疑惑。

有想问的问题,或者想刷帖回答问题,泡泡论坛欢迎你!

泡泡网站:www.paopaorobot.org

泡泡论坛:http://paopaorobot.org/bbs/


泡泡机器人SLAM的原创内容均由泡泡机器人的成员花费大量心血制作而成,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!

商业合作及转载请联系paopaorobot@163.com

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/147117
 
300 次点击