计算机视觉研究院专栏
作者:Edison_G
今天早上自动驾驶直播,有轰动了出租车领域,成熟的技术支撑该领域的进步,不就相比在一线大城市会陆续体现自动驾驶的优势,今天我们也是和大家来分享自动驾驶的乐趣及相关知识!
我们调查了在文献中发表的关于自动驾驶汽车的研究,重点是自从DARPA挑战以来发展起来的自动驾驶汽车,该系统配备了一个自治系统,可归类为SAE level 3或更高。自动驾驶汽车自主系统的体系结构通常被组织成感知系统和决策系统。感知系统一般分为负责自动驾驶-汽车定位,静态障碍物测绘,移动障碍物检测与跟踪,道路测绘,交通信号化检测与识别等任务的多个子系统。决策系统通常被划分为许多子系统,负责路线规划、路径规划、行为选择、运动规划和控制等任务。
在本调查中,我们提出了自动驾驶汽车自治系统的典型架构。我们还回顾了有关感知和决策方法的研究。此外,我们还详细描述了在Universidade Federal doEsp´ırito Santo(UFES)开发的自动驾驶汽车自主系统的体系结构,该系统名为智能自主机器人汽车(IARA)。最后,我们列出了学术界和科技公司开发的突出的自动驾驶汽车研究平台,并在媒体上进行了报道。
1.案例——来自知乎(青红fly)
以百度Apollo的软件架构为例,自动驾驶系统核心需要解决几个问题:
我在哪儿 -- 高精度地图,定位;
当前我周边环境是怎样的 -- 感知和融合;
未来我周边环境可能会怎样 -- 预测;
在以上信息下我应该怎么走 -- 决策,规划,控制。
感知
目前自动驾驶主流传感器主要包含相机,激光雷达,毫米波雷达以及超声波雷达,他们各有自己特点。
相机最接近人的视觉感知,对色彩信息等敏感,但是缺少三维空间信息,在L4自动驾驶中主要用于感知红绿灯等信息。相机二维检测的基本趋势是由原先的two-stage anchor-based朝one-stage anchor-free方向发展,要解决的主要是诸如小物体检测,长尾检测,速度提升等检测领域的经典问题。
但只知道物体在图像上的位置是不够的,所以一般还会利用平面或物体形状等几何假设,进一步投影变换计算出世界坐标,当然也有直接把该过程端到端做到网络里的。在该领域个人认为近年来进步不大,像特斯拉等基于神经网络的方法本质上还是数据为王的多任务学习和相机投影参数拟合,换一个相机配置大概率是要重新弄一波的。
也有研究是做双目深度估计的,相比于单目相机其深度信息有可数学推导的实际意义,但碍于baseline大小,深度信息也做不到太远。今年CVPR我们也有一篇相关研究,利用shape的先验知识来辅助做双目3D检测,在相关benchmark上取得了不错的结果,但说实话离落地有一定距离,感兴趣的可见论文(https://arxiv.org/pdf/2004.03572.pdf):
激光雷达天然自带三维信息,是L4自动驾驶的主力传感器。从学术会议的趋势来看激光雷达检测相关的研究是近年的一个热点,缺点是传感器比较昂贵可视距离做不到太远。但个人认为随着商业的推动和技术发展,它会像固态硬盘一样便宜起来。
毫米波雷达对动态物体速度信息敏感,能精准地测量速度,缺点是误报比较多,而且由于相关厂商的高度垄断和封装化,该传感器很少能拿到原始数据,能做的事情不多,相关研究进展比较少。超声波雷达了解不多,主要用于泊车等场景,像法雷奥泊车产品等已经面世多年,近年相关研究和进展其实并不多,貌似多见于各大PR稿中。
融合
融合是一个挺宽泛的概念,本质是结合多个传感器的结果进行推理判断,最终给出全局唯一的结果。
感知融合可以粗分为两种类型:先对原始数据进行处理再统一出结果的前融合;和每个传感器单独出结果再对结果进行处理的后融合。这个同定位领域的紧耦合松耦合概念非常像,名字叫法不同而已。
当前自动驾驶领域应用最多的是后融合。基本工作原理是会维护一个全局的物体列表,每个传感器的结果到来后,会在物体列表中进行匹配并更新状态,如果没有物体能匹配上则创建新的全局物体并加入列表。
后融合优点十分明显,它对各个传感器的时间同步要求没那么严格,同时能对传感器有容错,某个传感器坏掉不至于系统立马瘫痪。缺点是精度相比于前融合会有损失,同时由于每个传感器的特点,融合策略的不同选择可能会带来意想不到的结果。比如毫米波雷达有很多误检,所以在很多融合策略中该传感器并不会创建全局物体而只负责更新,那在其它传感器也没工作的时候就会带来系统层面的误检(特别是一些不带激光雷达的系统)。
前融合应该算是一个研究发展趋势,随着传感器同步做得越来越好,相信更多的研究成果会出来,个人感觉多sensor的multi-modal detection会是感知融合后面的一个发展方向,因为就单纯从信息损失角度来说前融合的精度也是必然比后融合要好的。
预测
轨迹预测任务旨在根据交通参与者历史和环境信息,对该目标未来的意图或轨迹进行预测,是自动驾驶系统进行有效提前决策的重要信息之一。
交通参与者未来的意图或轨迹主要受几个因素影响:自身的内在意图,周围的动态环境比如其它行人车辆,静态环境比如道路信息等。相应的预测主要有几个研究方向和难点:
内在意图的多模态(multi-modal prediction)建模。不同于物体检测等判别问题,轨迹预测在很多时候天然是多模态的,也就是可能存在多个合理的正确真值。比如在十字路口相同的车辆情况,A车可能想左转, B车可能会直行。如何对不同意图进行建模,使预测方法能够生成较为完善的预测结果是近两年预测研究的一个热点。
动态目标交互影响关系建模。从早年的social force到近几年的social lstm等,trajectory研究是一个独立于自动驾驶存在已久的研究课题,但说实话真正能落地到自动驾驶系统的研究不多。
道路结构和交通信息等建模,使得预测结果可解释与更可靠。目前Honda美研,Uber,Waymo等研究机构也有越来越多的文章落点在此,比如Waymo最近的论文VectorNet就是重点研究怎么对地图进行高效建模。
有一篇论文主要研究动态物体间的交互建模。出发点是当前的很多建模方案例如pooling和attention,都是基于目标之间的欧式距离来判断交互关系的强弱,但我们认为这种基于欧氏距离的判断方法,不能很好的处理现实生活中复杂的情况。比如下图的三组行人,红色两组虽然距离较远,但是表现出了跟随的行为,而红蓝两组虽然距离较近,但是没有产生很强的相互作用。
针对该问题,我们提出了使用基于行人组层面的标注来解决,通过将有相似行为以及目的地的行人分为小组,并对组内行人进行关系标注,来对整个场景中的行人关系进行详尽的抽取。实验结果表明在ETH和UCY数据集上取得了超过10%的提升。当然该论文还是比较偏向于trajectory研究,在自动驾驶落地上有一定借鉴意义但作用不是非常大,感兴趣的可见论文(https://arxiv.org/pdf/2004.10402.pdf)。
总结
从软件算法层面来看,怎么更好地还原出物体空间位置并预测他们未来的意图或轨迹会是近两年以及未来的一个技术研究热点。从自动驾驶落地来看,自动驾驶会先以类似域控制器的形式落地到各大车厂的产品上,比如特斯拉的AutoPilot,小鹏的XPILOT,相信消费者会接触到越来越多带辅助驾驶功能的车辆产品。
MIT Autonomous Vehicle Technology Study: Large-Scale Deep Learning Based Analysis of Driver Behavior and Interaction with Automation(https://arxiv.org/pdf/1711.06976.pdf)
自动驾驶涉及到的技术:从大方面来说包括硬件和软件
首先来说硬件,有篇论文Development of Steering Control System for Autonomous Vehicle Using Geometry-Based Path Tracking Algorithm:里面详细讲到了需要的硬件:
至于自动驾驶车辆里面装哪些传感器完全由你的任务确定,比如:如果只需要完成高速公路的自动驾驶,类似Tesla 的AutoPilot 功能,那根本不需要使用到激光传感器;如果是完成城区路段的自动驾驶,没有激光传感器,仅靠视觉是很困难的。
1、选汽车,之前读到一篇媒体报道,讲谷歌(雷克萨斯 RX450h)、苹果(雷克萨斯 RX450h)选车的门道,RX450h 是一辆混动车,附博文地址,主要是考虑到几个方面的因素,一是自动驾驶系统所消耗的电量巨大,混动和纯电动*在这方面有明显优势。另一方面是是发动机的底层控制算法相比于电机复杂太多,与其花大量时间在标定和调试底层上,不如直接选用电动车研究更高层的算法。所以尽量不要选纯汽油车。
2、控制器:
在前期算法预研阶段,推荐使用工控机(Industrial PC,IPC),因为工控机比嵌入式设备更稳定、可靠,社区支持及配套的软件也更丰富。百度开源的Apollo推荐了一款包含GPU的工控机,型号为 Nuvo-5095GC,回头可以查一查。
当算法研究得较为成熟时,就可以将嵌入式系统作为控制器,比如Audi和TTTech共同研发的zFAS,目前已经应用在最新款Audi A8上量产车上了。
3、can卡
工控机与汽车底盘的交互必须通过专门的语言——CAN。从底盘获取当前车速及方向盘转角等信息,需要解析底盘发到CAN总线上的数据;工控机通过传感器的信息计算得到方向盘转角以及期望车速后,也要通过 CAN卡 将消息转码成底盘可以识别的信号,底盘进而做出响应。CAN卡可以直接安装在工控机中,然后通过外部接口与CAN总线相连。Apollo使用的CAN卡,型号为 ESD CAN-PCIe/402
4、全球定位系统(GPS)+惯性测量单元(IMU)
无人驾驶系统依靠GPS+IMU就可以知道自己在哪(经纬度),在朝哪个方向开(航向),IMU还能提供诸如横摆角速度、角加速度等更丰富的信息,这些信息有助于自动驾驶汽车的定位和决策控制。Apollo的GPS型号为NovAtel GPS-703-GGG-HV,IMU型号为NovAtel SPAN-IGM-A1。
5、感知传感器
感知传感器包括视觉传感器、激光传感器、雷达传感器等。
视觉传感器就是摄像头,摄像头分为单目视觉,双目(立体)视觉。比较知名的视觉传感器提供商有以色列的Mobileye,加拿大的PointGrey,德国的Pike等。
激光传感器分为单线,多线一直到64线。每多一线,成本上涨1万RMB,当然相应的检测效果也更好。比较知名的激光传感器提供商有美国的Velodyne和Quanergy,德国的Ibeo等。国内有速腾聚创和禾赛科技。
雷达传感器是车厂Tier1的强项,因为雷达传感器已经在汽车上得到了广泛使用。知名的供应商当然是博世、德尔福、电装等。
软件方面:
(1)操作系统
推荐使用 Linux 作为无人驾驶研究的操作系统。大部分做无人驾驶的团队都用的 Linux,最常用且普及率很高的当属 Ubuntu 系列。
(2)开发环境安装
开发环境涉及很多实际使用的库:
QT: 主要作用是做交互式的界面,比如在界面中显示当前传感器采集到的各种信息。界面交互会明显加快开发者调试程序和标定参数的过程。
OpenCV:一个非常强大的库,其中封装了大量的可应用于无人驾驶研究的函数,包括各种滤波器算法、特征点提取、矩阵运算、投影坐标转换、机器学习算法等。当然最重要的是,它在计算机视觉领域的影响力,相机标定,目标检测、识别、跟踪的接口使用起来十分方便。电子版:
libQGLViewer:OpenGL 适配 qt 的一个库,编程接口及方法与 OpenGL 大同小异,我们经常在各大无人驾驶公司宣传画上看到的环境感知信息的显示,就完全可以用 QGL 做出来。
Boost:有着“C++准标准库”之称。对于C++开发者来说,方便直接调用,Boost是基于标准C++开发的.
QCustomplot:可以通过平面图的形式显示车载传感器的信息。鉴于 qt 内部只提供了基本的直线、圆等绘图工具,使用起来并不是很方便,因此QCustomplot诞生了。简单地调用API,然后把想要显示的数据作为参数输入进去,就可以绘制出下面这些很棒的图形。而且可以很方便地拖动和缩放。
✄------------------------------------------------
如果想加入我们“计算机视觉研究院”,请扫二维码加入我们。我们会按照你的需求将你拉入对应的学习群!
计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!
扫码关注我们
公众号 : 计算机视觉战队
关注回复:自动驾驶,获取源码