进阶无人驾驶—Apollo感知之旅
知识点
- 超声波雷达
- 拾音器
- 机器感知
- 高精地图
- 参考线
- 相对速度
一、Apollo感知之旅–感知概貌
感知是机器人学科的问题,因为想要制造一个机器人,必须能和环境进行感知,去处理环境的各种障碍物和突发情况。
例如飞机的飞行不需要和鸟的飞行一样,而是要根据自己的特性进行针对性设计和优化,发挥出飞机本身的特性。
感知的目的是寻找机器的特长并发挥出来,向人类学习并做得比人类更好。
人类开车主要是靠耳朵、眼睛、辅助例如倒车影像和雷达来获取信息。机器感知系统则是利用Lidar、Camera、Radar、超声波雷达和拾音器等构成。而且其精度比人的获取信息更高精度。
(1).在地图定位方面,人是使用导航地图,但是机器却必须使用高精度地图才能实现对环境的准确感知。例如在十字路口,人类通常是根据经验以及前车经过十字路口或者转弯变道,而无人车是根据高精度地图的参考线行驶的。
人类驾驶员的感知信息输出主要是大脑输出,一是道路信息,包括车道线位置,左转还是右转。二是动态障碍物信息,主要包括障碍物位置,类别 、形状大小等。
无人车感知的信息输出主要是各个传感器的数据,固定的目标更多是依赖高精度地图,减少在线识别。
当前无人车感知主要是通过摄像头来获取交通信号灯的颜色,灯的语义信息可以由地图提前标注好,长远的目标是通过V2X实现交通信号灯的感知。
相对人类驾驶而言,无人车系统为机器做了很多工作,把固定信息都嵌入到地图里面,在线识别只针对最小集进行处理,以保证系统的高效和鲁棒性。
(2)对维度剖析感知模块
感知可以从小感知到大感知两个维度进行划分。小感知主要是完成感知任务需要具备的功能模块,包括检测、分割、跟踪和融合灯技术。大感知是指感知要真正的为无人车系统服务,需要上下游、例如标定、定位、障碍物行为预测等,也是当前一种研发趋势。
感知模块的维度可以根据划分目标而不同,这里给出一种感知模块的维度划分案例,包括以下6个维度:
名称 | 内容 |
---|---|
传感器维度(输入) | Lidar、Camera、高精度地图 |
输出 | 障碍物、车道线、道路边界和红绿灯 |
问题空间维度 | 2D算法、3D算法,静态帧检测和时序处理 |
机器视觉维度 | 高语义和低语义问题,例如模型计算和几何计算 |
机器学习维度 | 深度学习驱动感知和启发式设计,后处理 |
系统维度 | 硬件软件,以及软硬件一体化 |
二、Apollo感知之旅–传感器选择和安装
本届主要介绍无人车感知系统硬件的搭建,重点讲述传感器的选择和标定。目前无人车中使用的传感器主要有激光雷达Lidar,相机和毫米波雷达Radar。
激光雷达
测距原理:激光头发射光束,达到障碍物就反射回来,计算时间测得距离,这种测距方式也叫做TOF(飞行时间测距法)
激光雷达传感器好处是自带光源,不受环境干扰,缺点是多线扫描还比较稀疏,特别是远的时候。
64线激光雷达的感知距离只有60-70米,对于高速行驶的无人车还不够。
相机
相机是最像人的一个传感器。它的优点是可以稠密感知,感知所有细节。缺点是单目相机测距不准。
Radar毫米波
毫米波雷达的原理和激光类似,只不过发射的是毫米波。由于它也是主动式感知设备,不太受天气、光照的影响。同时毫米波雷达还有多普勒频移效应可以测量与障碍物之间的相对速度。
其优点是测距、测速比较准,缺点是噪点很多,例如在空旷的地方反馈很多的回波,实际可能是路面的反馈信号而不是障碍物。其次它对于非金属的反射信号比较弱,召回比较低,例如在它面前走过行人有可能漏掉。最后毫米波雷达也是稀疏感知,无法做识别任务。
除了以上三种常见的传感器,还有一些用的相对少的传感方法,例如超声波,高精地图,Image-Lidar。
2.安装传感器
上图给出的是自动驾驶汽车的传感器安装示意图。传感器的安装对于后续步骤至关重用,需要科学、合理的安装。
为了安全考虑,我们在对车辆设计时会给厂家提供CAD模型,在真正安装之前,需要在软件环境里面放传感器,考虑以下因素对传感器的安装位置做出最合适的决定。
第一是障碍物遮挡情况,这就是为什么很多无人驾驶车的传感器安装在车顶的原因。第二是方便传感器融合。传感器的融合需要不同传感器在视野上有重叠,否则很难进行传感器融合。
三、感知器标定
- 标定的目的
在限号、安装好传感器之后,需要对传感器进行标定。它分为内参标定和外参标定。
内参标定是传感器自身性质,例如Camera焦距定期矫正,Lidar中各激光管的垂直朝向角。外参是传感器之间的相对位置和朝向,一般由6个自由度表示,自由度的旋转矩阵和自由度的水平位移。
- 传感器标定算法
Lidar内参标定:相对于摄像头,激光雷达的内参标定有一定的特殊性。
Lidar-to-GPS外参标定:计算出Lidar与车上GPS的相对位置。GPS的位置由世界坐标系中的3D点表示,因此计算出外参之后可以计算得到Lidar在世界坐标系中的位置。
Lidar-to-Lidar外参标定:计算不同Lidar之间的相对位置。
Lidar-to-Camera外参标定:计算Lidar和相机之间的相对位置。
Camera-to-Camera外参标定:计算不同相机之间的相对位置。
自然场景中的Lidar-to-Camera外参标定:在自然环境中,驾驶车辆进行两种不同传感器之间的位置关系求解。
自然场景中的Bifocal Camera外参标定:双焦点摄像头之间外参的计算,也是就是不同焦点的相对位置。
Camera-to-Radar外参标定:摄像机到毫米波雷达的外参计算。
- 标定案例解析
3D标定间制作
在空旷房间的墙面贴满不同的二维码,然后在标定间中间放置一个基于激光雷达的毫米级高精度Rigel激光扫描仪,通过对墙上二维码的多次扫描,完成3D建模,获得了标定间任何一个点的3D位置。
上图第一列是Tag_ID,表示各个二维码的ID编号,第二栏是二维码四个角的3D位置信息。之后即可在标定间进行不同传感器的参数标定。
- Camera-to-Camera外参标定
假设在采集车前部安装双Camera,Camera1是60度广角短焦距相机,Camera2为30度广角长焦距相机,两者视角部分重叠。
将车开到标定间,双Camera采集标定间的二维码,获得多个二维码对应四个角点的UV坐标,同时通过查找表得到对应点在3D世界坐标系(Rigel)中的坐标。
求解采集点的PNP问题的,得到相机相对于世界坐标系的位移矩阵Ts和Tl,将这两个相对位移矩阵相互传递,得到二者之间的相对位置。整个流程如下图所示。需要注意的是,标定完传感器之后需要进行验证。
相机标定的验证方法为,将长焦相机的图像投影到广角相机图像中,看看重合度如何。如果出现重影或者连接不好,则需要重新标定。
- Lidar-to-Camera外参标定
将Camera看到的所有Tag角点与Rigel扫出的对应点的3D坐标进行匹配,求解PNP问题,得到Camera相对于Rigel世界坐标系的相对位置。
将Lidar激光雷达扫描得到的点云与Rigel是稠密的点云之间进行ICP(Iterative Closest Point,迭代最近点)匹配,得到激光雷达相对于Rigel的位置。最后将两个位置矩阵相互传递得到Camera 和 Lidar之间的相对位置,具体流程如下所示。其标定结果验证方法是将激光雷达感知到的3D点云投影到Camera拍摄的图像上,看边界是否一致,如果不一致需要重新标定。
- Lidar内参标定
借助Rigel,在开阔平坦的场景下进行完整扫描,得到场景的点云。然后,将要标定的激光雷达对同一个场地进行同样的扫描,之后对两次扫描的点云进行匹配,如果激光雷达的内参不准确,会出现远距离地面点浮在空中的现象。
- Lidar-to-GPS外参标定
将车辆在空旷地区绕八字行驶多次,记录多个时间点GPS给出车辆的位置信息,将Lidar捕捉的多帧点云投射到世界坐标系中,并进行拼接,求解优化获得外参。
- 自然场景的Lidar-to-Camera外参标定
由于没有了Rigel-Tag,需要在标定的场景中寻找具有明显边缘的物体作为参照物,将该参照物的点云边缘和Camera拍摄图像的边缘对齐作为参数标定效果的考量指标,如果对齐,这表示标定结果良好。
- 自然场景中的Bifocal Camera外参标定
过程类似于Camera-to-Camera外参标定,但是需要在自然场景中找到边缘锐利的物体作为参照物。
- Camera-to-Radar外参标定
Camera-to-Radar外参标定的重点是得到Radar相对于Camera的Pitch角的上下倾斜问题。通常情况下Radar是水平安装的,问题就转换为求得Camera相对于地面的Pitch角。由于Camera-to-Lidar已经标定好,可以通过Lidar采集到的平面信息解决倾角问题。
四、Apollo感知之旅–感知算法
简介:感知算法根据使用的传感器不同而不同。对于激光雷达。本节会介绍两个检测算法,分别是启发式的Ncut和深度学习算法CNNSeg。
- 点云感知
点云障碍物感知的主要任务是感知障碍物的位置、大小、类别、轨迹、速度等。核心是点云检测分割技术,可以用启发式算法NCut和深度学习算法CNNSeg完成。
-启发式方法:NCut
Ncut算法的基本思想是基于空间平滑性假设,即空间上接近的点来自同一个障碍物。
首先,利用地图信息对点云进行预处理,例如去掉感兴趣区域之外的点云,降低点云图的复杂度。
然后根据预处理后的点云构建加权图G=(V, E, W),将点云分割转换为图分割的问题,可以利用图聚类的算法求解,最终求解的每一个cluster就代表一个障碍物。该算法的优点是解释性好,缺点是分割规则过于简单,难以应对实际情况(草丛、绿化带),主要原因在于缺乏语义信息。
- 深度学习方法:CNNSeg
主要思想是利用卷积神经网络来处理激光雷达捕获的点云数据,并对点云中的目标进行识别。深度学习是数据驱动的,它把人工构造特征这一任务交给机器和算法去完成(即特征学习)。在百度的深度学习感知实现过程中,团队尝试了很多方法,下面就简单介绍算法研发的历程。
1、将所有点云都投到前视图(front-view)(投影面是一个圆柱面)来构造特征,将点云问题转化为矩阵问题,进而使用深度学习进行处理。通过构建全卷积神经网络对前向视图进行处理。
2、借助自采集车队,采集更多的实际数据,并且扩展数据视角,制作俯视图,通过将俯视图+前视图相结合的方式进行训练。同时,修改Loss函数,包括使用3D回归和Segmentation的损失函数。经过多次实验,发现基于俯视图的Segmentation方法效果最好。该方法目前已经在Apollo中开源,如下所示。
3、因为俯视图没有高度信息,因此我们把前视图和Camara图像加进来进行辅助检查,利用Lidar的测距准和Camera识别准优势完成了Middle-Level Fusion方法(Multi-View 3D Object Detection Network for Autonomous Driving),发表在CVPR 2017。该方法使用俯视图提取Proposal,利用前视图和光学图像辅助进行更加精准的位置回归。其流程如下图所示。
- 视觉感知
视觉感知最早从ADAS发展而来。该方法目前已经难满足自动驾驶的需求。随着深度学习技术的发展,尤其是在视觉领域的巨大成功,视觉感知的主流技术路线已经变为“深度学习+后处理计算”的方法。
该方法带来了以下几个变化,第一是要求计算硬件升级,第二是数据的需求量大增,第三是如何评估保证安全性。面向自动驾驶的深度学习算法具有以下几个特点:
2D感知向3D感知渗透,模型输出更丰富(后处理需要的3D信息、跟踪信息、属性信息等都会放在CNN中进行学习)
环视能力构建(传统方法靠一个Camera完成前向检测、碰撞检测、车道线检测。无人驾驶需要环视)
感知+定位+地图紧密结合
- CNN检测
首先,自动驾驶中,摄像头是安装在车上的,汽车行驶在结构化、规则化道路上,面向的场景更具体,有很多的几何约束可以用来辅助检测。
其次,自动驾驶中的检测模型需要输出的信息更多,包括障碍物的尺寸、朝向。同时自动驾驶还需要考虑时序性。我们称之为局部的End-to-End,检测、2D到3D转换、跟踪三步是自动驾驶视觉感知的组成,后面两步都由CNN来学习,减少人工干预。
第三是多任务学习,网络结构适配。自动驾驶需要针对不同的障碍物特征(车道线,道路边界,定位元素)进行识别,如果分别由专用模型处理,整个处理流程太长,无法满足要求,因此需要做多任务的识别和网络结构的适配。
最后是属性识别,即除了障碍物级别的输出以外,还需了解速度类别朝向等问题,例如车尾灯状态,车门开闭状态。可以通过标注数据,由数据驱动的深度学习来自动学习这些更细的属性。
- CNN分割
分割与detection在本质上是一样的,是对一个目标的不同力度的刻画。分割是一种更细粒度刻画物体边界信息的检测方法,不再是画框,而是进行边缘分割。
在感知中,对于不规则物体,往往需要进行分割处理。例如场景分割和可行驶区域感知。场景分割可以用于多传感器融合,例如对绿植进行分割,结合LiDAR点云,就可以测出绿植的类别和距离。可行驶区域则可以对一些非结构化道路的路径规划提供支持。在车道线感知中,应视具体情况使用分割或者检测方法。
- 后处理
一个完整的系统除了深度学习模型,还需要做一些后处理,后处理是直接针对下游模块,对后续的影响比较直接。在视觉感知中,后处理主要分为三个部分。
第一是2D-to-3D的几何计算。2D到3D的转换需要考虑的因素包括:
- 相机pose的影响
- 接地点
- 稳定性
第二是时序信息计算,主要是针对跟踪处理,需要注意以下几点:
- 对相机帧率和延时有要求,要求跟踪必须是一个轻量级的模块,因为检测已经占>据大部分时间
- 充分利用检测模型的输出信息(特征、类别等)进行跟踪。
- 可以考虑轻量级Metric Learning
第三是多相机的环视融合
- 相机布局决定融合策略,要做好视野重叠。
- 红绿灯感知
红绿灯感知是百度无人车第一个使用深度学习、使用Camera的模块。在当时使用深度学习、GPU和Camera做红绿灯感知是存在很多争议的,但是我们一直坚持走这种探索性的道路,并且成功了。现在车上用深度学习、GPU、Camera进行感知已经是一种共识。
红绿灯感知的任务是在距离停止线50~-2米的范围内精准识别红绿灯亮灯状态。它的难点在于检测精度要求非常高,必须达到三个九(99.9%),否则会出现闯红灯,违法交规的情况。另外召回也不能太低,假设一直是绿灯,但是一秒只召回一帧绿灯,其他都认为是识别错的红灯,则通不过路口,影响通过率和体验。第二是红绿灯感知需要应对各种环境,包括天气和光照。最后是红绿灯的制式非常多,包括距离、高度、横纵、信号状态等,红绿灯感知都需要识别。
- 基于深度学习的红绿灯感知模块
自动驾驶使用深度学习进行红绿灯感知模块的构建,主要分为以下几步。
第一是相机选择和安装
第二是高精度地图交互
第三是深度学习识别灯颜色的变化
例如上图所示,我们看到一条路上有很多红绿灯,检测算***把所有的灯都检测出来,地图会告知需要看几个灯,但是不知道是哪几个。
所以我们需要做到3D到2D的投影,当然需要综合考虑多方面的因素才能解决好这个问题。
- Radar感知
首先我们通过一个实际的点云信息投影的成像,对图进行分析。
可以看到图中有一条明显的道路边界线,这是道路两边的特质栏杆反射信号好,才会使雷达点成直线发布。
- 超声波感知
当然,超声波只能用于近距离的感知,而且也不能知道障碍物的具***置。所以他帮的忙好像并不是很大。
于是我们想到一个方法如上图所示,我们在车上安装12个超声波传感器,每个传感器发布覆盖一个角度,可以来检测三米内的障碍物,为了确定障碍物的位置,我们通过两个感知探头的重叠来确定障碍物的准确位置。
五、Apollo感知之旅–机器学习
机器学习里面存在一个普遍的假设,训练集和测试集是独立同发布的,如果测试和训练没有任何关系,测试效果是没有任何保障的。但是无人车感知的训练集是封闭的,而测试集是开放的。
测试是在开放道路进行的,如果遇到新的障碍物,在训练中从来没有见过,怎么处理?
例如,在城市道路上很少见到卡车,但是高速会遇到很多卡车,而且卡车上的东西很多,如果机器学学习模型没见过这些障碍物,很有可能带来一些错误。
- 可解释性是否需要
无人车的安全需要可解释,出现一个Bad case需要说清责任,需要搞清Bad case是由什么原因导致的,以便改进。
自动驾驶中深度学习模型需要更好的可解释性,归结为如何评估模型让用户知道模型是安全的?模型更新后如何做回归测试?模型的应用边界在哪里?目前,大家认为可解释性可以通过测试来体现,如果大量测试得到相同的结果,那么原理是不是真正的可解释也就没那么重要。
- 其他算法
在感知模块中,除了做基本的检测、分割之外,还有后处理阶段等由公式表示的几何计算问题,是不需要深度学习的。另外,Common sense也不需要深度学习,而且深度学习的效果不好,我们需要其他算法。那么,深度学习模型带来一个结果,其他启发算法给一个结果,怎么来融合?现在主要是基于Double check来提升安全性,还需要其他方法来进行更好的融合。
除了深度学习还需要其他的机器学习方法。
如果数据量小,特征很难从原始数据学习,深度学习的效果可能就受到影响,因此诸如SVM或者随机森林这些机器学习算法,可能需要结合场景选择。
六、Apollo感知之旅–感知的未来
- Sensor迭代
如果在自动驾驶的研究中,发现某一些传感器在感知或者其他模块中具有很大的价值。那么,整个资本市场会投入很多人力、财力研发传感器。随着量产之后,传感器的成本就会大幅降低,更新换代的速率也会加快。
- 深度学习+仿真数据+AI芯片
深度学习已经证明了在感知中很大的作用,但是计算量很大,专门研究车载AI芯片是对这一问题的很好解决方案。
现在很耗时的CNN模型以后都不是瓶颈,而且定制AI芯片的功耗可以足够低,满足车载需求。深度学习需要大量数据的问题,可以通过仿真来弥补。
目前,点云仿真相对简单一些,图像仿真相对困难点,如果仿真这条路可以走通,那么仿真+深度学习不断循环迭代,是非常有前景的。
- 智能交通设施
目前,自动驾驶都是在车上安装传感器进行感知,感知范围、鲁棒性都有待提高,如果将这套传感器步置在道路上、灯上,让它们来感知,然后将实时结果传输给无人车。如车上的传感器失灵,那么路面上的传感器会告知无人车障碍物信息,保证系统安全性。另外在驾驶环境中部署传感器可以拓展感知距离,做到足够安全,提前告知远处的信息。
本次课程总结就到这里,当然整个知识框架是通过学习和摘抄得来,如有不足还请批评指正。