深度学习LiDAR定位:L3-Net
深度学习LiDAR定位:L3-Net
摘要
本文提出L3-Net——一种新颖的基于学习的LiDAR定位系统,可实现厘米级的定位,与现有最高水平的传统定位算法相媲美。与传统定位算法不同,本文创新地实现了使用各种深度神经网络结构来建立基于学习的定位算法。首先,L3-Net会学习专门针对不同现实驾驶场景中的匹配而优化的局部描述,在解决方案空间中建立的成本量上的3D卷积显著提高了定位精度。其次,使用RNN对车辆动力学进行建模,从而获得更好的时间平滑度和准确性。然后,本文使用新收集的数据集全面验证了L3-Net的有效性。最后,本文使用了具有挑战的SunnyvaleBigLoop序列(在采集的地图和测试数据之间间隔了一年时间的序列)进行测试,测试结果表明,L3-Net在这些数据集中具有很低的定位误差,证明了其在实际工业实现中的成熟度。

背景及问题描述
传统LiDAR定位算法流程与基于学习的定位算法流程对比如图1所示。其中,传统算法的步骤通常是:特征描述(如点、平面、杆、2D栅格上基于高度的高斯特征等)、地图匹配、匹配误差的计算、空间搜索或优化(如全搜索或由粗到精的搜索,蒙特卡洛采样或迭代梯度下降最小化)。这些传统算法中,通常需要利用点云的几何特征、反射强度特征来进行配准或滤波,实现定位。常见的有基于ICP、NDT、直方图滤波、卡尔曼滤波等的定位算法。尽管其中一些算法具有不同场景下出色的准确性和鲁棒性,但通常需要大量的工程工作来调优流程中的每个模块,并设计硬编码的特征和匹配方法。此外,这些传统定位算法的系统类型对运行场景有很强的偏好。要使一个通用的定位系统能够适应所有具有挑战性的场景需要巨大的工程努力,这通常是极其困难的。

图 1 传统与基于学习的定位算法流程图
而基于学习的方法以数据驱动的方式为上述问题的解决开辟了一条全新的道路。
主要贡献
(1)根据作者了解,这是当时第一个基于学习的,用于自动驾驶的LiDAR定位框架,可直接处理点云并准确估计车辆的位置和方向,并能得到与当时最好的算法相媲美的效果。
(2)创新性的使用3D卷积学习如何调整x,y,yaw这三个维度上的匹配代价以提高定位精度
(3)将提出的算法在同一条道路上在不同时间进行了多次试验,并在各种城市道路上进行严格的测试;发布数据集,数据集包含超过380公里的真实交通驾驶场景的数据,适合定位任务。
主要原理及思路
L3-Net主要由Keypoint Selection、Descriptor Extraction、Cost Volume and 3D CNNs、Probability Offset Volume、以及Temporal Smoothness五个部分组成。输入为已构建的点云地图和行驶时的LiDAR观测数据。接下来分五个部分分别描述L3-Net的细节。L3-Net网络架构如图2所示:

图2 L3-Net的架构图
1、Keypoint Selection
3-Net中关键点选择方法是:
(1)选取邻域内满足一定密度的点。
(2)估算邻域内的点的线性度和散度,挑出具有强线性和散度的点作为候选关键点。
(3)根据组合的几何特性排序,并由高到低,选取最少数量的候选点作为关键点,同时确保这些新选出来的点各自与其它点保持一定空间距离。
2、Descriptor Extraction
描述子提取的方法为:
(1)为每一个关键点选取邻域内64个点,每个点包含x,y,z,r(reflection)四维数据,故一个关键点描述子的提取输入为64x4的张量。
(2)使用mini-PointNet对关键点特征进行提取,输出得到32维的描述子。
(3)使用参数共享机制为地图和实时点云数据提取特征。其中,mini-PointNet主要包含由3个堆叠的全连接层和一个最大池化层组成的多层感知机(MLP)。
3、Cost Volume and 3D CNNs
3.1、Cost Volume
匹配代价描述的是实时点云帧与地图之间的匹配误差。对于某一个关键点,计算匹配代价的方法为:
(1)给定一个预测的位姿,将局部的实时点云帧中的所有关键点变换到地图的全局坐标中。
(2)将预测位姿周围的空间分别按照x,y,yaw三个维度划分,得到以下解空间的采样:

(3)将关键点根据下式进行变换,并提取其在地图中的特征描述子。

(4)计算实时关键点的描述子与地图中的描述子之间的欧氏距离,将该距离作为匹配代价。
3.2、Regularization
正则化步骤通过构建3D卷积网络实现,这一步骤是为了提高收敛速度并避免过拟合问题。3D卷积网络由三个3D卷积层组成,前两个卷积层使用ReLU激活函数和批处理正则化,其中批处理包含来自单个帧的所有关键点。最后一个卷积层则直接输出解空间的匹配代价。
4、Probability Offset Volume
此部分作者引入概率偏移量来表述解空间所有关键点的一致性,也就是实时点云与地图在给定偏移量情况下的匹配代价量。计算概率偏移量的步骤是
(1)假设所有关键点是独立的,则在某一偏移下的匹配概率为:

(2)将所有关键点的偏移匹配概率累乘并取对数,得到在偏移为delta_T情况下实时点云与地图的整体匹配概率:

(3)通过reduce average操作将其边缘化为pasi的成本量。(4)接着通过softmax将上述成本量归一化,并作为整体的匹配概率。
(5)通过reduce sum操做分别提取x方向,y方向以及航向角pasi的偏移概率向量作为最终输出。
5、Temporal Smoothness
在传统算法中,直方图滤波可以通过历史的定位分布来推测当前的匹配定位分布,保证了时间平滑性。在本文中,作者引入RNNs来获得这一事件平滑效果,更具体的来说,是通过LSTM网络实现。
实验结果
从表1中的定位结果对比来看,L3-Net在各种场景下的定位精度都达到很高的水平,实现了厘米级定位。在小于0.1m的准确率上,均高于90%,性能稳定。通过是否使用RNN进行时间平滑来的对比看,经过RNN网络进行时间平滑后的定位精度有更大的提高。
表1 L3-Net点云定位算法与其他算法的对比

图3展示的是成本量、概率偏移量在固定偏航和选定关键点的(x,y)轴上可视化结果。可以看到,在使用概率偏移量表达定位匹配度后,匹配结果更加清晰明了。最右侧一栏是最终估计的偏移量(0.538m,0.993m,1.001°)及ground truth(0.524m,0.994m,1.044°)的对比。

图3 网络不同步骤的输出可视化
结论
作者提出了一种专为自动驾驶应用而设计的新颖的基于学习的LiDAR定位框架。该框架将传统定位流程中需要手动调整算法的模块替换为基于学习的深度神经网络,使得定位系统能够更具鲁棒性,定位精度也可以达到现有(2019)最高水平。
深度学习LiDAR定位:L3-Net的更多相关文章
- 2020厦门大学综述翻译:3D点云深度学习(Remote Sensiong期刊)
目录 摘要 1.引言: 2.点云深度学习的挑战 3.基于结构化网格的学习 3.1 基于体素 3.2 基于多视图 3.3 高维晶格 4.直接在点云上进行的深度学习 4.1 PointNet 4.2 局部 ...
- 【深度学习Deep Learning】资料大全
最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books by Yoshua Bengio, Ian Goodfellow and Aaron C ...
- [深度学习大讲堂]从NNVM看2016年深度学习框架发展趋势
本文为微信公众号[深度学习大讲堂]特约稿,转载请注明出处 虚拟框架杀入 从发现问题到解决问题 半年前的这时候,暑假,我在SIAT MMLAB实习. 看着同事一会儿跑Torch,一会儿跑MXNet,一会 ...
- 【腾讯Bugly干货分享】深度学习在OCR中的应用
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5809bb47cc5e52161640c5c8 Dev Club 是一个交流移动 ...
- #Deep Learning回顾#之基于深度学习的目标检测(阅读小结)
原文链接:https://www.52ml.net/20287.html 这篇博文主要讲了深度学习在目标检测中的发展. 博文首先介绍了传统的目标检测算法过程: 传统的目标检测一般使用滑动窗口的框架,主 ...
- (转)神经网络和深度学习简史(第一部分):从感知机到BP算法
深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...
- 【转】贾扬清:希望Caffe成为深度学习领域的Hadoop
[转:http://www.csdn.net/article/2015-07-07/2825150] 在深度学习(Deep Learning)的热潮下,Caffe作为一个高效.实用的深度学习框架受到了 ...
- paper 53 :深度学习(转载)
转载来源:http://blog.csdn.net/fengbingchun/article/details/50087005 这篇文章主要是为了对深度学习(DeepLearning)有个初步了解,算 ...
- 从Image Caption Generation理解深度学习
0. 前面的话 建丁让我写一篇深度学习相关小文章,目标读者是国内的开发者.刚接到这个任务时我是颇为忐忑的,写文章要讲究厚积薄发,如果“水之积也不厚”,“则其负大舟也无力”.因为我自知水平很有限,又不是 ...
随机推荐
- 从苏宁电器到卡巴斯基(后传)第03篇:我与鱼C论坛的是是非非
前言与铺垫 当我刚读研一的时候,对自己的未来还是非常迷茫的.尽管我读的是数字媒体技术专业,但是我对这一行根本就不感兴趣,对于平面设计.三维建模以及游戏引擎的使用这一类知识根本就不会,也不太想学(由于我 ...
- POJ3122贪心或者二分(分蛋糕)
题意: m+1个人来分n个蛋糕,每个人分到的蛋糕数必须一样而且还必须是同一个蛋糕上的,问每个人最多分多少蛋糕? 思路: 能想到的方法有两种,一个是直接贪心,另一个就是二分,这个 ...
- Python中python-nmap模块的使用
目录 python-nmap的安装 python-nmap模块的使用 portScanner()类 环境: python 2.7.13 Windows和Linux默认都是不安装python-nmap ...
- LeetCode---11. 盛最多水的容器(Java)
11. 盛最多水的容器 题目地址:https://leetcode-cn.com/problems/container-with-most-water/ 给你 n 个非负整数 a1,a2,...,an ...
- 8张图带你了解iptables的前世今生
1 安全技术和防火墙 1 安全技术和防火墙 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化.定位来自内 外网络的威胁情况,主要以提供报警和事后监 ...
- Python中的pip安装与使用
配置python的环境变量 我们在我的电脑右击->属性->高级系统设置看到环境变量 然后我们点击环境变量,找到系统变量中的Path变量然后双击他新建一项,值为我们安装的python的pyt ...
- c#私钥加密统一JAVA
public static string RSADecryptByPavKey(string pavKey,string strEncryptString) { string clearText = ...
- C++ primer plus读书笔记——第15章 友元、异常和其他
第15章 友元.异常和其他 1. 友元类的所有方法都可以访问原有类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数.成员函数.或类为友元是由类定义的, ...
- 偷梁换柱:使用mock.patch辅助python单元测试
最近在搞软工项目的后端测试,重新复习了一下python的mock.patch,并用它简化了对一些复杂逻辑的测试,在此记录 问题描述 本组的项目比较特殊,设计对教务网站的模拟登陆与信息爬取,同时不少接口 ...
- Linux利用nc命令脚本批量检测服务器指定端口是否开放
一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...