图2. a) 一种典型的城市驾驶场景; b) 分配任务的时空排列; c) 随时间变化的相应计算开销
图3. 一个驾驶任务逐级细化的过程也就是对于任务空间的抽样过程,包括逐级确定分配任务的时空排列和创建实例
3.3.3. 智能车智能性测试框架
在传统汽车测试开发中我们经常使用V字型开发方法。如下图所示,在这种方法中,人们在开发阶段就定义了相应级别的测试用例。
图4. 传统汽车测试V字形开发流程
V模型的第一阶段是整体需求确认阶段,在该阶段与整体需求对应的测试用例也会提前定义。第二阶段,第三阶段分别是系统级别(High-Level-Design)以及子系统级别(Low-Level-Design)的设计和对应测试用力的书写。在这两个阶段系统的功能会被分解细化,软件中的各种类,以及类间关系会被定义。同时,也需要在这两个阶段书写同样级别的测试用例。第四阶段是模块设计,在这个阶段,子系统会进一步分解成为小的模块,对应的对于模块的测试用例也会在这个阶段定义完成。
如果把我们提出的测试方法和V模型一一对应,就能得到如下的Λ-V模型:不断学习新示例,举一反三,逐步完善任务描述。
图5. Λ-V模型测试框架
V模型对于传统汽车研发这一类系统性和可推导性比较强的系统工程有较好的效果,但是由于我们需要在具体的编程之前就设计好所有的测试用例,这使得该模型在较为复杂的人工智能系统开发中很难直接套用。
我们认为,在开发智能系统过程中,机器学习和测试如同一个硬币的两面,智能性测试应该和机器学习有着类似的流程。
(a)
(b)
图6. 智能车测试框架
在平行学习的框架下,首先要解决的问题是如何获取新的数据用来学习,该阶段我们称为描述性学习阶段;在第二阶段,会从第一阶段中提取特定的数据有针对性的进行学习,从而获得“小知识”,该阶段我们称为特定数据学习阶段;第三阶段是预测性学习阶段,在该阶段,会把前两阶段得来的数据和知识一一对应,这种联系也会被记录下来。最后,所有的新数据会在第三阶段已有联系的基础上找到对应的“小知识”。
与此类似的,如图6(b)所示,智能车的智能性测试也有着类似的流程。第一阶段是创建新的测试任务。在这个过程中,在场景中的测试任务都会被逐步分解成为细化的功能。第二阶段是在第一阶段创建的测试任务中选取有挑战性的部分(测试取样)。最后一个阶段是测试的执行,也就是在前两个阶段创建的任务中观察智能车的表现。在这个阶段,我们需要从测试结果中得到两类关联信息,第一类是车辆智能性和其在我们搭建的测试环境中的表现的关联,这种关联对于我们在新的测试任务中取样有很大的帮助;第二种关联是测试本身和测试环境的关联,我们需要从不同的测试环境中学习到如何更好的创建测试任务。
我们提出了以上的智能性测试框架是基于以下考虑: