--关注、星标、回复“SOA”--
自动驾驶的软件系统包括:传感器数据处理->定位模块->感知模块->预测模块->决策模块->规划模块->控制模块这样一个流程。在绝大多数的自动驾驶系统中,上述模块是呈现一个上下游的关系,虽然这样做可以拆分并简化问题,但是其层层依赖的关系导致最后自动驾驶系统很容易被上游模块block,比如说预测模块如果只有感知模块的结果作为输入。本文聊聊“为什么自动驾驶的预测模块需要传感器数据”,以及介绍一些前沿的方法来说说该怎么做。
预测模块的本意,是希望对感知模块的障碍物信息,预测出其未来的意图和未来的行进轨迹。自然的,如前言所述,预测模块的输入就是以障碍物为单位的实例(instance),比如对于车辆,我们需要预测其“在未来是要换道还是跟车行驶”这样的二分类问题,以及预测出其“以一串有序点来表示的”未来的行进轨迹。简单说说一些常用的预测算法。和规划模块一样,预测算法可以分不同的场景和不类型的实例来做,这是因为:1. 不同的实例在不同的场景,决策其未来意图的因素可能是不同的pattern。从算法的角度总结,一般预测有三大类的算法,基于统计学的方法,即从大量历史数据中找到每个场景的概率分布,然后inference的时候基于概率最高的结果即可;基于raster model,将周围场景的障碍物和道路信息等渲染成2D图像,然后利用CNN去学习每个instance的context信息,最后把每个instance的feature crop出来通过global average pooling和一些全连接层进行分类和轨迹点的回归;基于vectornet,将障碍物和道路信息进行向量化,然后用Graph NN建模这些向量,学习出各个实例和道路之间的关系,最后也是通过连接全连接层进行分类和回归。这几类算法在实际的自动驾驶工程中,可能同时存在,也可能会根据场景决策选用什么方法,也可能根据实例的类型来选择不同的方法。上述方法的输入信息,都是抽象数据结构。预测问题本身的挑战,倒不在于如何建模,基本上一家成熟的自动驾驶公司一年以后,都可以把绝大多数的预测问题解决。我们这里讨论一类现有体系无法解决的场景(算是corner case吧):实例的细微运动,如果感知结果并不能捕捉到,那么预测模块是完全不可能得到正确结果的。如下图所示:中间的行人,其前行的意图,可能是开始于抬腿、放下手机,或者是转身正对车辆的动作。而上述一系列的行为,对于感知而言,仅仅是一个包围框(2d bounding box或者3d bounding box,或者是polygon)而这些信息很难反映出微小行为的变化。大概率会出现的结果是,感知的包围框并没有变化。人类司机如果看到这位行人的所有微动作,一定能判断出其表达的意图。这样的问题,用现有的自动驾驶算法框架,是非常难以做好的,当自动驾驶车辆判断出行人的意图时,极有可能是行人已经前进了半米,或者一米的距离之后了。更晚的判断,会导致更多的corner case发生。所以,本文探讨解决类似问题的预测问题。要捕捉到实例个体的微动作,预测模块一定是需要传感器数据的,不能仅依靠感知结果,这里介绍两个方法,可以实现这样的目的。第一篇是轻舟发表的论文,以点云激光雷达为输入,图像光流做监督信息来预测点云的motion。论文题目是:self-supervised pillar motion learning for autonomous driving. 有兴趣的朋友们可以去读一下原论文。这里贴图并简单介绍下。利用前后两帧图像和光流算法来产生motion的监督信息,lidar以pillar为单位也可以利用前后两帧的对比(chamfer matching)来得到motion的偏移,然后把pillar motion给到各个点。多个camera都过一遍,就可以得到360度的motion supervision了,然后投影到lidar的俯视图,就可以去训练学习出lidar点上的motion了。因为全过程没有人工标注,所以是一个自监督的框架。这篇论文思路挺好的,实际在使用的时候,可以重点考虑前向和后向视角、或者FoV较大的camera(比如120或者180度的鱼眼相机等)上面去做,这样latency问题会小一些。然后可以看下论文里贴出的最终效果:第二篇论文,是来自于英国的自动驾驶创业公司wayve,题目是:fiery: future instance prediction in bird's-eye viewf from surrounding monocular cameras. 这篇论文和上一篇不一样,是基于纯视觉的方法,通过环视6个camera在特征空间投影至鸟瞰图(BEV),然后在BEV上面预测每个实例的motion。当然,预测动作肯定没有办法只用一帧数据的输入,这篇论文是使用3帧图像进行训练,然后预测未来四帧图像里面的motion trajectory。先看看结果吧,下图在camera视角和BEV视角都画上了预测出来的motion,并且可以给到具体轨迹的probability。简单介绍一下论文的方法,其实和最近比较火的BEVDET思路类似,都是LSS那篇论文的变形(LSS建模BEV来做分割,BEVDET做检测,而fiery做预测)。每个camera在经过2D CNN之后,其2Dfeature先扩大m倍,以长度n为单位,模拟出深度为mxn的一个特征分布,这样就可以做到对camera特征mxn米的深度感知。然后利用camera的intrinsics和extrinsics把带有深度的特征通过z-axis做pooling得到BEV的特征。方法比较自然,作者非常推崇。本文介绍了为什么要在预测模块中介入传感器数据,以及介绍了两篇论文,分别描述了lidar based和camera based的方案来实现基于传感器数据的motion prediction。最近自动驾驶界的大模型非常火,而在感知模块中融入预测的算法,也成了工业界最前沿的探索。其实本质上来讲,图像和点云的时序模型,自己确实就可以反应出motion intention、motion trajectory的pattern,所以在感知模型上面增加预测的分支,单阶段(one-stage)和双阶段(two-stage)的做法都可以进行尝试。随着自动驾驶行业的发展,越来越多的领先企业看到了用强化学习做pnc的曙光,预测模块如果能被融入感知模块,确实会成为未来的一个方向,这正符合本文所探讨的内容。我觉得这在未来是一个大方向吧,高精尖的预测模型,需要传感器数据,与其连接自感知模块,不如和感知模块的一些分支并行输出,同时感知的特征也可以指向预测分支的网络,其输入既可以是feature embedding,也可以是box corner points这样的数据。畅想完后,总结一下:预测模块当前是基于场景、对不同实例单独做的,而且系统庞大,工程量不亚于感知模块。但是其需要传感器数据,现在有了新的思路利用传感器数据直接进行预测,并且这将在未来引起更多重视,因为自动驾驶从业者的目标,是做成L4。转载自气节说,文中观点仅供分享交流,不代表本公众号立场,如涉及版权等问题,请您告知,我们将及时处理。
-- END --