Apollo技术分享丨基于大数据量化评估仿真的真实性
引言
仿真作为自动驾驶技术的重要组成部分,为自动驾驶算法的快速迭代起到了极其关键的作用。随着自动驾驶技术的快速发展,越来越多的人认识到并感受到了仿真的重要价值,因此最近一段时间以来,“自动驾驶仿真器”被政府、研究机构以及很多商业公司,越来越频繁的提及。
百度作为国内最早启动自动驾驶技术研发的公司,从最开始就认为仿真是自动驾驶领域的核心基建,需要持续的投入大量精力进行研发。4年来,Apollo仿真跟其他仿真器比较有哪些不一样的思考?又有哪些进展?
提到仿真,大家首先想到的就是仿真的优化方向:“仿真一定要真实”,“仿真真实性是仿真能够产生业务价值的基础”。这似乎已经是整个行业的共识。但一直以来,“仿真真实性”都停留在一个“伪命题”状态——一方面很难找到一个大家公认的指标来客观评估/量化“真实性”,另一方面也无法明确定义一条刚好能区别“真实”与“不真实”的分界线。所以很多时候,一些具体的仿真效果评估不得不依赖主观评价。
但,无人车仿真有它的特殊性——自动驾驶事关道路交通安全,是非常严肃的事情,而仿真作为“自动驾驶算法效果验证”的第一道关卡,作为自动驾驶算法迭代工具链上核心一环,实在是马虎不得。因此这样的“主观判断定好坏”的评判标准显得不够严谨,很难、也不应该作为一个工业级产品作用在实际的无人车技术的发展中。
百度Apollo始终把无人车的安全性作为首要原则,因此希望能够找到一个严谨而精确的量化仿真效果的方法。结合内部实际业务的诉求,Apollo仿真团队逐渐抽象出仿真平台应具有的2个可量化的“仿真真实性”的度量准则:
1、仿真的准召率:与真实路上问题做比对,仿真离线发现的所有问题中,有多少是路上可能发生的?召回率:路上发生的所有问题中,有多少是仿真能够召回的?准召率高则仿真能力强。
2、效果预估准确性:使用仿真对新算法进行路测效果的预估,将最终路测后得到的实际路测效果作为真值。对两者(预估值与真实值)进行相对diff的计算,以评估仿真对真实效果预估能力的强弱。预估vs真实值的相对diff小,则仿真能力强。
(点击图片查看大图)
整个指标体系围绕着一个基本原则:仿真好坏的唯一评价标准就是:仿真产生的结论与真实路测产生的结论“是否具有可客观衡量的、足够强的一致性”。只有这样,大家才能认可并接受:仿真结论能够作为算法效果的标志,仿真能够作为驱动来指引算法的优化方向。
根据仿真平台的功能划分,我们对上述的仿真综合指标进行了拆解,为每个功能区都单独设计了评价体系。
(点击图片查看大图)
场景,作为仿真运行的“输入”。其合理性是仿真能够呈现出“真实结论”的重要一环。在Apollo仿真平台迭代过程中,我们发现,对于场景合理性的考量,需要同时兼顾:场景微观合理性(即单个场景是否有可能在路上出现,不会出现天外飞仙),以及场景宏观合理性(场景是否具有足够的多样性,能够覆盖了路上各种case,在频度上是否与路上实际趋同)。微观合理保证了仿真产出结果的准确性,宏观合理保证了仿真产出结果能够有足够的召回能力。很显然,在具体实现时,两者容易出现冲突——在提升准确性时多样化上就会不足;而在多样性提升时准确性就会下跌。因此需要对宏观/微观两者做良好的balance。这也是场景合理性topic的最大的难点。
最具挑战的问题仍然是如何进行场景合理性的量化评估。
(点击图片查看大图)
整个业务流转的核心在于“场景分类器”。场景分类器的目的在于将相似的场景进行聚类。一个好的分类器需要同时达到较高的“分类敏感性”以及较高的“分类泛化能力”。“分类敏感性”指征的是“是否欠分类”,即是否把本不该在同类的场景划分到同类里。“分类泛化能力”指征的是“是否过分类”,即是否把本该放在同类的场景划分到不同的类里。
Apollo的“相似场景”的评判,基于精细的感知/PNC算法做分类label,因此在训练样本中,能够标识出不同场景中的微小差异点。为了能够区分开这些细微的差异,我们对每个场景提取了十多维场景特征,并聚类到近十万个场景分类空间中。我们在千万量级的场景片段的训练下,最终构建出一个足够敏感的场景分类器。并以此作为后续的各种评估的基础。
怎样认为宏观场景分布是合理的?如果我们一次运行时,即时得到的场景分布效果(种类+频次)与真实路况一段时间的场景分布效果(种类+频次)比较接近(“交并比”较大),则可以认为:我们仿真得到的“场景集合”在宏观分布上比较合理。我们所选择的“真实路况”集合,就作为我们的“场景基准表”。
在持续的迭代中我们发现,在真实路况下某一块固定区域在短时间内场景分布变化较大,需要较长的时间的数据累计才能让场景分布趋于稳定。我们经过大量的数据对比分析的结论是,在较为复杂的城市道路的应用场景中,想得到较为稳定和全面的仿真结论,至少要达到百万公里级别的路采数据。目前Apollo使用的基准场景数据为~300w公里的实路路测数据。
单次仿真运行评估的目标是表征本次仿真运行的实际场景分布效果。
由于在仿真器执行时,障碍车行为在不同算法版本的无人车行为下会带来不同的交互博弈效果,我们意识到,即使在完全一致的场景集合下的运行不同版本的算法,仍然会带来场景分布的偏移。因此我们将“场景分类统计”,后置到“每次仿真任务运行时”进行,以得到关于“本次仿真任务”的真实场景分布描述。
基于我们的极精密的场景分类器以及庞大的场景基准表,我们通过计算“当前任务的场景分布”与“基准库的场景分布”的交并比,来得到当次仿真任务的测试场景分布评估,甚至可以进一步对更多细节进行分析:
(1)本次仿真运行中有哪些场景是几年以来从未在路上见过的?这是以此作为仿真场景微观合理性的负例。
(2)本次仿真运行中有哪些路上实际出现过的高频场景但是并没有被触发出来?以此来作为仿真场景的宏观分布合理性的负例。
至此,在微观和宏观两个维度上,Apollo仿真均能够提供场景合理性的量化评估数据。以这样的数据作为标尺,我们可以持续的优化我们的场景生成算法,以提升场景的微观合理性;同时,进行场景库的构成调优,以提升场景的宏观合理性。两大维度上进行合力优化,促进了仿真对路上预测效果的准确性的快速提升。
传感器仿真是用来评估感知算法效果的最重要的仿真功能。为了向算法研发的同学提供更置信的仿真结论,Apollo仿真团队希望能够避免传统上的“肉眼凭感觉”的主观评估,以客观度量作为真实性的唯一标准。我们尝试以:传感器仿真能够“多么精确的召回感知算法在路上实际的问题”、“多么精确的反映出感知算法在路上实际的各项指标”作为传感器仿真的效果评估指标。
(点击图片查看大图)
我们通过计算,基于传感器仿真数据的感知metric,以及基于真实数据的感知metric。对真实数据/模拟数据两个metric结果集合计算加权向量距离,以距离值大小来作为我们传感器仿真效果与真实值的差距。
由于使用了我们足够精细的感知算法,以及全面的感知metric(已经使用的metric包括:不同距离下、不同角度下、不同类型障碍物类型下的,速度跳变、角度跳变、位置跳变、生命周期跳变……等一系列的极其细致的度量),我们能够发现传感器仿真过程中细微的不足之处。例如我们曾经发现,由于对远处绘制的过于清晰,使得远处本该出现的远处障碍物类型的跳变率比实际路上效果显著降低,因此我们补充了远景模糊。同时,在海量里程数据的支持下,保证了场景具备多样化,使得我们的传感器仿真可以在发现很多仅仅出现在corner case中的问题。例如我们曾发现仿真数据中会对某些行人会被漏检,而真实数据下一切正常。分析后发现少量行人的特殊服装对lidar反射值有一些bias。因此我们对行人的lidar反射值参数做了重新建模,修复了该类问题。这个case本身是路上的长尾问题,我们在数十万公里的仿真数据下才发现了几个异常case。但是由于是涉及到行人的道路安全性问题,还是不能马虎大意,必须要对其进行修复。
最后,我们为传感器仿真建立起从度量真实性,一直到进行针对性优化迭代的完整闭环,将传感器仿真的自身优化与传感器仿真对于实际业务价值的交付合并进了统一的研发流程中。
车辆动力学仿真用来模拟:确定的控制信号输入后,车辆会进入怎样的新的状态,也是仿真领域里理论相对比较成熟的一个方向。但是由于Apollo需要对不同车型(Apollo的多种自动驾驶车型)、不同路况(Apollo在多个城市/区域的运营)进行专项优化,因此在实际应用中,车辆动力学仿真的在多样化车型和场景下的适配效果是非常重要的优化点。同时由于Apollo对自动驾驶时的体感(急刹、顿挫、晃动……)的高度关注,而体感指标对动力学仿真的误差非常敏感,这也对动力学仿真的精细度提出了极高要求。在Apollo团队,车辆动力学仿真始终作为仿真的核心研发方向。
如何量化评估车辆动力学仿真对多样化场景的仿真真实性效果?如何量化评估车辆动力学仿真对体感问题的辨识能力?这是优化动力学仿真时首要解决的问题。
(点击图片查看大图)
可以看到,基于海量的路测数据,我们建立了一个“仿真轨迹”vs“路测轨迹” + “仿真体感度量输出”vs“路测体感度量输出”的两轮对比通路。由粗到细,共同构成了整套仿真vs真实的对比验证框架。
在我们实际进行动力学仿真模型优化过程中,我们发现,采用的封闭测试场中,有限数据集标定的方案,一方面在细节识别上很难满足需求,另一方面同型号不同车辆个体间差异无法表征以及归一化。想要得到足够真实精确,具有足够泛化性的动力学效果评估,必须要基于数十万公里的真实数据来完成。
更进一步,基于可量化的车辆动力学仿真误差,我们同时建立起一套数据/模型驱动的动力学模型,提升动力学仿真精准度效果的同时,大幅优化了新车型/新工况的适配效率。
模块在仿真中运行,与真实道路上的运行相比,在同样输入的情况下,产生的diff有多大?这个diff的量化评估,在我们内部称之为“仿真复现率”。很明显,仿真的复现能力是仿真能够做出正确预测的前置依赖:如果仿真中的效果,与路测时真实效果无法完成严格的一一对齐,那么仿真给出的任何结论都是没有任何价值的。而提升“仿真复现率”的首要问题还是量化问题——“如何客观度量仿真复现率”。
(点击图片查看大图)
这个复现率是一个综合性指标,分解来看,它除了包含了上节提到的“动力学仿真”的精准性的影响,还受到一些其他因素的干扰。比如“带状态的策略”、“仿真时钟标准节律与路测时钟节律不同步”等等方面。
因此,当我们建立起了一套持续性仿真虚拟车-路测实车轨迹/微观行为对比流水线。随后持续进行了数十万公里的仿真-真实的差异度测量。我们甚至分析得到了这样一系列仿真真实性精确的评估值:
(1)在10w公里量级上,我们的仿真真实率是百分之多少?如果提升到20w公里量级,真实性会降低到多少?
(2)我们在体感类型的指标判定上,我们的仿真真实性是多少?
(3)在哪类问题上我们的仿真真实性最差?
一方面,我们有的放矢,对最差的部分进行优化,包括仿真时钟节奏对齐性调整、中间数据状态恢复、动力学模型优化……;另一方面,我们能够基于这些结论进行量化分析,得到仿真结论对比实路真实效果,差异度的上下限,这样就给了我们的研发同学充分的信心,能够根据仿真结果了解算法真实的能力边界在哪里。
仿真的最终用户价值是为了识别算法缺陷。由于仿真的一次运行往往是万级别甚至数十万级别的海量场景,因此基于算法的缺陷自动识别,成为仿真必要的能力。因此,对于缺陷的识别的准召率,成为这个技术方向上的两大评估指标。传统的仿真软件往往只提供rule-based的简单判定准则,比如一些简单的“到达目的地”;“碰撞”;“部分交规”等等。但随着Apollo自动驾驶算法的持续进化,缺陷识别能力迎来了更具挑战性的目标——全面的且精准的评估无人车的行为合理性,我们需要更为复杂的“算法缺陷评估能力”,例如:安全性(安全感受)、体感(急刹、顿挫)、智能性(变道时机选择不合理、nudge行为不合理、超车时机不合理、不合理停滞……)。无论是安全性、体感、还是智能感,他们都是一个偏主观的感受型判定,很难通过简单规则来概括。
(点击图片查看大图)
百度Apollo拥有百万公里以上的真实路测里程,同时还拥有与这百万测试里程数据对应的,数十万来自驾驶员、乘客的真实感受的标准化记录。这些标注构成训练集以及评测集,进入到我们的算法训练闭环框架中,形成了我们的grading策略的优化效果指标。而海量label数据的支持也使得我们能够采用一些learning-based的新方案来提升我们评估的准确性。
例如安全性。事实上我们对于无人车算法在安全性方面的要求,不仅需要达到“不发生碰撞”,还需要达到“不发生让人感受到安全风险”,我们内部称之为“碰撞风险检测”。这样的主观感受型的检测项难以通过规则来实现。基于积累的海量测试里程,以及大量的司机的安全类接管case,我们将司机的接管行为作为标注数据,使用机器学习的方法获得了足够高准招的“碰撞风险”的识别能力。更进一步,在对数据的分析过程中,我们发现人类司机/乘客具有相当明显的“主观判断的不确定性”。最开始我们基于几名司机的标注数据进行分析,发现始终无法得到一个稳定解。后面我们把使用司机标注数据范围扩大到近百位司机,终于体现出显著的聚集效应。基于这样的数据分布,我们得以完成对碰撞风险的分级工作:90%以上的司机都认为是碰撞风险的“极度恶劣碰撞风险”,低于50%的司机认为是碰撞风险的“轻度碰撞风险”。
基于同样的逻辑,我们在体感、智能感方面也完成了大量有明确效果的优化。
在自动驾驶领域,仿真的业务价值是用来验证算法的好坏,所以“验证自动驾驶算法好坏的能力大小”是仿真能力高低的唯一评判标准。而这个“能力大小”的判定应该是一种“客观度量”,应该是经受得住真实的大规模路采数据的考验。而未经真实数据和算法迭代效果检验过的仿真器,不仅无助于算法的快速迭代,甚至会对自动驾驶技术的进步产生严重的负向影响。而Apollo仿真团队经过长时间的探索,已经挖掘并完整建立起这样一系列业务结果导向的客观量化指标,并以此持续牵引仿真技术的优化方向,保证了Apollo的仿真器在“充分满足算法迭代的需求,足够准确合理的指出真实问题”的路线上快速前进而不会发生航线偏离。
在这样思路引导下,Apollo仿真团队慢慢构建起完整的仿真+路测的联合优化的闭环迭代体系。
(点击图片查看大图)
我们认为,仿真和路测并不是传统大家所认知的属于不同验证阶段的相互独立关系,当然更不是用仿真代替路测的替代关系。海量路测数据正是仿真优化的基础,仿真优化为算法迭代提供了更大的支持,更优的算法又进一步带来了更大规模的路测里程,而更大规模的路测里程又进一步提升了仿真效果——仿真和路测,在迭代闭环的两端,两者关系实际上一种相互依存相互促进,良性正循环的模式。
未来,全无人驾驶定会彻底改变人们的生活。而现在,无人驾驶还只是一个在蹒跚学步的孩子。无人驾驶的仿真,其定位非常明确——它是这个孩子的老师,它需要承担起“支持无人驾驶技术快速成长”的重任。无人驾驶的仿真技术还有很多待探索的区域,待完善的功能。希望大家能够共同建立和维护仿真能力的通用标准,并以此为目标来优化仿真器的效果,进而为中国的自动驾驶技术早日落地提供真正的价值。