CVPR PAMI青年研究员奖得主Andreas Geiger:自动驾驶中的计算机视觉

Surfing Tech

在今年 6 月召开的 CVPR2018 上,德国图宾根大学及马克斯·普朗克研究所(MPI)自动视觉组负责人 Andreas Geiger 教授摘得了 PAMI Young Researcher Award,该奖项颁发给 7 年内获得博士学位且早期研究极为有潜力的研究人员。


1.png

Geiger 的研究主要集中在用于自动驾驶系统的三维视觉理解、分割、重建、材质与动作估计等方面。他主导了自动驾驶领域著名数据集 KITTI 及多项自动驾驶计算机视觉任务的基准体系建设,KITTI 是目前最大的用于自动驾驶的计算机视觉公开数据集。


2018 年年初,Geiger 出任了北京冲浪科技有限公司 (Surfingtech) 的首席科学家,冲浪科技是一家致力于为全球自动驾驶公司提供多传感器数据解决方案的公司。7 月,机器之心在冲浪科技对 Geiger 进行了专访,谈了谈自动驾驶领域的计算机视觉任务的特点、研究前沿及 KITTI 数据集的最新进展。

 

机器之心:自动驾驶系统都由哪些模块组成?它们之间的依赖关系是什么?

 

自动驾驶系统通常有一个非常经典的、模块化的流水线。

 

首先是感知模块(perception stack),感知模块将地图、三维传感器、二维传感器中的信息给到「世界模型」(world model),世界模型将上述信息,汇总在一张地图中,理解每一个时刻不同的物体相对于路面、道线等的位置,预测下一刻的可选路径都有哪些。随后是一个规划模块(planning model),进行决策。决策的内容也是分层级的。粗粒度的决策需要决定如何从 A 点到 B 点,完成的是类似 GPS 的工作。除此之外还有诸多细粒度的决策工作,例如决定走哪一条车道,是否要暂时占用对向车道完成超车,车速应该设定为多少等。最后是控制模块(control module),控制模块操纵所有的控制器,有高层的控制器,比如电子稳定系统 ESP,也有最基层的控制器,比如控制每一个轮子进行加速和刹车的控制器。

 

机器之心:想要让一个自动驾驶系统作出正确的决策,首先要完成哪些计算机视觉任务?

 

首先是车辆定位:衡量车辆的运动并在地图中进行定位。完成这部分工作的是视觉测距(visual odometry)系统和定位(localization)系统。二者的区别是,视觉测距估计的是车辆相对于前一时间步进行的相对运动,而定位是对车辆在地图中的运动进行全局的估计。定位是可以精确到厘米级的,车辆相对于一些地图中固定的物体(例如电线杆)的距离已经是已知的,基于这些信息,车辆已经可以进行相当不错的路径规划了。

 

然后是三维视觉重建,重建范围通常在 50-80 米,具体需求视行驶速度而定。大部分 STOA 自动驾驶系统会使用激光雷达(LiDAR)进行三维重建。不过也有少部分团队试图直接从图像中恢复三维信息。由于图像中的数据相比之下更为嘈杂,因此完全基于图像的重建是一项更具有挑战性的工作。

2.jpg

 

除了重建之外,你也需要对车辆正前方正在发生的事有充分的理解。因此,你需要进行物体检测,也需要在理解物体是什么的基础上对其进行进一步的分类,而检测和分类会帮助预测其未来轨迹。进行检测和分类的方式是多样的,你可以给每一个物体画一个边界框(bounding box):这是最常见的方式,但是自动驾驶需要在三维的物理世界中进行运动规划,所以你至少要需要一个三维的边界框。

 

更精确的是实例分割(instance segmentation)和语义分割(semantic segmentation)。当物体是形状为凹或者是隧道之类需要穿行的物体时,边界框显然是不够的。实例分割将图像里属于一些特定目标类别的每个实例的所有像素分为一类。实例分割通常在二维图像上进行,但也有三维版本,三维实例分割基本等同于物体重建。而语义分割为图像里每一个像素分配一个语义标签,同一类别的不同实例不做区分。除此之外,全景分割(panoptic segmentation)基本上可以视作实例分割和语义分割的结合。全景分割对那些没有实例只有整体的类别也进行区分,例如天空和植被。天空无法用一个边界框框柱,而植被需要在平时避开,但系统也需要知道在紧急情况下汽车冲上草坪并无大碍(相比之下撞上树或者行人就有很大问题了)。因此语义信息是必要的。

 

接下来是运动估计。根据之前的一帧或数帧,预估视野里的每一个点,或者说每一个物体,在下一帧的位置。一些物体,例如车辆,它们的移动是比较容易预判的,因此运动模型可以进行准确率较高的预测。而另外一些物体,例如行人,会非常突然地变更其运动轨迹,导致运动模型的建立更为艰难。即便如此,较短时间区间(2-3 秒)的动作预测,在动态物体较多的拥挤场景下的决策过程中也仍然扮演着至关重要的角色。

 

上述任务都是各自独立的,但是实际上,收集上述信息的系统并不是各自独立运转的。因此情境推理(contextual reasoning)也有助于给出更准确的预测。例如一群行人通常会同时等红灯、同时过马路,一辆车试图并线时另一辆车会刹车让路,以这些外部信息、先验知识做约束,理解复杂场景会变得更为容易。

 

最后,一个我认为十分重要但是并没有引起较多重视的领域是不确定性推理(reasoning under uncertainty)。人类感官或者车辆传感器拿到的数据中必然包含着不确定性,因此,如何准确地评估不确定性,并兼顾「最小化风险」和「完成任务」,是一个重要的话题。理想情况下,所有上述检测、分割、重建、定位任务都应该在不确定性约束下进行,系统在行进之前应该知道它可能犯哪些错误。

 

机器之心:如何对与自动驾驶相关的计算机视觉任务进行分类?分类的标准是什么?

 

以输入进行分类是一种常见做法。按照输入的来源,可以分为来自激光雷达、摄像头、雷达、乃至车内的其他仪表的数据。按照输入表征也可以进行分类,激光雷达给出的稀疏的点云和摄像头给出的密集的二维图像就是两种不同的表征,采取的算法也有所不同。按照维度也可以进行分类,用于三维输入的算法通常更为复杂,因为如果不采取特殊做法,三维输入会快速耗尽内存资源。

 

另一种分法是按照线索分类。线索可以分为语义线索(semantic cues)和几何线索(geometric cues),几何线索是利用多张图片通过特征匹配和三角对齐得到深度信息。但是因为这种估算的误差与距离呈平方关系,因此有很大的局限性。换言之,人类的视觉系统其实也是不适合开车的,因为我们的视觉系统只是为了在两手张开的距离内进行操作而设计的。人类在开车的时候利用语义线索弥补了这一缺陷:即使只有一张图片,理论上其中并不包含距离信息,人类仍然可以根据大量的先验知识估计其中物体的相对距离。总而言之,自动驾驶系统可以通过安装多个摄像头获得三维信息,也可以通过安装一个摄像头,但是通过强先验来预判会看到什么。理想情况下,我们希望将二者结合。

 

还有一种方法是根据物体是否运动以及如何运动进行分类。首先分为静态部分识别和运动物体识别。对于静态场景来说,有专门的标准重建算法,基于「所有的东西都是静态的」这一假设进行重构。但是事实上,我们需要从多幅拍摄于不同时间的图像中重建场景,这就需要我们设计专门的算法来处理场景中的运动物体。运动物体又可以分为刚性物体和非刚性物体。刚性物体的所有部分一起运动,可以用六自由度变化来描述它在三维空间中的运动轨迹。汽车就是一个刚性物体,而行人就属于非刚性物体,行人有胳膊、腿,彼此之间以关节相连,在运动中,每一个部分的运动轨迹大相径庭,因此刻画行人的运动需要额外的自由度。

3.jpg


Contact us if you need us.

Request a Demo